From 5ea697b8ebafa9b6139ce7432caef5ad18ca25de Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 22 May 2025 10:11:39 +0200 Subject: [PATCH] vkd3d-shader/msl: Handle SV_SAMPLE_INDEX inputs. --- libs/vkd3d-shader/msl.c | 16 ++++++++++++++++ tests/hlsl/texture-load.shader_test | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/msl.c b/libs/vkd3d-shader/msl.c index 2fea64fd1..62981811e 100644 --- a/libs/vkd3d-shader/msl.c +++ b/libs/vkd3d-shader/msl.c @@ -1074,9 +1074,19 @@ static void msl_generate_input_struct_declarations(struct msl_generator *gen) vkd3d_string_buffer_printf(buffer, "bool is_front_face [[front_facing]];\n"); continue; + case VKD3D_SHADER_SV_SAMPLE_INDEX: + if (type != VKD3D_SHADER_TYPE_PIXEL) + msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, + "Internal compiler error: Unhandled SV_SAMPLE_INDEX in shader type #%x.", type); + msl_print_indent(gen->buffer, 1); + vkd3d_string_buffer_printf(buffer, "uint sample_index [[sample_id]];\n"); + continue; + default: msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, "Internal compiler error: Unhandled system value %#x.", e->sysval_semantic); + msl_print_indent(gen->buffer, 1); + vkd3d_string_buffer_printf(buffer, ";\n", e->sysval_semantic); continue; } @@ -1310,6 +1320,12 @@ static void msl_generate_entrypoint_prologue(struct msl_generator *gen) vkd3d_string_buffer_printf(buffer, " = uint4(input.is_front_face ? 0xffffffffu : 0u, 0, 0, 0)"); break; + case VKD3D_SHADER_SV_SAMPLE_INDEX: + msl_print_register_datatype(buffer, gen, VKD3D_DATA_UINT); + msl_print_write_mask(buffer, e->mask); + vkd3d_string_buffer_printf(buffer, " = uint4(input.sample_index, 0u, 0u, 0u)"); + break; + default: vkd3d_string_buffer_printf(buffer, " = ", e->sysval_semantic); msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, diff --git a/tests/hlsl/texture-load.shader_test b/tests/hlsl/texture-load.shader_test index 06271b011..fe4ab9588 100644 --- a/tests/hlsl/texture-load.shader_test +++ b/tests/hlsl/texture-load.shader_test @@ -167,7 +167,7 @@ float4 main(uint id : sv_sampleindex) : sv_target [test] clear rtv 0 0.0 0.0 0.0 0.0 -todo(msl) draw quad +draw quad probe (32, 32) rgba(3.75, 0.25, 0.5, 1.0) todo(msl) copy rtv 0 srv 0