vkd3d-shader/msl: Handle SV_SAMPLE_INDEX inputs.

This commit is contained in:
Henri Verbeet
2025-05-22 10:11:39 +02:00
parent 34d8be3b2e
commit 5ea697b8eb
Notes: Henri Verbeet 2025-06-05 16:18:57 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1537
2 changed files with 17 additions and 1 deletions

View File

@@ -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, "<unhandled sysval %#x>;\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, " = <unhandled sysval %#x>", e->sysval_semantic);
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,

View File

@@ -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