From 80205a887cd54119701cb9f6940d71e84e423939 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 8 Jun 2020 11:46:29 +0100 Subject: [PATCH] Add special zeroinitializer disassembly --- renderdoc/driver/shaders/dxil/dxil_bytecode.cpp | 1 + renderdoc/driver/shaders/dxil/dxil_bytecode.h | 2 +- renderdoc/driver/shaders/dxil/dxil_disassemble.cpp | 10 +++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp index 319e10e9d..97611b500 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp @@ -243,6 +243,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType, { Value v; v.type = curType; + v.nullconst = IS_KNOWN(constant.id, ConstantsRecord::CONST_NULL); v.undef = IS_KNOWN(constant.id, ConstantsRecord::UNDEF); addValue(v); } diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 11e2baa97..965e2482c 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -183,7 +183,7 @@ struct Value ShaderValue val = {}; rdcarray members; rdcstr str; - bool undef = false, symbol = false; + bool undef = false, nullconst = true, symbol = false; rdcstr toString() const; }; diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 6a77d6392..fe5d14225 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -387,9 +387,17 @@ void Program::MakeDisassemblyString() case SymbolType::Literal: ret = "???"; break; case SymbolType::Metadata: if(s.idx < m_Metadata.size()) - ret += StringFormat::Fmt("metadata !%u", GetOrAssignMetaID(&m_Metadata[s.idx])); + { + Metadata &m = m_Metadata[s.idx]; + if(m.value && m.val && m.val->nullconst) + ret += StringFormat::Fmt("metadata %s zeroinitializer", m.val->type->toString()); + else + ret += StringFormat::Fmt("metadata !%u", GetOrAssignMetaID(&m)); + } else + { ret = "metadata " + GetFunctionMetadata(func, s.idx)->refString(); + } break; case SymbolType::Function: ret = "@" + escapeStringIfNeeded(m_Functions[s.idx].name); break; case SymbolType::GlobalVar: