From bc403a291df3d62b0d0f49682b361fc303769b07 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Sat, 25 Oct 2025 09:43:24 +0100 Subject: [PATCH] DXIL debugger handle all int/float types for DXOp::Dot2/3/4 --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 37 +++++++++----------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index 4a06a07b3..19dfa25c9 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -3159,27 +3159,24 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, numComps = 3; uint32_t argBStart = argAStart + numComps; - result.value.f32v[0] = 0.0f; - bool isFloat = (result.type == VarType::Float); - if(isFloat || result.type == VarType::SInt) + result.value.s64v[0] = 0L; + for(uint32_t c = 0; c < numComps; ++c) { - for(uint32_t c = 0; c < numComps; ++c) - { - ShaderVariable a; - ShaderVariable b; - RDCASSERT(GetShaderVariable(inst.args[argAStart + c], opCode, dxOpCode, a)); - RDCASSERT(GetShaderVariable(inst.args[argBStart + c], opCode, dxOpCode, b)); - RDCASSERTEQUAL(result.type, a.type); - RDCASSERTEQUAL(result.type, b.type); - if(isFloat) - result.value.f32v[0] += a.value.f32v[0] * b.value.f32v[0]; - else - result.value.s32v[0] += a.value.s32v[0] * b.value.s32v[0]; - } - } - else - { - RDCERR("Unhandled result type %s", ToStr(result.type).c_str()); + ShaderVariable a; + ShaderVariable b; + RDCASSERT(GetShaderVariable(inst.args[argAStart + c], opCode, dxOpCode, a)); + RDCASSERT(GetShaderVariable(inst.args[argBStart + c], opCode, dxOpCode, b)); + RDCASSERTEQUAL(a.type, b.type); + RDCASSERTEQUAL(result.type, a.type); + +#undef _IMPL +#define _IMPL(I, S, U) comp(result, 0) += (comp(a, 0) * comp(b, 0)); + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, result.type); + +#undef _IMPL +#define _IMPL(T) comp(result, 0) += (comp(a, 0) * comp(b, 0)); + + IMPL_FOR_FLOAT_TYPES_FOR_TYPE(_IMPL, result.type); } break; }