From 42a1ace8d2f7603aec6e74d9568420628718008b Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Mon, 7 Apr 2025 18:05:34 +0100 Subject: [PATCH] Specific DXIL disassembly handling for WaveActiveBit After int _WaveActiveBit14 = WaveActiveBitAnd(_WaveGetLaneIndex); int _WaveActiveBit13 = WaveActiveBitOr(_WaveGetLaneIndex); int _WaveActiveBit = WaveActiveBitXor(_WaveGetLaneIndex); Before int _WaveActiveBit14 = WaveActiveBit(/*value*/ _WaveGetLaneIndex, /*op*/ 0); int _WaveActiveBit13 = WaveActiveBit(/*value*/ _WaveGetLaneIndex, /*op*/ 1); int _WaveActiveBit = WaveActiveBit(/*value*/ _WaveGetLaneIndex, /*op*/ 2); --- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 1 + .../driver/shaders/dxil/dxil_disassemble.cpp | 17 +++++++++++++++++ .../driver/shaders/dxil/dxil_stringise.cpp | 12 ++++++++++++ 3 files changed, 30 insertions(+) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index b8e40e42e..981b75885 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -1851,6 +1851,7 @@ DECLARE_REFLECTION_ENUM(DXIL::Attribute); DECLARE_STRINGISE_TYPE(DXIL::InstructionFlags); DECLARE_STRINGISE_TYPE(DXIL::AtomicBinOpCode); DECLARE_STRINGISE_TYPE(DXIL::WaveOpCode); +DECLARE_STRINGISE_TYPE(DXIL::WaveBitOpCode); DECLARE_STRINGISE_TYPE(DXIL::SignedOpKind); DECLARE_STRINGISE_TYPE(DXIL::QuadOpKind); DECLARE_STRINGISE_TYPE(DXIL::PackMode); diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 2d6f7e235..2f24eb323 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -4181,6 +4181,23 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) } break; } + case DXOp::WaveActiveBit: + { + // WaveActiveBit(value, i8 waveBitOp) + WaveBitOpCode waveBitOpCode; + if(getival(inst.args[2], waveBitOpCode)) + { + lineStr += "WaveActiveBit" + ToStr(waveBitOpCode); + lineStr += "("; + lineStr += GetArgId(inst, 1); + lineStr += ")"; + } + else + { + showDxFuncName = true; + } + break; + } case DXOp::Pack4x8: { // Pack4x8(packMode,x,y,z,w) diff --git a/renderdoc/driver/shaders/dxil/dxil_stringise.cpp b/renderdoc/driver/shaders/dxil/dxil_stringise.cpp index b47f04d09..7d4f0953f 100644 --- a/renderdoc/driver/shaders/dxil/dxil_stringise.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_stringise.cpp @@ -852,3 +852,15 @@ rdcstr DoStringise(const DXIL::SignedOpKind &el) } END_ENUM_STRINGISE(); } + +template <> +rdcstr DoStringise(const DXIL::WaveBitOpCode &el) +{ + BEGIN_ENUM_STRINGISE(DXIL::WaveBitOpCode) + { + STRINGISE_ENUM_CLASS(And) + STRINGISE_ENUM_CLASS(Or) + STRINGISE_ENUM_CLASS(Xor) + } + END_ENUM_STRINGISE(); +}