From 4c72fdfd8a65a6aceda5566414c2a76cce141da7 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Sat, 12 Apr 2025 11:23:48 +0100 Subject: [PATCH] Specific DXIL disassembly handling for QuadVote After bool _QuadVote2 = QuadAny(_32); bool _QuadVote = QuadAll(_37); Before bool _QuadVote2 = QuadVote(/*cond*/ _32, /*op*/ 0); bool _QuadVote = QuadVote(/*cond*/ _37, /*op*/ 1); --- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 7 +++++++ .../driver/shaders/dxil/dxil_disassemble.cpp | 17 +++++++++++++++++ .../driver/shaders/dxil/dxil_stringise.cpp | 11 +++++++++++ 3 files changed, 35 insertions(+) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index c85ab6ad2..3f7fac99e 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -663,6 +663,12 @@ enum class QuadOpKind : uint32_t // horizontal and vertical direction }; +enum class QuadVoteOpKind : uint32_t +{ + All = 1, // true if all conditions are true in this quad + Any = 0, // true if any condition is true in this quad +}; + // Packing/unpacking intrinsics enum class UnpackMode : uint32_t { @@ -1855,6 +1861,7 @@ DECLARE_STRINGISE_TYPE(DXIL::WaveBitOpCode); DECLARE_STRINGISE_TYPE(DXIL::WaveMultiPrefixOpCode); DECLARE_STRINGISE_TYPE(DXIL::SignedOpKind); DECLARE_STRINGISE_TYPE(DXIL::QuadOpKind); +DECLARE_STRINGISE_TYPE(DXIL::QuadVoteOpKind); DECLARE_STRINGISE_TYPE(DXIL::PackMode); DECLARE_STRINGISE_TYPE(DXIL::UnpackMode); DECLARE_STRINGISE_TYPE(DXIL::Operation); diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index 288d39ef9..e3c4369a3 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -4324,6 +4324,23 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) } break; } + case DXOp::QuadVote: + { + // SM6.7 QuadVote(cond,op) + QuadVoteOpKind quadVoteOpKind; + if(getival(inst.args[2], quadVoteOpKind)) + { + lineStr += "Quad" + ToStr(quadVoteOpKind); + lineStr += "("; + lineStr += GetArgId(inst, 1); + lineStr += ")"; + } + else + { + showDxFuncName = true; + } + break; + } case DXOp::Dot2: case DXOp::Dot3: case DXOp::Dot4: diff --git a/renderdoc/driver/shaders/dxil/dxil_stringise.cpp b/renderdoc/driver/shaders/dxil/dxil_stringise.cpp index 0968d68d9..570d34971 100644 --- a/renderdoc/driver/shaders/dxil/dxil_stringise.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_stringise.cpp @@ -139,6 +139,17 @@ rdcstr DoStringise(const DXIL::QuadOpKind &el) END_ENUM_STRINGISE(); }; +template <> +rdcstr DoStringise(const DXIL::QuadVoteOpKind &el) +{ + BEGIN_ENUM_STRINGISE(DXIL::QuadVoteOpKind) + { + STRINGISE_ENUM_CLASS(All) + STRINGISE_ENUM_CLASS(Any) + } + END_ENUM_STRINGISE(); +}; + template <> rdcstr DoStringise(const DXIL::PackMode &el) {