diff options
author | gdkchan <gab.dark.100@gmail.com> | 2023-08-07 12:20:37 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-07 12:20:37 -0300 |
commit | 42750a74f82ee69cabfaf3c5497af6a8ebc13eca (patch) | |
tree | 5d42a8945c0e692a0a96752752aac00666fe2c43 /src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs | |
parent | 3ab0a71c7bfb60b20008894db3fb6534436753e6 (diff) |
Do not add more code after alpha test discard on fragment shader (#5529)1.1.976
* Do not add more code after alpha test discard on fragment shader
* Shader cache version bump
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs index 08d4b915..614b275b 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs @@ -304,11 +304,11 @@ namespace Ryujinx.Graphics.Shader.Translation PrepareForVertexReturn(); } - public void PrepareForReturn() + public bool PrepareForReturn() { if (IsNonMain) { - return; + return true; } if (Config.LastInVertexPipeline && @@ -383,13 +383,13 @@ namespace Ryujinx.Graphics.Shader.Translation AlphaTestOp alphaTestOp = Config.GpuAccessor.QueryAlphaTestCompare(); - if (alphaTestOp != AlphaTestOp.Always && (Config.OmapTargets & 8) != 0) + if (alphaTestOp != AlphaTestOp.Always) { if (alphaTestOp == AlphaTestOp.Never) { this.Discard(); } - else + else if ((Config.OmapTargets & 8) != 0) { Instruction comparator = alphaTestOp switch { @@ -415,6 +415,12 @@ namespace Ryujinx.Graphics.Shader.Translation } } + // We don't need to output anything if alpha test always fails. + if (alphaTestOp == AlphaTestOp.Never) + { + return false; + } + int regIndexBase = 0; for (int rtIndex = 0; rtIndex < 8; rtIndex++) @@ -462,6 +468,8 @@ namespace Ryujinx.Graphics.Shader.Translation } } } + + return true; } private void GenerateAlphaToCoverageDitherDiscard() |