diff --git a/src/Ryujinx.Graphics.Shader/Translation/Translator.cs b/src/Ryujinx.Graphics.Shader/Translation/Translator.cs index 2a1110632..897e54199 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -2,6 +2,7 @@ using Ryujinx.Graphics.Shader.Decoders; using Ryujinx.Graphics.Shader.IntermediateRepresentation; using System; using System.Linq; +using System.Numerics; using static Ryujinx.Graphics.Shader.IntermediateRepresentation.OperandHelper; namespace Ryujinx.Graphics.Shader.Translation @@ -259,12 +260,15 @@ namespace Ryujinx.Graphics.Shader.Translation context.Store(StorageKind.Output, IoVariable.Position, null, Const(c), ConstF(c == 3 ? 1f : 0f)); } - if (context.Program.ClipDistancesWritten != 0) + int clipDistancesWrittenMap = context.Program.ClipDistancesWritten; + + while (clipDistancesWrittenMap != 0) { - for (int i = 0; i < 8; i++) - { - context.Store(StorageKind.Output, IoVariable.ClipDistance, null, Const(i), ConstF(0f)); - } + int index = BitOperations.TrailingZeroCount(clipDistancesWrittenMap); + + context.Store(StorageKind.Output, IoVariable.ClipDistance, null, Const(index), ConstF(0f)); + + clipDistancesWrittenMap &= ~(1 << index); } }