From b56d0da86d3a8ea58850989a472e0008ee53763c Mon Sep 17 00:00:00 2001 From: ParantezTech <12572227+par274@users.noreply.github.com> Date: Mon, 5 Oct 2026 18:38:07 +0300 Subject: [PATCH] [ShaderCompiler] Reserve a clip plane for position exports --- .../Gen5SpirvTranslator.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/SharpEmu.ShaderCompiler.Vulkan/Gen5SpirvTranslator.cs b/src/SharpEmu.ShaderCompiler.Vulkan/Gen5SpirvTranslator.cs index d0e5737..0499223 100644 --- a/src/SharpEmu.ShaderCompiler.Vulkan/Gen5SpirvTranslator.cs +++ b/src/SharpEmu.ShaderCompiler.Vulkan/Gen5SpirvTranslator.cs @@ -185,6 +185,7 @@ public static partial class Gen5SpirvTranslator private uint _layerOutput; private uint _viewportIndexOutput; private uint _clipDistanceCount; + private uint _invalidPositionClipDistance = uint.MaxValue; private uint _cullDistanceCount; private uint _vertexIndexInput; private uint _instanceIndexInput; @@ -6696,6 +6697,14 @@ public static partial class Gen5SpirvTranslator } } + if (_request.SupportsClipDistance && clipCount + cullCount < 8 && + _request.Program.Instructions.Any(static instruction => + instruction.Control is Gen5ExportControl { Target: 12, EnableMask: not 0 })) + { + // Use a separate plane so auxiliary position exports keep their own distances. + _invalidPositionClipDistance = clipCount++; + } + if (needPointSize) { _pointSizeOutput = DeclareBuiltInOutput(