Skip to content

Commit

Permalink
Enable DXIL Debugging by updating DXIL GetDebugStatus()
Browse files Browse the repository at this point in the history
Only support "dx.op.*" and "llvm.dbg.*" external functions
  • Loading branch information
Zorro666 committed May 14, 2024
1 parent 9238d2c commit 4be5b02
Showing 1 changed file with 110 additions and 1 deletion.
111 changes: 110 additions & 1 deletion renderdoc/driver/shaders/dxil/dxil_reflect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1688,7 +1688,116 @@ DXBC::Reflection *Program::GetReflection()

rdcstr Program::GetDebugStatus()
{
return "Debugging DXIL is not supported";
for(size_t i = 0; i < m_Functions.size(); i++)
{
const Function &f = *m_Functions[i];
// Only support "dx.op" external functions
if(f.external)
{
if(!f.name.beginsWith("dx.op.") && !f.name.beginsWith("llvm.dbg."))
return StringFormat::Fmt("Unsupported external function '%s'", f.name.c_str());
}

for(const Instruction *inst : f.instructions)
{
switch(inst->op)
{
case Operation::NoOp: break;
case Operation::Call: break;
case Operation::Trunc: break;
case Operation::ZExt: break;
case Operation::SExt: break;
case Operation::FToU: break;
case Operation::FToS: break;
case Operation::UToF: break;
case Operation::SToF: break;
case Operation::FPTrunc: break;
case Operation::FPExt: break;
case Operation::PtrToI: break;
case Operation::IToPtr: break;
case Operation::Bitcast: break;
case Operation::AddrSpaceCast: break;
case Operation::ExtractVal: break;
case Operation::Ret: break;
case Operation::FAdd: break;
case Operation::FSub: break;
case Operation::FMul: break;
case Operation::FDiv: break;
case Operation::FRem: break;
case Operation::Add: break;
case Operation::Sub: break;
case Operation::Mul: break;
case Operation::UDiv: break;
case Operation::SDiv: break;
case Operation::URem: break;
case Operation::SRem: break;
case Operation::ShiftLeft: break;
case Operation::LogicalShiftRight: break;
case Operation::ArithShiftRight: break;
case Operation::And: break;
case Operation::Or: break;
case Operation::Xor: break;
case Operation::Unreachable: break;
case Operation::Alloca: break;
case Operation::GetElementPtr: break;
case Operation::Load: break;
case Operation::Store: break;
case Operation::FOrdFalse: break;
case Operation::FOrdEqual: break;
case Operation::FOrdGreater: break;
case Operation::FOrdGreaterEqual: break;
case Operation::FOrdLess: break;
case Operation::FOrdLessEqual: break;
case Operation::FOrdNotEqual: break;
case Operation::FOrd: break;
case Operation::FUnord: break;
case Operation::FUnordEqual: break;
case Operation::FUnordGreater: break;
case Operation::FUnordGreaterEqual: break;
case Operation::FUnordLess: break;
case Operation::FUnordLessEqual: break;
case Operation::FUnordNotEqual: break;
case Operation::FOrdTrue: break;
case Operation::IEqual: break;
case Operation::INotEqual: break;
case Operation::UGreater: break;
case Operation::UGreaterEqual: break;
case Operation::ULess: break;
case Operation::ULessEqual: break;
case Operation::SGreater: break;
case Operation::SGreaterEqual: break;
case Operation::SLess: break;
case Operation::SLessEqual: break;
case Operation::Select: break;
case Operation::ExtractElement: break;
case Operation::InsertElement: break;
case Operation::ShuffleVector: break;
case Operation::InsertValue: break;
case Operation::Branch: break;
case Operation::Phi: break;
case Operation::Switch: break;
case Operation::Fence: break;
case Operation::CompareExchange: break;
case Operation::LoadAtomic: break;
case Operation::StoreAtomic: break;
case Operation::AtomicExchange: break;
case Operation::AtomicAdd: break;
case Operation::AtomicSub: break;
case Operation::AtomicAnd: break;
case Operation::AtomicNand: break;
case Operation::AtomicOr: break;
case Operation::AtomicXor: break;
case Operation::AtomicMax: break;
case Operation::AtomicMin: break;
case Operation::AtomicUMax: break;
case Operation::AtomicUMin: break;
default: return StringFormat::Fmt("Unsupported instruction '%s'", ToStr(inst->op).c_str());
}
}
}

// no unsupported instructions used
return rdcstr();
}

void Program::GetLineInfo(size_t instruction, uintptr_t offset, LineColumnInfo &lineInfo) const
Expand Down

0 comments on commit 4be5b02

Please sign in to comment.