diff --git a/renderdoc/driver/shaders/dxbc/dxbc_common.h b/renderdoc/driver/shaders/dxbc/dxbc_common.h index 35c8c5ff2..ff6a74028 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_common.h +++ b/renderdoc/driver/shaders/dxbc/dxbc_common.h @@ -412,4 +412,7 @@ public: virtual void GetLocals(const DXBC::DXBCContainer *dxbc, size_t instruction, uintptr_t offset, rdcarray &locals) const = 0; }; + +rdcstr BasicDemangle(rdcstr possiblyMangledName); + }; diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp index 61627c981..365e3e774 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp @@ -42,6 +42,19 @@ RDOC_EXTERN_CONFIG(rdcarray, DXBC_Debug_SearchDirPaths); namespace DXBC { +rdcstr BasicDemangle(rdcstr possiblyMangledName) +{ + if(possiblyMangledName.size() > 2 && possiblyMangledName[0] == '\x1' && + possiblyMangledName[1] == '?') + { + int idx = possiblyMangledName.indexOf('@'); + if(idx > 2) + return possiblyMangledName.substr(2, idx - 2); + } + + return possiblyMangledName; +} + struct RDEFCBufferVariable { uint32_t nameOffset; diff --git a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp index 927132098..b6a211fbb 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp @@ -340,13 +340,7 @@ void MakeShaderReflection(DXBC::DXBCContainer *dxbc, const ShaderEntryPoint &ent refl->debugInfo.entrySourceName = refl->entryPoint = entryFunc; // demangle DXIL source names for display - if(refl->debugInfo.entrySourceName.size() > 2 && refl->debugInfo.entrySourceName[0] == '\x1' && - refl->debugInfo.entrySourceName[1] == '?') - { - int idx = refl->debugInfo.entrySourceName.indexOf('@'); - if(idx > 2) - refl->debugInfo.entrySourceName = refl->debugInfo.entrySourceName.substr(2, idx - 2); - } + refl->debugInfo.entrySourceName = DXBC::BasicDemangle(refl->entryPoint); // assume the debug info put the file with the entry point at the start. SDBG seems to do this // by default, and SPDB has an extra sorting step that probably maybe possibly does this.