diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs
index 4bab165da8..512ae94b4c 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs
@@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
         private const ushort FileFormatVersionMajor = 1;
         private const ushort FileFormatVersionMinor = 2;
         private const uint FileFormatVersionPacked = ((uint)FileFormatVersionMajor << 16) | FileFormatVersionMinor;
-        private const uint CodeGenVersion = 4675;
+        private const uint CodeGenVersion = 5529;
 
         private const string SharedTocFileName = "shared.toc";
         private const string SharedDataFileName = "shared.data";
diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs
index fc1a696fa6..7462fc5ad5 100644
--- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs
+++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs
@@ -162,8 +162,10 @@ namespace Ryujinx.Graphics.Shader.Instructions
 
             if (op.Ccc == Ccc.T)
             {
-                context.PrepareForReturn();
-                context.Return();
+                if (context.PrepareForReturn())
+                {
+                    context.Return();
+                }
             }
             else
             {
@@ -174,8 +176,12 @@ namespace Ryujinx.Graphics.Shader.Instructions
                 {
                     Operand lblSkip = Label();
                     context.BranchIfFalse(lblSkip, cond);
-                    context.PrepareForReturn();
-                    context.Return();
+
+                    if (context.PrepareForReturn())
+                    {
+                        context.Return();
+                    }
+
                     context.MarkLabel(lblSkip);
                 }
             }
diff --git a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs
index 08d4b9156d..614b275ba3 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()