vkd3d-shader/msl: Emit indexable temps with the appropriate component count.

This commit is contained in:
Giovanni Mascellani
2025-07-15 17:56:31 +02:00
committed by Henri Verbeet
parent 6ed0bd0bab
commit 16b06c295b
Notes: Henri Verbeet 2025-07-28 16:39:33 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1655

View File

@@ -1402,8 +1402,9 @@ static void msl_ret(struct msl_generator *gen, const struct vkd3d_shader_instruc
static void msl_dcl_indexable_temp(struct msl_generator *gen, const struct vkd3d_shader_instruction *ins) static void msl_dcl_indexable_temp(struct msl_generator *gen, const struct vkd3d_shader_instruction *ins)
{ {
const char *type = ins->declaration.indexable_temp.component_count == 4 ? "vkd3d_vec4" : "vkd3d_scalar";
msl_print_indent(gen->buffer, gen->indent); msl_print_indent(gen->buffer, gen->indent);
vkd3d_string_buffer_printf(gen->buffer, "vkd3d_vec4 x%u[%u];\n", vkd3d_string_buffer_printf(gen->buffer, "%s x%u[%u];\n", type,
ins->declaration.indexable_temp.register_idx, ins->declaration.indexable_temp.register_idx,
ins->declaration.indexable_temp.register_size); ins->declaration.indexable_temp.register_size);
} }
@@ -2035,6 +2036,11 @@ static int msl_generator_generate(struct msl_generator *gen, struct vkd3d_shader
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
"Internal compiler error: Unhandled global flags %#"PRIx64".", (uint64_t)gen->program->global_flags); "Internal compiler error: Unhandled global flags %#"PRIx64".", (uint64_t)gen->program->global_flags);
vkd3d_string_buffer_printf(gen->buffer, "union vkd3d_scalar\n{\n");
vkd3d_string_buffer_printf(gen->buffer, " uint u;\n");
vkd3d_string_buffer_printf(gen->buffer, " int i;\n");
vkd3d_string_buffer_printf(gen->buffer, " float f;\n};\n\n");
vkd3d_string_buffer_printf(gen->buffer, "union vkd3d_vec4\n{\n"); vkd3d_string_buffer_printf(gen->buffer, "union vkd3d_vec4\n{\n");
vkd3d_string_buffer_printf(gen->buffer, " uint4 u;\n"); vkd3d_string_buffer_printf(gen->buffer, " uint4 u;\n");
vkd3d_string_buffer_printf(gen->buffer, " int4 i;\n"); vkd3d_string_buffer_printf(gen->buffer, " int4 i;\n");