diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp index 9aa914723..e1223911f 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -1721,9 +1721,9 @@ void Debugger::AddSourceVars(rdcarray &sourceVars, const sourceVar.name = name; sourceVar.offset = 0; sourceVar.type = var.type; - sourceVar.rows = var.rows; - sourceVar.columns = var.columns; - for(uint32_t x = 0; x < uint32_t(var.rows) * var.columns; x++) + sourceVar.rows = RDCMAX(1U, (uint32_t)var.rows); + sourceVar.columns = RDCMAX(1U, (uint32_t)var.columns); + for(uint32_t x = 0; x < sourceVar.rows * sourceVar.columns; x++) sourceVar.variables.push_back(DebugVariableReference(DebugVariableType::Variable, var.name, x)); sourceVars.push_back(sourceVar); diff --git a/util/test/demos/vk/vk_shader_debug_zoo.cpp b/util/test/demos/vk/vk_shader_debug_zoo.cpp index cfff57a3e..6c29b4e56 100644 --- a/util/test/demos/vk/vk_shader_debug_zoo.cpp +++ b/util/test/demos/vk/vk_shader_debug_zoo.cpp @@ -2599,6 +2599,21 @@ void main() %_out_float4 = OpFAdd %float4 %_x %float4_1234 )EOTEST", }); + + // test naming structs. Since we can't easily name auto-generated IDs we use a guid to give the + // ID a unique name + append_tests({ + R"EOTEST( + %_a = OpCompositeConstruct %float4 %float_dyn_4_2 %float_dyn_1_0 %float_dyn_9_5 %float_dyn_0_01 + +%C14FA880_4F83_4982_BEAD_CE9103446C76 = OpCompositeInsert %parent %_a %null_parent 0 + +%_out_float4 = OpCompositeExtract %float4 %C14FA880_4F83_4982_BEAD_CE9103446C76 0 +)EOTEST", + }); + + spv_debug += + "OpName %C14FA880_4F83_4982_BEAD_CE9103446C76 \"C14FA880_4F83_4982_BEAD_CE9103446C76\"\n"; } std::string make_pixel_asm()