From 768f4782e3915a9bcbb303cf9c2edc7ff52e04b8 Mon Sep 17 00:00:00 2001 From: Calder Young Date: Thu, 14 May 2026 15:53:46 -0700 Subject: [PATCH] spirv: Fix debugPrintfEXT not working with multiple arguments The struct field offsets weren't getting initialized. Reviewed-by: Samuel Pitoiset CC: mesa-stable Part-of: --- src/compiler/spirv/spirv_to_nir.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 2ea5925ad52..31155af2a0a 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -844,6 +844,7 @@ vtn_handle_debug_printf(struct vtn_builder *b, SpvOp ext_opcode, if (argc) { glsl_struct_field *fields = calloc(argc, sizeof(glsl_struct_field)); + int next_offset = 0; for (uint32_t i = 0; i < argc; i++) { struct vtn_ssa_value *arg = vtn_ssa_value(b, w[6 + i]); @@ -852,8 +853,11 @@ vtn_handle_debug_printf(struct vtn_builder *b, SpvOp ext_opcode, fields[i].type = glsl_vector_type(fields[i].type->base_type, arg->def->num_components); fields[i].name = ""; + fields[i].offset = next_offset; - info->arg_sizes[i] = arg->def->bit_size / 8; + int size = (int) arg->def->bit_size * arg->def->num_components / 8; + info->arg_sizes[i] = size; + next_offset += size; } nir_variable *packed_args = nir_local_variable_create(