From 4bd778fae573a2cc62527ffadff0b06ad3b3e542 Mon Sep 17 00:00:00 2001 From: ParantezTech <12572227+par274@users.noreply.github.com> Date: Tue, 6 Oct 2026 15:45:54 +0300 Subject: [PATCH] [ShaderCompiler] Treat V_CMPX as an EXEC write in every encoding --- .../Ir/Gen5ExecFullAnalysis.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/SharpEmu.ShaderCompiler/Ir/Gen5ExecFullAnalysis.cs b/src/SharpEmu.ShaderCompiler/Ir/Gen5ExecFullAnalysis.cs index 4328d1b..c37863e 100644 --- a/src/SharpEmu.ShaderCompiler/Ir/Gen5ExecFullAnalysis.cs +++ b/src/SharpEmu.ShaderCompiler/Ir/Gen5ExecFullAnalysis.cs @@ -158,12 +158,14 @@ public static class Gen5ExecFullAnalysis written |= Bit(sdst) | Bit(sdst + 1); } - if (opcode.StartsWith("VCmp", StringComparison.Ordinal) && scalarDestination is null) + if (opcode.StartsWith("VCmpx", StringComparison.Ordinal)) { - // VOPC compares write VCC, V_CMPX writes EXEC. - written |= opcode.StartsWith("VCmpx", StringComparison.Ordinal) - ? Bit(ExecLow) | Bit(ExecHigh) - : Bit(106) | Bit(107); + written |= Bit(ExecLow) | Bit(ExecHigh); + } + else if (opcode.StartsWith("VCmp", StringComparison.Ordinal) && scalarDestination is null) + { + // VOPC compares write VCC. + written |= Bit(106) | Bit(107); } if (opcode.StartsWith('V') && opcode.Contains("Co", StringComparison.Ordinal) && scalarDestination is null)