From 582622563cfc01d79a56760b80753b3eafc2e033 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 22 Nov 2015 22:44:06 +0100 Subject: [PATCH] Handle arrays of structs in SPIR-V disassembly --- .../shaders/spirv/spirv_disassemble.cpp | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 80361311d..1f8d3e5cb 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -2019,20 +2019,21 @@ void MakeConstantBlockVariables(SPVTypeData *type, rdctype::arraytype == SPVTypeData::eVector || - t->type == SPVTypeData::eMatrix || - t->type == SPVTypeData::eArray) + + string suffix = ""; + + cblock[i].type.descriptor.elements = 1; + + if(t->type == SPVTypeData::eArray) { - string suffix = ""; - - if(t->type == SPVTypeData::eArray) - { - suffix += StringFormat::Fmt("[%u]", t->arraySize); - cblock[i].type.descriptor.elements = t->arraySize; - t = t->baseType; - } + suffix += StringFormat::Fmt("[%u]", t->arraySize); + cblock[i].type.descriptor.elements = t->arraySize; + t = t->baseType; + } + if(t->type == SPVTypeData::eVector || + t->type == SPVTypeData::eMatrix) + { if(t->baseType->type == SPVTypeData::eFloat) cblock[i].type.descriptor.type = eVar_Float; else if(t->baseType->type == SPVTypeData::eUInt) @@ -2075,9 +2076,8 @@ void MakeConstantBlockVariables(SPVTypeData *type, rdctype::arrayGetName(); + cblock[i].type.descriptor.name = t->GetName() + suffix; } else { @@ -2085,9 +2085,8 @@ void MakeConstantBlockVariables(SPVTypeData *type, rdctype::arrayGetName(); + cblock[i].type.descriptor.name = t->GetName() + suffix; MakeConstantBlockVariables(t, cblock[i].type.members); }