diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index f3e66750a..9a944ea31 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -23,10 +23,14 @@ ******************************************************************************/ #include "common/formatting.h" +#include "core/settings.h" #include "maths/half_convert.h" #include "spirv_op_helpers.h" #include "spirv_reflect.h" +RDOC_CONFIG(bool, Vulkan_Debug_ShowDebugValues, false, + "Show DebugValue instructions in shader disassembly."); + struct StructuredCFG { enum @@ -1574,6 +1578,23 @@ rdcstr Reflector::Disassemble(const rdcstr &entryPoint, ret += ToStr(rdcspv::SourceLanguage(lang)); ret += ")"; } + else if(dbg.inst == ShaderDbg::Value && Vulkan_Debug_ShowDebugValues()) + { + OpShaderDbg localVar(GetID(dbg.arg(0))); + ret += indent; + ret += "// DebugValue("; + ret += idName(dbg.arg(1)); + ret += " = "; + ret += idName(localVar.arg(0)); + ret += " "; + ret += idName(localVar.arg(2)); + ret += ":"; + ret += idName(localVar.arg(3)); + + if(dbg.params.size() > 3) + ret += " (subset)"; + ret += ")"; + } else { continue; diff --git a/renderdoc/driver/shaders/spirv/spirv_processor.cpp b/renderdoc/driver/shaders/spirv/spirv_processor.cpp index fa37d6868..203c26ec4 100644 --- a/renderdoc/driver/shaders/spirv/spirv_processor.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_processor.cpp @@ -960,6 +960,16 @@ Iter Processor::GetID(Id id) return Iter(); } +ConstIter Processor::GetID(Id id) const +{ + size_t offs = idOffsets[id]; + + if(offs) + return ConstIter(m_SPIRV, offs); + + return ConstIter(); +} + ShaderVariable Processor::MakeNULL(const DataType &type, uint64_t value) { ShaderVariable v("", 0, 0, 0, 0); diff --git a/renderdoc/driver/shaders/spirv/spirv_processor.h b/renderdoc/driver/shaders/spirv/spirv_processor.h index fd9f56dd3..66f494d25 100644 --- a/renderdoc/driver/shaders/spirv/spirv_processor.h +++ b/renderdoc/driver/shaders/spirv/spirv_processor.h @@ -539,6 +539,7 @@ protected: virtual void PostParse(); Iter GetID(Id id); + ConstIter GetID(Id id) const; ShaderVariable MakeNULL(const DataType &type, uint64_t value);