aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs')
-rw-r--r--src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs51
1 files changed, 31 insertions, 20 deletions
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<int, Instruction> ConstantBuffers { get; } = new Dictionary<int, Instruction>();
- public Dictionary<int, Instruction> StorageBuffers { get; } = new Dictionary<int, Instruction>();
- public Dictionary<int, Instruction> LocalMemories { get; } = new Dictionary<int, Instruction>();
- public Dictionary<int, Instruction> SharedMemories { get; } = new Dictionary<int, Instruction>();
- public Dictionary<int, SamplerType> SamplersTypes { get; } = new Dictionary<int, SamplerType>();
- public Dictionary<int, (Instruction, Instruction, Instruction)> Samplers { get; } = new Dictionary<int, (Instruction, Instruction, Instruction)>();
- public Dictionary<int, (Instruction, Instruction)> Images { get; } = new Dictionary<int, (Instruction, Instruction)>();
- public Dictionary<IoDefinition, Instruction> Inputs { get; } = new Dictionary<IoDefinition, Instruction>();
- public Dictionary<IoDefinition, Instruction> Outputs { get; } = new Dictionary<IoDefinition, Instruction>();
- public Dictionary<IoDefinition, Instruction> InputsPerPatch { get; } = new Dictionary<IoDefinition, Instruction>();
- public Dictionary<IoDefinition, Instruction> OutputsPerPatch { get; } = new Dictionary<IoDefinition, Instruction>();
+ public Dictionary<int, Instruction> ConstantBuffers { get; } = new();
+ public Dictionary<int, Instruction> StorageBuffers { get; } = new();
+
+ public Dictionary<int, Instruction> LocalMemories { get; } = new();
+ public Dictionary<int, Instruction> SharedMemories { get; } = new();
+
+ public Dictionary<int, SamplerType> SamplersTypes { get; } = new();
+ public Dictionary<int, (Instruction, Instruction, Instruction)> Samplers { get; } = new();
+ public Dictionary<int, (Instruction, Instruction)> Images { get; } = new();
+
+ public Dictionary<IoDefinition, Instruction> Inputs { get; } = new();
+ public Dictionary<IoDefinition, Instruction> Outputs { get; } = new();
+ public Dictionary<IoDefinition, Instruction> InputsPerPatch { get; } = new();
+ public Dictionary<IoDefinition, Instruction> OutputsPerPatch { get; } = new();
public StructuredFunction CurrentFunction { get; set; }
private readonly Dictionary<AstOperand, Instruction> _locals = new();
@@ -81,25 +89,28 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
public CodeGenContext(
StructuredProgramInfo info,
- ShaderConfig config,
+ CodeGenParameters parameters,
GeneratorPool<Instruction> instPool,
GeneratorPool<LiteralInteger> 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}\"."),
};
}