From 132415fd387cbaed5d84a93a31ee065170c31346 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 26 Nov 2015 16:00:22 +0100 Subject: [PATCH] Add a bit of a hack to store which ID/member each output element is for --- .../driver/shaders/spirv/spirv_disassemble.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 6c2b83e84..ee4551296 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -2349,14 +2349,19 @@ struct bindpair typedef bindpair cblockpair; typedef bindpair shaderrespair; -void AddSignatureParameter(string varName, SPVTypeData *type, const vector &decorations, vector &sigarray, rdctype::array *inputAttrs) +void AddSignatureParameter(uint32_t id, uint32_t childIdx, string varName, SPVTypeData *type, const vector &decorations, vector &sigarray, rdctype::array *inputAttrs) { SigParameter sig; sig.varName = varName; - sig.semanticIndex = 0; sig.needSemanticIndex = false; + // this is super cheeky, but useful to pick up when doing output dumping and + // these properties won't be used elsewhere. We should really share the data + // in a better way though. + sig.semanticIdxName = StringFormat::Fmt("%u", id); + sig.semanticIndex = childIdx; + bool rowmajor = true; sig.regIndex = 0; @@ -2379,8 +2384,10 @@ void AddSignatureParameter(string varName, SPVTypeData *type, const vectortype == SPVTypeData::eStruct) { + // we don't support nested structs yet + RDCASSERT(childIdx == ~0U); for(size_t c=0; c < type->children.size(); c++) - AddSignatureParameter(varName + "." + type->children[c].second, type->children[c].first, type->decorations[c], sigarray, inputAttrs); + AddSignatureParameter(id, (uint32_t)c, varName + "." + type->children[c].second, type->children[c].first, type->decorations[c], sigarray, inputAttrs); return; } @@ -2464,7 +2471,7 @@ void SPVModule::MakeReflection(ShaderReflection *reflection, ShaderBindpointMapp else nm = StringFormat::Fmt("sig%u", inst->id); - AddSignatureParameter(nm, inst->var->type, inst->decorations, *sigarray, isInput ? &mapping->InputAttributes : NULL); + AddSignatureParameter(inst->id, ~0U, nm, inst->var->type, inst->decorations, *sigarray, isInput ? &mapping->InputAttributes : NULL); } else if(inst->var->storage == spv::StorageClassUniform || inst->var->storage == spv::StorageClassUniformConstant ||