From da979b23bc5aa81607dc32c9ba4b99280f1adb90 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 15 Feb 2022 15:13:36 +0000 Subject: [PATCH] Don't omit opaque types for real empty structs in DXIL editing --- renderdoc/driver/shaders/dxil/dxil_bytecode.cpp | 1 + renderdoc/driver/shaders/dxil/dxil_bytecode.h | 2 +- renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) 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); }