From b423197619dd8d9dda1c255a76105bf30e255dae Mon Sep 17 00:00:00 2001 From: gdkchan 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 --- .../CodeGen/Spirv/CodeGenContext.cs | 51 +++++++++++++--------- 1 file changed, 31 insertions(+), 20 deletions(-) (limited to 'src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs') diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs index d4f49045..d385782a 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs @@ -20,21 +20,29 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public StructuredProgramInfo Info { get; } - public ShaderConfig Config { get; } + public AttributeUsage AttributeUsage { get; } + public ShaderDefinitions Definitions { get; } + public ShaderProperties Properties { get; } + public HostCapabilities HostCapabilities { get; } + public ILogger Logger { get; } + public TargetApi TargetApi { get; } public int InputVertices { get; } - public Dictionary ConstantBuffers { get; } = new Dictionary(); - public Dictionary StorageBuffers { get; } = new Dictionary(); - public Dictionary LocalMemories { get; } = new Dictionary(); - public Dictionary SharedMemories { get; } = new Dictionary(); - public Dictionary SamplersTypes { get; } = new Dictionary(); - public Dictionary Samplers { get; } = new Dictionary(); - public Dictionary Images { get; } = new Dictionary(); - public Dictionary Inputs { get; } = new Dictionary(); - public Dictionary Outputs { get; } = new Dictionary(); - public Dictionary InputsPerPatch { get; } = new Dictionary(); - public Dictionary OutputsPerPatch { get; } = new Dictionary(); + public Dictionary ConstantBuffers { get; } = new(); + public Dictionary StorageBuffers { get; } = new(); + + public Dictionary LocalMemories { get; } = new(); + public Dictionary SharedMemories { get; } = new(); + + public Dictionary SamplersTypes { get; } = new(); + public Dictionary Samplers { get; } = new(); + public Dictionary Images { get; } = new(); + + public Dictionary Inputs { get; } = new(); + public Dictionary Outputs { get; } = new(); + public Dictionary InputsPerPatch { get; } = new(); + public Dictionary OutputsPerPatch { get; } = new(); public StructuredFunction CurrentFunction { get; set; } private readonly Dictionary _locals = new(); @@ -81,25 +89,28 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public CodeGenContext( StructuredProgramInfo info, - ShaderConfig config, + CodeGenParameters parameters, GeneratorPool instPool, GeneratorPool integerPool) : base(SpirvVersionPacked, instPool, integerPool) { Info = info; - Config = config; - - if (config.Stage == ShaderStage.Geometry) + AttributeUsage = parameters.AttributeUsage; + Definitions = parameters.Definitions; + Properties = parameters.Properties; + HostCapabilities = parameters.HostCapabilities; + Logger = parameters.Logger; + TargetApi = parameters.TargetApi; + + if (parameters.Definitions.Stage == ShaderStage.Geometry) { - InputTopology inPrimitive = config.GpuAccessor.QueryPrimitiveTopology(); - - InputVertices = inPrimitive switch + InputVertices = parameters.Definitions.InputTopology switch { InputTopology.Points => 1, InputTopology.Lines => 2, InputTopology.LinesAdjacency => 2, InputTopology.Triangles => 3, InputTopology.TrianglesAdjacency => 3, - _ => throw new InvalidOperationException($"Invalid input topology \"{inPrimitive}\"."), + _ => throw new InvalidOperationException($"Invalid input topology \"{parameters.Definitions.InputTopology}\"."), }; } -- cgit v1.2.3