From 3fd6b55f04df0a5751985be1440809bc591e02d1 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Mon, 24 May 2021 04:38:38 -0300
Subject: [PATCH] Fix value of constant vertex attributes (#2307)

---
 Ryujinx.Graphics.OpenGL/VertexArray.cs        |  3 ++-
 .../Translation/Translator.cs                 | 19 ++++++++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/Ryujinx.Graphics.OpenGL/VertexArray.cs b/Ryujinx.Graphics.OpenGL/VertexArray.cs
index 17703cd129..b31bf723b5 100644
--- a/Ryujinx.Graphics.OpenGL/VertexArray.cs
+++ b/Ryujinx.Graphics.OpenGL/VertexArray.cs
@@ -80,7 +80,7 @@ namespace Ryujinx.Graphics.OpenGL
                 if (attrib.IsZero)
                 {
                     // Disabling the attribute causes the shader to read a constant value.
-                    // The value is configurable, but by default is a vector of (0, 0, 0, 1).
+                    // We currently set the constant to (0, 0, 0, 0).
                     DisableVertexAttrib(index);
                 }
                 else
@@ -176,6 +176,7 @@ namespace Ryujinx.Graphics.OpenGL
             {
                 _vertexAttribsInUse &= ~mask;
                 GL.DisableVertexAttribArray(index);
+                GL.VertexAttrib4(index, 0f, 0f, 0f, 0f);
             }
         }
 
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs
index 74c6a653b3..b250d3de3e 100644
--- a/Ryujinx.Graphics.Shader/Translation/Translator.cs
+++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs
@@ -129,19 +129,20 @@ namespace Ryujinx.Graphics.Shader.Translation
             {
                 config.SetUsedFeature(FeatureFlags.Bindless);
             }
-            else // Not bindless, fill up texture handles
+
+            for (int funcIndex = 0; funcIndex < cfg.Length; funcIndex++)
             {
-                for (int funcIndex = 0; funcIndex < cfg.Length; funcIndex++)
+                for (int blkIndex = 0; blkIndex < cfg[funcIndex].Length; blkIndex++)
                 {
-                    for (int blkIndex = 0; blkIndex < cfg[funcIndex].Length; blkIndex++)
+                    Block block = cfg[funcIndex][blkIndex];
+
+                    if (maxEndAddress < block.EndAddress)
                     {
-                        Block block = cfg[funcIndex][blkIndex];
-
-                        if (maxEndAddress < block.EndAddress)
-                        {
-                            maxEndAddress = block.EndAddress;
-                        }
+                        maxEndAddress = block.EndAddress;
+                    }
 
+                    if (!hasBindless)
+                    {
                         for (int index = 0; index < block.OpCodes.Count; index++)
                         {
                             if (block.OpCodes[index] is OpCodeTextureBase texture)