From 60e53a39cc1e9084e22c28bfd4ab4584ad25233f Mon Sep 17 00:00:00 2001 From: NeySlim <4509984+NeySlim@users.noreply.github.com> Date: Tue, 6 Oct 2026 23:24:18 +0200 Subject: [PATCH] decoder: accept clamp on V_MIN3/MAX3/MED3_F16 (#1116) fix(decoder): accept clamp on V_MIN3/MAX3/MED3_F16 --- .../shader/recompiler/frontend/decode/VectorAluOps.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/graphics/shader/recompiler/frontend/decode/VectorAluOps.cpp b/src/graphics/shader/recompiler/frontend/decode/VectorAluOps.cpp index 39bb7baf9..13b1222e2 100644 --- a/src/graphics/shader/recompiler/frontend/decode/VectorAluOps.cpp +++ b/src/graphics/shader/recompiler/frontend/decode/VectorAluOps.cpp @@ -1450,6 +1450,9 @@ bool SupportsNativeVop3ResultModifiers(Opcode opcode) { case Opcode::V_MAD_F32: case Opcode::V_FMA_F32: case Opcode::V_FMA_F16: + case Opcode::V_MIN3_F16: + case Opcode::V_MAX3_F16: + case Opcode::V_MED3_F16: case Opcode::V_CUBEID_F32: case Opcode::V_CVT_PKRTZ_F16_F32: case Opcode::V_LDEXP_F32: @@ -1480,7 +1483,8 @@ bool HasUnsupportedNativeVop3Modifiers(Opcode opcode, bool permlane, bool mad_mi return clamp != 0u || omod != 0u; } if (IsNativeVop3F16TernaryOpcode(opcode)) { - return opcode != Opcode::V_FMA_F16 && (clamp != 0u || omod != 0u); + // Clamp is applied by WriteF16 for every f16 ternary; omod only for V_FMA_F16. + return opcode != Opcode::V_FMA_F16 && omod != 0u; } if (IsNativeVop3I16TernaryOpcode(opcode)) { return abs != 0u || (clamp != 0u && !clamp_modifier) || omod != 0u || neg != 0u;