From ae7159fc6390bce096dff50e89d15609db7c8caa Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 10 Dec 2024 17:29:02 +0000 Subject: [PATCH] DXIL Debugger support for DXOp::IMad, DXOp::UMad --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 36 +++++++++++++++++-- .../driver/shaders/dxil/dxil_reflect.cpp | 2 -- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index 30306d04a..8750e764a 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -2794,6 +2794,40 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, } break; } + case DXOp::IMad: + case DXOp::UMad: + { + RDCASSERTEQUAL(inst.args[1]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[1]->type->scalarType, Type::Int); + RDCASSERTEQUAL(inst.args[2]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[2]->type->scalarType, Type::Int); + RDCASSERTEQUAL(inst.args[3]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[3]->type->scalarType, Type::Int); + ShaderVariable a; + ShaderVariable b; + ShaderVariable c; + RDCASSERT(GetShaderVariable(inst.args[1], opCode, dxOpCode, a)); + RDCASSERT(GetShaderVariable(inst.args[2], opCode, dxOpCode, b)); + RDCASSERT(GetShaderVariable(inst.args[3], opCode, dxOpCode, c)); + RDCASSERTEQUAL(a.type, b.type); + RDCASSERTEQUAL(a.type, c.type); + const uint32_t col = 0; + if(dxOpCode == DXOp::IMad) + { +#undef _IMPL +#define _IMPL(I, S, U) comp(result, col) = comp(a, col) * comp(b, col) + comp(c, col) + + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, a.type); + } + else if(dxOpCode == DXOp::UMad) + { +#undef _IMPL +#define _IMPL(I, S, U) comp(result, col) = comp(a, col) * comp(b, col) + comp(c, col) + + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, a.type); + } + break; + } case DXOp::Barrier: { ShaderVariable arg; @@ -3117,8 +3151,6 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, case DXOp::UAddc: case DXOp::USubb: case DXOp::Fma: - case DXOp::IMad: - case DXOp::UMad: case DXOp::Msad: case DXOp::Ibfe: case DXOp::Ubfe: diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index a221692d6..60f8850fc 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -1816,8 +1816,6 @@ rdcstr Program::GetDebugStatus() case DXOp::UAddc: case DXOp::USubb: case DXOp::Fma: - case DXOp::IMad: - case DXOp::UMad: case DXOp::Msad: case DXOp::Ibfe: case DXOp::Ubfe: