DXIL Disassembly support for Barrier

This commit is contained in:
Jake Turner
2024-11-12 16:18:47 +00:00
parent 3877803a16
commit cd84b7b6c0
3 changed files with 40 additions and 0 deletions
@@ -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);
@@ -4052,6 +4052,20 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection)
lineStr += ")";
break;
}
case DXOp::Barrier:
{
// Barrier(barrierMode)
BarrierMode barrierMode;
if(getival<BarrierMode>(inst.args[1], barrierMode))
{
lineStr += "Barrier(" + ToStr(barrierMode) + ")";
}
else
{
showDxFuncName = true;
}
break;
}
case DXOp::NumOpCodes: showDxFuncName = false; break;
default: showDxFuncName = true; break;
}
@@ -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();
};