vkd3d-shader/msl: Implement support for VKD3DSPR_UNDEF registers.

MSL doesn't seem to have any special handling for undefined values,
differently from SPIR-V. Thus we just emit zeros.

UNDEF registers are sometimes created by the DXIL parser,
for example in sm6_parser_emit_composite_construct().
This commit is contained in:
Giovanni Mascellani
2025-10-20 22:04:46 +02:00
committed by Henri Verbeet
parent eaabd2ffd7
commit cc1db404b0
Notes: Henri Verbeet 2025-10-30 20:00:07 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1757
10 changed files with 125 additions and 135 deletions

View File

@@ -453,6 +453,24 @@ static enum msl_data_type msl_print_register_name(struct vkd3d_string_buffer *bu
vkd3d_string_buffer_printf(buffer, "v_local_thread_index");
return MSL_DATA_UNION;
case VKD3DSPR_UNDEF:
switch (reg->dimension)
{
case VSIR_DIMENSION_SCALAR:
vkd3d_string_buffer_printf(buffer, "0u");
return MSL_DATA_UINT;
case VSIR_DIMENSION_VEC4:
vkd3d_string_buffer_printf(buffer, "uint4(0u, 0u, 0u, 0u)");
return MSL_DATA_UINT;
default:
vkd3d_string_buffer_printf(buffer, "<unhandled_dimension %#x>", reg->dimension);
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
"Internal compiler error: Unhandled dimension %#x.", reg->dimension);
return MSL_DATA_UINT;
}
default:
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
"Internal compiler error: Unhandled register type %#x.", reg->type);