diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp index c3e7c629e..405ded94e 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp @@ -754,6 +754,7 @@ Program::Program(const byte *bytes, size_t length) { // pretend opaque types are empty structs m_Types[typeIndex].type = Type::Struct; + m_Types[typeIndex].opaque = true; typeIndex++; } diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 07bf2472a..f967bed74 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -103,7 +103,7 @@ struct Type const Type *inner = NULL; // struct or function - bool packedStruct = false, vararg = false; + bool packedStruct = false, vararg = false, opaque = false; uint16_t id = 0xFFFF; rdcstr name; rdcarray members; // the members for a struct, the parameters for functions diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp index 879a69dab..7612b25ae 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp @@ -1020,7 +1020,7 @@ bytebuf ProgramEditor::EncodeProgram() const } else if(m_Types[i].type == Type::Struct) { - if(m_Types[i].members.empty()) + if(m_Types[i].opaque) { writer.Record(LLVMBC::TypeRecord::OPAQUE); }