diff --git a/libs/vkd3d-shader/msl.c b/libs/vkd3d-shader/msl.c index 9f6127f46..032b55043 100644 --- a/libs/vkd3d-shader/msl.c +++ b/libs/vkd3d-shader/msl.c @@ -1971,6 +1971,8 @@ static void msl_generate_entrypoint(struct msl_generator *gen) vkd3d_string_buffer_printf(gen->buffer, "vertex "); break; case VKD3D_SHADER_TYPE_PIXEL: + if (gen->program->global_flags & VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL) + vkd3d_string_buffer_printf(gen->buffer, "[[early_fragment_tests]]\n"); vkd3d_string_buffer_printf(gen->buffer, "fragment "); break; default: @@ -2036,7 +2038,7 @@ static int msl_generator_generate(struct msl_generator *gen, struct vkd3d_shader vkd3d_string_buffer_printf(gen->buffer, "#include \n\n"); vkd3d_string_buffer_printf(gen->buffer, "using namespace metal;\n\n"); - if (gen->program->global_flags & ~VKD3DSGF_REFACTORING_ALLOWED) + if (gen->program->global_flags & ~(VKD3DSGF_REFACTORING_ALLOWED | VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL)) msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, "Internal compiler error: Unhandled global flags %#"PRIx64".", (uint64_t)gen->program->global_flags); diff --git a/tests/hlsl/early-depth-stencil.shader_test b/tests/hlsl/early-depth-stencil.shader_test index 78f703c50..80582c47a 100644 --- a/tests/hlsl/early-depth-stencil.shader_test +++ b/tests/hlsl/early-depth-stencil.shader_test @@ -26,6 +26,6 @@ depth greater equal clear rtv 0 0.0 0.0 0.0 0.0 clear dsv 0.5 -todo(msl) draw quad +draw quad probe (0, 0) f32(0, 0, 0, 0) probe uav 1 (0) f32(0.0)