From 3fd6b55f04df0a5751985be1440809bc591e02d1 Mon Sep 17 00:00:00 2001 From: gdkchan 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 17703cd12..b31bf723b 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 74c6a653b..b250d3de3 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)