From 8a725233d6bf3b796af8c5a371debbb57071c4af Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Sat, 25 Oct 2025 09:42:52 +0100 Subject: [PATCH] DXIL debugger handle all float types for DXOp::Saturate --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 22 ++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index e37c59c13..4a06a07b3 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -3125,16 +3125,30 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, { ShaderVariable arg; RDCASSERT(GetShaderVariable(inst.args[1], opCode, dxOpCode, arg)); - RDCASSERTEQUAL(arg.type, VarType::Float); - RDCASSERTEQUAL(result.type, VarType::Float); - result.value.f32v[0] = dxbc_min(1.0f, dxbc_max(0.0f, arg.value.f32v[0])); + RDCASSERT(IsFloatingPointType(arg.type)); + RDCASSERTEQUAL(result.type, arg.type); + if(result.type == VarType::Double) + { + result.value.f64v[0] = dxbc_min(1.0, dxbc_max(0.0, arg.value.f64v[0])); + break; + } + else if(result.type == VarType::Float) + { + result.value.f32v[0] = dxbc_min(1.0f, dxbc_max(0.0f, arg.value.f32v[0])); + break; + } + else if(result.type == VarType::Half) + { + result.value.u16v[0] = + ConvertToHalf(dxbc_min(1.0f, dxbc_max(0.0f, ConvertFromHalf(arg.value.u16v[0])))); + break; + } break; } case DXOp::Dot2: case DXOp::Dot3: case DXOp::Dot4: { - // Float or Int // 2/3/4 Vector // Result type must match input types uint32_t numComps = 4;