From f57a53a59dafb407d2a9300e98124946f0dfddfd Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 13 Jan 2023 18:40:32 +0000 Subject: [PATCH] Fix some minor deltas to dxc's disassembly --- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 1 + .../driver/shaders/dxil/dxil_debuginfo.cpp | 27 +++++++++++++++++++ .../driver/shaders/dxil/dxil_disassemble.cpp | 8 ++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index b035deae5..b7f8d502a 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -681,6 +681,7 @@ protected: bool ParseDebugMetaRecord(const LLVMBC::BlockOrRecord &metaRecord, Metadata &meta); rdcstr GetDebugVarName(const DIBase *d); + rdcstr GetFunctionScopeName(const DIBase *d); rdcstr &GetValueSymtabString(const Value &v); diff --git a/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp b/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp index 25b7697ca..b29258e3d 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debuginfo.cpp @@ -245,6 +245,33 @@ rdcstr Program::GetDebugVarName(const DIBase *d) return "???"; } +rdcstr Program::GetFunctionScopeName(const DIBase *d) +{ + const Metadata *scope = NULL; + if(d->type == DIBase::LocalVariable) + scope = d->As()->scope; + if(d->type == DIBase::GlobalVariable) + scope = d->As()->scope; + + while(scope && scope->dwarf) + { + if(scope->dwarf->type == DIBase::Subprogram) + { + const rdcstr *name = scope->dwarf->As()->name; + return name ? *name : ""; + } + else if(scope->dwarf->type == DIBase::LexicalBlock) + { + scope = scope->dwarf->As()->scope; + continue; + } + + break; + } + + return ""; +} + rdcstr getOptMetaString(const Metadata *meta) { return meta ? escapeString(meta->str).c_str() : "\"\""; diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index b1e852c1a..e89a16cdd 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -219,7 +219,7 @@ void Program::MakeDisassemblyString() "CheckAccessFullyMapped(status)", "GetDimensions(handle,mipLevel)", "TextureGather(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,channel)", - "TextureGatherCmp(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,channel,compareVale)", + "TextureGatherCmp(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,channel,compareValue)", "Texture2DMSGetSamplePosition(srv,index)", "RenderTargetGetSamplePosition(index)", "RenderTargetGetSampleCount()", @@ -1263,6 +1263,10 @@ void Program::MakeDisassemblyString() m_Disassembly += StringFormat::Fmt( " ; var:%s ", escapeString(GetDebugVarName(inst.args[varIdx].meta->dwarf)).c_str()); m_Disassembly += inst.args[exprIdx].meta->valString(); + + rdcstr funcName = GetFunctionScopeName(inst.args[varIdx].meta->dwarf); + if(!funcName.empty()) + m_Disassembly += StringFormat::Fmt(" func:%s", escapeString(funcName).c_str()); } } @@ -1539,7 +1543,7 @@ rdcstr Type::toString() const else return StringFormat::Fmt("%s addrspace(%d)*", inner->toString().c_str(), addrSpace); case Array: return StringFormat::Fmt("[%u x %s]", elemCount, inner->toString().c_str()); - case Function: return declFunction(rdcstr(), {}, NULL); + case Function: return declFunction(rdcstr(), {}, NULL) + "*"; case Struct: { rdcstr ret;