From b423197619dd8d9dda1c255a76105bf30e255dae Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Sun, 13 Aug 2023 22:26:42 -0300
Subject: Delete ShaderConfig and organize shader resources/definitions better
 (#5509)

* Move some properties out of ShaderConfig

* Stop using ShaderConfig on backends

* Replace ShaderConfig usages on Translator and passes

* Move remaining properties out of ShaderConfig and delete ShaderConfig

* Remove ResourceManager property from TranslatorContext

* Move Rewriter passes to separate transform pass files

* Fix TransformPasses.RunPass on cases where a node is removed

* Move remaining ClipDistancePrimitivesWritten and UsedFeatures updates to decode stage

* Reduce excessive parameter passing a bit by using structs more

* Remove binding parameter from ShaderProperties methods since it is redundant

* Replace decoder instruction checks with switch statement

* Put GLSL on the same plan as SPIR-V for input/output declaration

* Stop mutating TranslatorContext state when Translate is called

* Pass most of the graphics state using a struct instead of individual query methods

* Auto-format

* Auto-format

* Add backend logging interface

* Auto-format

* Remove unnecessary use of interpolated strings

* Remove more modifications of AttributeUsage after decode

* PR feedback

* gl_Layer is not supported on compute
---
 .../StructuredIr/StructuredProgramContext.cs       | 29 ++++++++++++----------
 1 file changed, 16 insertions(+), 13 deletions(-)

(limited to 'src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs')

diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs
index 019fc332..045662a1 100644
--- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs
+++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs
@@ -28,17 +28,25 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
 
         public StructuredProgramInfo Info { get; }
 
-        public ShaderConfig Config { get; }
-
-        public StructuredProgramContext(ShaderConfig config)
+        public ShaderDefinitions Definitions { get; }
+        public ResourceManager ResourceManager { get; }
+        public bool DebugMode { get; }
+
+        public StructuredProgramContext(
+            AttributeUsage attributeUsage,
+            ShaderDefinitions definitions,
+            ResourceManager resourceManager,
+            bool debugMode)
         {
             Info = new StructuredProgramInfo();
 
-            Config = config;
+            Definitions = definitions;
+            ResourceManager = resourceManager;
+            DebugMode = debugMode;
 
-            if (config.GpPassthrough)
+            if (definitions.GpPassthrough)
             {
-                int passthroughAttributes = config.PassthroughAttributes;
+                int passthroughAttributes = attributeUsage.PassthroughAttributes;
                 while (passthroughAttributes != 0)
                 {
                     int index = BitOperations.TrailingZeroCount(passthroughAttributes);
@@ -52,11 +60,6 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
                 Info.IoDefinitions.Add(new IoDefinition(StorageKind.Input, IoVariable.PointSize));
                 Info.IoDefinitions.Add(new IoDefinition(StorageKind.Input, IoVariable.ClipDistance));
             }
-            else if (config.Stage == ShaderStage.Fragment)
-            {
-                // Potentially used for texture coordinate scaling.
-                Info.IoDefinitions.Add(new IoDefinition(StorageKind.Input, IoVariable.FragmentCoord));
-            }
         }
 
         public void EnterFunction(
@@ -304,11 +307,11 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
                 int cbufSlot = operand.GetCbufSlot();
                 int cbufOffset = operand.GetCbufOffset();
 
-                int binding = Config.ResourceManager.GetConstantBufferBinding(cbufSlot);
+                int binding = ResourceManager.GetConstantBufferBinding(cbufSlot);
                 int vecIndex = cbufOffset >> 2;
                 int elemIndex = cbufOffset & 3;
 
-                Config.ResourceManager.SetUsedConstantBufferBinding(binding);
+                ResourceManager.SetUsedConstantBufferBinding(binding);
 
                 IAstNode[] sources = new IAstNode[]
                 {
-- 
cgit v1.2.3-70-g09d2