Browse Source

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
Thomas Guillemard 7 years ago
parent
commit
33e7c89822

+ 1 - 1
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;
 

+ 0 - 3
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;

+ 6 - 2
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<ShaderIrInst, GetInstExpr>()
             {
@@ -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("};");
             }

+ 3 - 1
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;