From be24fc8aaa38b67b408b7cc0886573c534088126 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 12 Nov 2024 10:11:32 +0000 Subject: [PATCH] DXIL Disassembly and Debug sanitise global variable names Using newly added DXIL::SanisiseName() Current implementation converts '.' -> '_' --- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 2 ++ renderdoc/driver/shaders/dxil/dxil_debug.cpp | 4 +++- renderdoc/driver/shaders/dxil/dxil_disassemble.cpp | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index a33ebf640..62dbbf4e0 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -1737,6 +1737,8 @@ bool IsLLVMDebugCall(const Instruction &inst); bool isUndef(const Value *v); +void SanitiseName(rdcstr &name); + }; // namespace DXIL DECLARE_REFLECTION_ENUM(DXIL::Attribute); diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index d94968a8a..2db61bff8 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -5755,7 +5755,9 @@ ShaderDebugTrace *Debugger::BeginDebug(uint32_t eventId, const DXBC::DXBCContain continue; GlobalVariable globalVar; - globalVar.var.name = DXBC::BasicDemangle(gv->name); + rdcstr n = DXBC::BasicDemangle(gv->name); + DXIL::SanitiseName(n); + globalVar.var.name = n; globalVar.id = gv->ssaId; state.AllocateMemoryForType(gv->type, globalVar.id, globalVar.var); diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 93c0b93fd..214d07245 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -163,6 +163,16 @@ bool DXIL::FindSigParameter(const rdcarray &inputSig, return false; } +// Replace '.' -> '_' +void DXIL::SanitiseName(rdcstr &name) +{ + for(size_t c = 0; c < name.size(); ++c) + { + if(name[c] == '.') + name[c] = '_'; + } +} + static const char *shaderNames[] = { "Pixel", "Vertex", "Geometry", "Hull", "Domain", "Compute", "Library", "RayGeneration", "Intersection", "AnyHit", @@ -1576,7 +1586,10 @@ rdcstr Program::DisassembleGlobalVars(int &instructionLine) const rdcstr n = g.name; if(!m_DXCStyle) + { n = DXBC::BasicDemangle(g.name); + DXIL::SanitiseName(n); + } ret += StringFormat::Fmt("@%s = ", escapeStringIfNeeded(n).c_str()); switch(g.flags & GlobalFlags::LinkageMask) {