aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2024-02-22 17:43:19 +0000
committerGitHub <noreply@github.com>2024-02-22 18:43:19 +0100
commit57d8afd0c99bb43d1ba1e3cc630d257c5da92741 (patch)
tree7b6e3a27c2aa2272eadbeeaefb66711b323cae7e /src
parentc43fb92bbf92dbeedd6b0e6299457e6136919f84 (diff)
OpenGL: Mask out all color outputs with no fragment shader (#6341)1.1.1210
* OpenGL: Mask out all color outputs with no fragment shader This appears to match Vulkan's behaviour, which is needed for stencil shadows in Penny's Big Breakaway. It's far from the only issue, you can try the Full Bindless PR if you want to see it in a more intact state. * Remove unused member
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Graphics.OpenGL/Pipeline.cs2
-rw-r--r--src/Ryujinx.Graphics.OpenGL/Program.cs9
2 files changed, 5 insertions, 6 deletions
diff --git a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs
index e863c696..0757fcd9 100644
--- a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs
+++ b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs
@@ -1117,7 +1117,7 @@ namespace Ryujinx.Graphics.OpenGL
prg.Bind();
}
- if (prg.HasFragmentShader && _fragmentOutputMap != (uint)prg.FragmentOutputMap)
+ if (_fragmentOutputMap != (uint)prg.FragmentOutputMap)
{
_fragmentOutputMap = (uint)prg.FragmentOutputMap;
diff --git a/src/Ryujinx.Graphics.OpenGL/Program.cs b/src/Ryujinx.Graphics.OpenGL/Program.cs
index cc9120c7..19de06f8 100644
--- a/src/Ryujinx.Graphics.OpenGL/Program.cs
+++ b/src/Ryujinx.Graphics.OpenGL/Program.cs
@@ -30,7 +30,6 @@ namespace Ryujinx.Graphics.OpenGL
private ProgramLinkStatus _status = ProgramLinkStatus.Incomplete;
private int[] _shaderHandles;
- public bool HasFragmentShader;
public int FragmentOutputMap { get; }
public Program(ShaderSource[] shaders, int fragmentOutputMap)
@@ -40,6 +39,7 @@ namespace Ryujinx.Graphics.OpenGL
GL.ProgramParameter(Handle, ProgramParameterName.ProgramBinaryRetrievableHint, 1);
_shaderHandles = new int[shaders.Length];
+ bool hasFragmentShader = false;
for (int index = 0; index < shaders.Length; index++)
{
@@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.OpenGL
if (shader.Stage == ShaderStage.Fragment)
{
- HasFragmentShader = true;
+ hasFragmentShader = true;
}
int shaderHandle = GL.CreateShader(shader.Stage.Convert());
@@ -71,7 +71,7 @@ namespace Ryujinx.Graphics.OpenGL
GL.LinkProgram(Handle);
- FragmentOutputMap = fragmentOutputMap;
+ FragmentOutputMap = hasFragmentShader ? fragmentOutputMap : 0;
}
public Program(ReadOnlySpan<byte> code, bool hasFragmentShader, int fragmentOutputMap)
@@ -91,8 +91,7 @@ namespace Ryujinx.Graphics.OpenGL
}
}
- HasFragmentShader = hasFragmentShader;
- FragmentOutputMap = fragmentOutputMap;
+ FragmentOutputMap = hasFragmentShader ? fragmentOutputMap : 0;
}
public void Bind()