From 886d7f6eda533237645e33cc6f826f6f9bb82ed2 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Wed, 29 May 2024 07:00:36 +0100 Subject: [PATCH] RD DXIL Disassembly simplify the getelementr ptr demangle code Similar to DXBC::BasicDemangle() which can't be used because the pointer string is an escaped string --- .../driver/shaders/dxil/dxil_disassemble.cpp | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 82e4f60b2..7698ae931 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -4080,32 +4080,15 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) // arg[0] : ptr rdcstr ptrStr = ArgToString(inst.args[0], false); - // Try to de-mangle the pointer name - // @"\01?shared_pos@@3PAY0BC@$$CAMA.1dim" -> shared_pos - // Take the string between first alphabetical character and last - // alphanumeric character or "_" - start = 0; - int strEnd = (int)ptrStr.size(); - while(start < strEnd) + // Simple demangle take string between first "?" and next "@" + int nameStart = ptrStr.indexOf('?'); + if(nameStart > 0) { - if(isalpha(ptrStr[start])) - break; - ++start; + nameStart++; + int nameEnd = ptrStr.indexOf('@', nameStart); + if(nameEnd > nameStart) + ptrStr = ptrStr.substr(nameStart, nameEnd - nameStart); } - if(start < strEnd) - { - end = start + 1; - while(end < strEnd) - { - char c = ptrStr[end]; - if(!isalnum(c) && c != '_') - break; - ++end; - } - } - if(end > start) - ptrStr = ptrStr.substr(start, end - start); - lineStr += ptrStr; // arg[1] : index 0 bool first = true;