From cd84b7b6c0360283d8c5ad81a0b090a488b85086 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 12 Nov 2024 15:55:34 +0000 Subject: [PATCH] DXIL Disassembly support for Barrier --- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 12 ++++++++++++ renderdoc/driver/shaders/dxil/dxil_disassemble.cpp | 14 ++++++++++++++ renderdoc/driver/shaders/dxil/dxil_stringise.cpp | 14 ++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index 62dbbf4e0..abc67ca00 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -613,6 +613,17 @@ enum class AtomicBinOpCode : uint32_t Invalid // Must be last. }; +enum class BarrierMode : uint32_t +{ + Invalid = 0, + SyncThreadGroup = 0x00000001, + UAVFenceGlobal = 0x00000002, + UAVFenceThreadGroup = 0x00000004, + TGSMFence = 0x00000008, +}; + +BITMASK_OPERATORS(BarrierMode); + inline Operation DecodeBinOp(const Type *type, uint64_t opcode) { bool isFloatOp = (type->scalarType == Type::Float); @@ -1751,3 +1762,4 @@ DECLARE_STRINGISE_TYPE(DXIL::Type::ScalarKind); DECLARE_STRINGISE_TYPE(DXIL::LLVMDbgOp); DECLARE_STRINGISE_TYPE(DXIL::DIBase::Type); DECLARE_STRINGISE_TYPE(DXIL::ValueKind); +DECLARE_STRINGISE_TYPE(DXIL::BarrierMode); diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 214d07245..deeeb618c 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -4052,6 +4052,20 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) lineStr += ")"; break; } + case DXOp::Barrier: + { + // Barrier(barrierMode) + BarrierMode barrierMode; + if(getival(inst.args[1], barrierMode)) + { + lineStr += "Barrier(" + ToStr(barrierMode) + ")"; + } + else + { + showDxFuncName = true; + } + break; + } case DXOp::NumOpCodes: showDxFuncName = false; break; default: showDxFuncName = true; break; } diff --git a/renderdoc/driver/shaders/dxil/dxil_stringise.cpp b/renderdoc/driver/shaders/dxil/dxil_stringise.cpp index c40e81a41..6e6012d83 100644 --- a/renderdoc/driver/shaders/dxil/dxil_stringise.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_stringise.cpp @@ -745,3 +745,17 @@ rdcstr DoStringise(const DXIL::ValueKind &el) } END_ENUM_STRINGISE(); }; + +template <> +rdcstr DoStringise(const DXIL::BarrierMode &el) +{ + BEGIN_BITFIELD_STRINGISE(DXIL::BarrierMode); + { + STRINGISE_BITFIELD_CLASS_BIT(Invalid); + STRINGISE_BITFIELD_CLASS_BIT(SyncThreadGroup); + STRINGISE_BITFIELD_CLASS_BIT(UAVFenceGlobal); + STRINGISE_BITFIELD_CLASS_BIT(UAVFenceThreadGroup); + STRINGISE_BITFIELD_CLASS_BIT(TGSMFence); + } + END_BITFIELD_STRINGISE(); +};