diff options
author | gdkchan <gab.dark.100@gmail.com> | 2023-08-13 22:26:42 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-13 22:26:42 -0300 |
commit | b423197619dd8d9dda1c255a76105bf30e255dae (patch) | |
tree | e3898b3b1672f022b5de4522b51bd21583043996 /src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs | |
parent | 8edfb2bc7b8507d0ef51f0544eb32a65f0bf54a1 (diff) |
Delete ShaderConfig and organize shader resources/definitions better (#5509)1.1.985
* 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
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs b/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs index 5e572f5a..54705aca 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs @@ -127,25 +127,25 @@ namespace Ryujinx.Graphics.Shader.Instructions { if (!(isPerPatch ? _attributesPerPatch : _attributes).TryGetValue(offset, out AttributeEntry entry)) { - context.Config.GpuAccessor.Log($"Attribute offset 0x{offset:X} is not valid."); + context.TranslatorContext.GpuAccessor.Log($"Attribute offset 0x{offset:X} is not valid."); return Const(0); } StagesMask validUseMask = isOutput ? entry.OutputMask : entry.InputMask; - if (((StagesMask)(1 << (int)context.Config.Stage) & validUseMask) == StagesMask.None) + if (((StagesMask)(1 << (int)context.TranslatorContext.Definitions.Stage) & validUseMask) == StagesMask.None) { - context.Config.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not valid for stage {context.Config.Stage}."); + context.TranslatorContext.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not valid for stage {context.TranslatorContext.Definitions.Stage}."); return Const(0); } - if (!IsSupportedByHost(context.Config.GpuAccessor, context.Config.Stage, entry.IoVariable)) + if (!IsSupportedByHost(context.TranslatorContext.GpuAccessor, context.TranslatorContext.Definitions.Stage, entry.IoVariable)) { - context.Config.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not supported by the host for stage {context.Config.Stage}."); + context.TranslatorContext.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not supported by the host for stage {context.TranslatorContext.Definitions.Stage}."); return Const(0); } - if (HasInvocationId(context.Config.Stage, isOutput) && !isPerPatch) + if (HasInvocationId(context.TranslatorContext.Definitions.Stage, isOutput) && !isPerPatch) { primVertex = context.Load(StorageKind.Input, IoVariable.InvocationId); } @@ -156,12 +156,12 @@ namespace Ryujinx.Graphics.Shader.Instructions StorageKind storageKind = isPerPatch ? (isOutput ? StorageKind.OutputPerPatch : StorageKind.InputPerPatch) : (isOutput ? StorageKind.Output : StorageKind.Input); - IoVariable ioVariable = GetIoVariable(context.Config.Stage, in entry); - AggregateType type = GetType(context.Config, isOutput, innerIndex, in entry); + IoVariable ioVariable = GetIoVariable(context.TranslatorContext.Definitions.Stage, in entry); + AggregateType type = GetType(context.TranslatorContext.Definitions, isOutput, innerIndex, in entry); int elementCount = GetElementCount(type); bool isArray = type.HasFlag(AggregateType.Array); - bool hasArrayIndex = isArray || context.Config.HasPerLocationInputOrOutput(ioVariable, isOutput); + bool hasArrayIndex = isArray || context.TranslatorContext.Definitions.HasPerLocationInputOrOutput(ioVariable, isOutput); bool hasElementIndex = elementCount > 1; @@ -190,25 +190,25 @@ namespace Ryujinx.Graphics.Shader.Instructions { if (!(isPerPatch ? _attributesPerPatch : _attributes).TryGetValue(offset, out AttributeEntry entry)) { - context.Config.GpuAccessor.Log($"Attribute offset 0x{offset:X} is not valid."); + context.TranslatorContext.GpuAccessor.Log($"Attribute offset 0x{offset:X} is not valid."); return; } - if (((StagesMask)(1 << (int)context.Config.Stage) & entry.OutputMask) == StagesMask.None) + if (((StagesMask)(1 << (int)context.TranslatorContext.Definitions.Stage) & entry.OutputMask) == StagesMask.None) { - context.Config.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not valid for stage {context.Config.Stage}."); + context.TranslatorContext.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not valid for stage {context.TranslatorContext.Definitions.Stage}."); return; } - if (!IsSupportedByHost(context.Config.GpuAccessor, context.Config.Stage, entry.IoVariable)) + if (!IsSupportedByHost(context.TranslatorContext.GpuAccessor, context.TranslatorContext.Definitions.Stage, entry.IoVariable)) { - context.Config.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not supported by the host for stage {context.Config.Stage}."); + context.TranslatorContext.GpuAccessor.Log($"Attribute offset 0x{offset:X} ({entry.IoVariable}) is not supported by the host for stage {context.TranslatorContext.Definitions.Stage}."); return; } Operand invocationId = null; - if (HasInvocationId(context.Config.Stage, isOutput: true) && !isPerPatch) + if (HasInvocationId(context.TranslatorContext.Definitions.Stage, isOutput: true) && !isPerPatch) { invocationId = context.Load(StorageKind.Input, IoVariable.InvocationId); } @@ -217,12 +217,12 @@ namespace Ryujinx.Graphics.Shader.Instructions int innerIndex = innerOffset / 4; StorageKind storageKind = isPerPatch ? StorageKind.OutputPerPatch : StorageKind.Output; - IoVariable ioVariable = GetIoVariable(context.Config.Stage, in entry); - AggregateType type = GetType(context.Config, isOutput: true, innerIndex, in entry); + IoVariable ioVariable = GetIoVariable(context.TranslatorContext.Definitions.Stage, in entry); + AggregateType type = GetType(context.TranslatorContext.Definitions, isOutput: true, innerIndex, in entry); int elementCount = GetElementCount(type); bool isArray = type.HasFlag(AggregateType.Array); - bool hasArrayIndex = isArray || context.Config.HasPerLocationInputOrOutput(ioVariable, isOutput: true); + bool hasArrayIndex = isArray || context.TranslatorContext.Definitions.HasPerLocationInputOrOutput(ioVariable, isOutput: true); bool hasElementIndex = elementCount > 1; @@ -271,7 +271,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return true; } - public static IoVariable GetIoVariable(ShaderConfig config, int offset, out int location) + public static IoVariable GetIoVariable(ShaderDefinitions definitions, int offset, out int location) { location = 0; @@ -280,17 +280,17 @@ namespace Ryujinx.Graphics.Shader.Instructions return IoVariable.Invalid; } - if (((StagesMask)(1 << (int)config.Stage) & entry.OutputMask) == StagesMask.None) + if (((StagesMask)(1 << (int)definitions.Stage) & entry.OutputMask) == StagesMask.None) { return IoVariable.Invalid; } - if (config.HasPerLocationInputOrOutput(entry.IoVariable, isOutput: true)) + if (definitions.HasPerLocationInputOrOutput(entry.IoVariable, isOutput: true)) { location = (offset - entry.BaseOffset) / 16; } - return GetIoVariable(config.Stage, in entry); + return GetIoVariable(definitions.Stage, in entry); } private static IoVariable GetIoVariable(ShaderStage stage, in AttributeEntry entry) @@ -303,17 +303,17 @@ namespace Ryujinx.Graphics.Shader.Instructions return entry.IoVariable; } - private static AggregateType GetType(ShaderConfig config, bool isOutput, int innerIndex, in AttributeEntry entry) + private static AggregateType GetType(ShaderDefinitions definitions, bool isOutput, int innerIndex, in AttributeEntry entry) { AggregateType type = entry.Type; if (entry.IoVariable == IoVariable.UserDefined) { - type = config.GetUserDefinedType(innerIndex / 4, isOutput); + type = definitions.GetUserDefinedType(innerIndex / 4, isOutput); } else if (entry.IoVariable == IoVariable.FragmentOutputColor) { - type = config.GetFragmentOutputColorType(innerIndex / 4); + type = definitions.GetFragmentOutputColorType(innerIndex / 4); } return type; |