diff --git a/Ryujinx.Graphics.OpenGL/VertexArray.cs b/Ryujinx.Graphics.OpenGL/VertexArray.cs index 17703cd1..b31bf723 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 74c6a653..b250d3de 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)