From 49a821a7b3da3beab823a700b08fd30582df623a Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 6 Jan 2016 23:20:23 +0100 Subject: [PATCH] Handle disassembling arrays and unknown ops in parameter to vector shuf --- renderdoc/driver/shaders/spirv/spirv_disassemble.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 6c39d7f20..7e9866b1e 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -399,6 +399,10 @@ struct SPVTypeData { name = StringFormat::Fmt("%s*", baseType->GetName().c_str()); } + else if(type == eArray) + { + name = StringFormat::Fmt("%s[%u]", baseType->GetName().c_str(), arraySize); + } else if(type == eImage) { string typestring = baseType->GetName(); @@ -1127,6 +1131,13 @@ struct SPVInstruction if(!inlineOp) ret = StringFormat::Fmt("%s %s = ", op->type->GetName().c_str(), GetIDName().c_str()); + // can't gracefully handle unknown arguments here + if(op->arguments[0]->opcode == spv::OpUnknown || op->arguments[0]->opcode == spv::OpUnknown) + { + ret += StringFormat::Fmt("VectorShuffle(%s, %s)", op->arguments[0]->Disassemble(ids, true), op->arguments[1]->Disassemble(ids, true)); + return ret; + } + SPVTypeData *vec1type = op->arguments[0]->op->type; SPVTypeData *vec2type = op->arguments[1]->constant ? op->arguments[1]->constant->type : op->arguments[1]->op->type;