From 30fe42672b577a6909048d2a1935183e87c3b1c8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 18 Oct 2019 15:39:42 +0100 Subject: [PATCH] Declare multidimensional arrays in right order in SPIR-V disassembly --- .../driver/shaders/spirv/spirv_reflect.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index 2d97ca881..ddf3e21e3 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -552,8 +552,21 @@ void Reflector::PostParse() lengthName = StringFormat::Fmt("_%u", type.length); } - type.name = StringFormat::Fmt("%s[%s]", dataTypes[type.InnerType()].name.c_str(), - lengthName.c_str()); + rdcstr basename = dataTypes[type.InnerType()].name; + + // arrays are inside-out, so we need to insert our new array length before the first array + // length + int arrayCharIdx = basename.indexOf('['); + if(arrayCharIdx > 0) + { + type.name = StringFormat::Fmt("%s[%s]%s", basename.substr(0, arrayCharIdx).c_str(), + lengthName.c_str(), basename.substr(arrayCharIdx)); + } + else + { + type.name = StringFormat::Fmt("%s[%s]", dataTypes[type.InnerType()].name.c_str(), + lengthName.c_str()); + } } else if(type.type < DataType::StructType) {