From 33e7c898222eee55fd8df80088708c8f8906bd14 Mon Sep 17 00:00:00 2001 From: Thomas Guillemard Date: Tue, 18 Dec 2018 01:32:12 +0100 Subject: [PATCH] Move MaxUboSize definition (#530) * Move MaxUboSize definition This fix a crash on Ryujinx.ShaderTools caused by the absence of an OpenGL context. * Use a constant for the value in ShaderTools * Address comments --- Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs | 2 +- Ryujinx.Graphics/Gal/Shader/GlslDecl.cs | 3 --- Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs | 8 ++++++-- Ryujinx.ShaderTools/Program.cs | 4 +++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs index b45a3a3a..10a9120d 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs @@ -53,7 +53,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL { GlslProgram Program; - GlslDecompiler Decompiler = new GlslDecompiler(); + GlslDecompiler Decompiler = new GlslDecompiler(OGLLimit.MaxUboSize); int ShaderDumpIndex = ShaderDumper.DumpIndex; diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs index f1b63a8d..b144cef3 100644 --- a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs +++ b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs @@ -1,4 +1,3 @@ -using Ryujinx.Graphics.Gal.OpenGL; using System; using System.Collections.Generic; @@ -50,8 +49,6 @@ namespace Ryujinx.Graphics.Gal.Shader public const string SsyStackName = "ssy_stack"; public const string SsyCursorName = "ssy_cursor"; - public static int MaxUboSize => OGLLimit.MaxUboSize / 16; - private string[] StagePrefixes = new string[] { "vp", "tcp", "tep", "gp", "fp" }; private string StagePrefix; diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs index 5b62ac3a..92bdd658 100644 --- a/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs +++ b/Ryujinx.Graphics/Gal/Shader/GlslDecompiler.cs @@ -31,7 +31,9 @@ namespace Ryujinx.Graphics.Gal.Shader private StringBuilder SB; - public GlslDecompiler() + public int MaxUboSize { get; } + + public GlslDecompiler(int MaxUboSize) { InstsExpr = new Dictionary() { @@ -106,6 +108,8 @@ namespace Ryujinx.Graphics.Gal.Shader { ShaderIrInst.Utof, GetUtofExpr }, { ShaderIrInst.Xor, GetXorExpr } }; + + this.MaxUboSize = MaxUboSize / 16; } public GlslProgram Decompile( @@ -259,7 +263,7 @@ namespace Ryujinx.Graphics.Gal.Shader { SB.AppendLine($"layout (std140) uniform {DeclInfo.Name} {{"); - SB.AppendLine($"{IdentationStr}vec4 {DeclInfo.Name}_data[{GlslDecl.MaxUboSize}];"); + SB.AppendLine($"{IdentationStr}vec4 {DeclInfo.Name}_data[{MaxUboSize}];"); SB.AppendLine("};"); } diff --git a/Ryujinx.ShaderTools/Program.cs b/Ryujinx.ShaderTools/Program.cs index 3597f256..30fa71ae 100644 --- a/Ryujinx.ShaderTools/Program.cs +++ b/Ryujinx.ShaderTools/Program.cs @@ -7,11 +7,13 @@ namespace Ryujinx.ShaderTools { class Program { + private static readonly int MaxUboSize = 65536; + static void Main(string[] args) { if (args.Length == 2) { - GlslDecompiler Decompiler = new GlslDecompiler(); + GlslDecompiler Decompiler = new GlslDecompiler(MaxUboSize); GalShaderType ShaderType = GalShaderType.Vertex;