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);
This commit is contained in:
Jake Turner
2025-04-07 18:07:13 +01:00
parent f0936cdf1b
commit 42a1ace8d2
3 changed files with 30 additions and 0 deletions
@@ -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);
@@ -4181,6 +4181,23 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
}
break;
}
case DXOp::WaveActiveBit:
{
// WaveActiveBit(value, i8 waveBitOp)
WaveBitOpCode waveBitOpCode;
if(getival<WaveBitOpCode>(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)
@@ -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();
}