diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp index f97691245..0b43aef24 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp @@ -1233,14 +1233,7 @@ Program::Program(const byte *bytes, size_t length) if(op.ops.empty()) { - for(size_t i = 0; i < m_Types.size(); i++) - { - if(m_Types[i].isVoid()) - { - inst.type = &m_Types[i]; - break; - } - } + inst.type = GetVoidType(); RDCASSERT(inst.type); } @@ -1441,6 +1434,26 @@ const Metadata *Program::GetFunctionMetadata(const Function &f, uint64_t v) return idx < m_Metadata.size() ? &m_Metadata[idx] : &f.metadata[idx - m_Metadata.size()]; } +const DXIL::Type *Program::GetVoidType() +{ + if(m_VoidType) + return m_VoidType; + + for(size_t i = 0; i < m_Types.size(); i++) + { + if(m_Types[i].isVoid()) + { + m_VoidType = &m_Types[i]; + break; + } + } + + if(!m_VoidType) + RDCERR("Couldn't find void type"); + + return m_VoidType; +} + Metadata::~Metadata() { SAFE_DELETE(dwarf); diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 1825a89de..115ec36f6 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -395,6 +395,7 @@ private: const Type *GetSymbolType(const Function &f, Symbol s); const Value *GetFunctionValue(const Function &f, uint64_t v); const Metadata *GetFunctionMetadata(const Function &f, uint64_t v); + const Type *GetVoidType(); DXBC::ShaderType m_Type; uint32_t m_Major, m_Minor; @@ -407,6 +408,7 @@ private: rdcarray m_Kinds; rdcarray m_Types; + const Type *m_VoidType = NULL; rdcarray m_AttributeGroups; rdcarray m_Attributes;