aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2023-08-13 22:26:42 -0300
committerGitHub <noreply@github.com>2023-08-13 22:26:42 -0300
commitb423197619dd8d9dda1c255a76105bf30e255dae (patch)
treee3898b3b1672f022b5de4522b51bd21583043996 /src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs
parent8edfb2bc7b8507d0ef51f0544eb32a65f0bf54a1 (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.Gpu/Shader/GpuAccessor.cs')
-rw-r--r--src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs126
1 files changed, 12 insertions, 114 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs
index 1fcc93c5..b4f4a439 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs
@@ -1,5 +1,4 @@
using Ryujinx.Common.Logging;
-using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.Gpu.Image;
using Ryujinx.Graphics.Shader;
using Ryujinx.Graphics.Shader.Translation;
@@ -36,6 +35,12 @@ namespace Ryujinx.Graphics.Gpu.Shader
_channel = channel;
_state = state;
_stageIndex = stageIndex;
+
+ if (stageIndex == (int)ShaderStage.Geometry - 1)
+ {
+ // Only geometry shaders require the primitive topology.
+ _state.SpecializationState.RecordPrimitiveTopology();
+ }
}
/// <summary>
@@ -75,58 +80,6 @@ namespace Ryujinx.Graphics.Gpu.Shader
}
/// <inheritdoc/>
- public bool QueryAlphaToCoverageDitherEnable()
- {
- return _state.GraphicsState.AlphaToCoverageEnable && _state.GraphicsState.AlphaToCoverageDitherEnable;
- }
-
- /// <inheritdoc/>
- public AlphaTestOp QueryAlphaTestCompare()
- {
- if (!_isVulkan || !_state.GraphicsState.AlphaTestEnable)
- {
- return AlphaTestOp.Always;
- }
-
- return _state.GraphicsState.AlphaTestCompare switch
- {
- CompareOp.Never or CompareOp.NeverGl => AlphaTestOp.Never,
- CompareOp.Less or CompareOp.LessGl => AlphaTestOp.Less,
- CompareOp.Equal or CompareOp.EqualGl => AlphaTestOp.Equal,
- CompareOp.LessOrEqual or CompareOp.LessOrEqualGl => AlphaTestOp.LessOrEqual,
- CompareOp.Greater or CompareOp.GreaterGl => AlphaTestOp.Greater,
- CompareOp.NotEqual or CompareOp.NotEqualGl => AlphaTestOp.NotEqual,
- CompareOp.GreaterOrEqual or CompareOp.GreaterOrEqualGl => AlphaTestOp.GreaterOrEqual,
- _ => AlphaTestOp.Always,
- };
- }
-
- /// <inheritdoc/>
- public float QueryAlphaTestReference()
- {
- return _state.GraphicsState.AlphaTestReference;
- }
-
- /// <inheritdoc/>
- public AttributeType QueryAttributeType(int location)
- {
- return _state.GraphicsState.AttributeTypes[location];
- }
-
- /// <inheritdoc/>
- public bool QueryEarlyZForce()
- {
- _state.SpecializationState?.RecordEarlyZForce();
- return _state.GraphicsState.EarlyZForce;
- }
-
- /// <inheritdoc/>
- public AttributeType QueryFragmentOutputType(int location)
- {
- return _state.GraphicsState.FragmentOutputTypes[location];
- }
-
- /// <inheritdoc/>
public int QueryComputeLocalSizeX() => _state.ComputeState.LocalSizeX;
/// <inheritdoc/>
@@ -153,58 +106,21 @@ namespace Ryujinx.Graphics.Gpu.Shader
}
/// <inheritdoc/>
- public bool QueryHasConstantBufferDrawParameters()
+ public GpuGraphicsState QueryGraphicsState()
{
- return _state.GraphicsState.HasConstantBufferDrawParameters;
+ return _state.GraphicsState.CreateShaderGraphicsState(!_isVulkan, _isVulkan || _state.GraphicsState.YNegateEnabled);
}
/// <inheritdoc/>
- public bool QueryHasUnalignedStorageBuffer()
- {
- return _state.GraphicsState.HasUnalignedStorageBuffer || _state.ComputeState.HasUnalignedStorageBuffer;
- }
-
- /// <inheritdoc/>
- public bool QueryDualSourceBlendEnable()
- {
- return _state.GraphicsState.DualSourceBlendEnable;
- }
-
- /// <inheritdoc/>
- public InputTopology QueryPrimitiveTopology()
- {
- _state.SpecializationState?.RecordPrimitiveTopology();
- return ConvertToInputTopology(_state.GraphicsState.Topology, _state.GraphicsState.TessellationMode);
- }
-
- /// <inheritdoc/>
- public bool QueryProgramPointSize()
- {
- return _state.GraphicsState.ProgramPointSizeEnable;
- }
-
- /// <inheritdoc/>
- public float QueryPointSize()
- {
- return _state.GraphicsState.PointSize;
- }
-
- /// <inheritdoc/>
- public bool QueryTessCw()
- {
- return _state.GraphicsState.TessellationMode.UnpackCw();
- }
-
- /// <inheritdoc/>
- public TessPatchType QueryTessPatchType()
+ public bool QueryHasConstantBufferDrawParameters()
{
- return _state.GraphicsState.TessellationMode.UnpackPatchType();
+ return _state.GraphicsState.HasConstantBufferDrawParameters;
}
/// <inheritdoc/>
- public TessSpacing QueryTessSpacing()
+ public bool QueryHasUnalignedStorageBuffer()
{
- return _state.GraphicsState.TessellationMode.UnpackSpacing();
+ return _state.GraphicsState.HasUnalignedStorageBuffer || _state.ComputeState.HasUnalignedStorageBuffer;
}
//// <inheritdoc/>
@@ -259,12 +175,6 @@ namespace Ryujinx.Graphics.Gpu.Shader
}
/// <inheritdoc/>
- public bool QueryTransformDepthMinusOneToOne()
- {
- return _state.GraphicsState.DepthMode;
- }
-
- /// <inheritdoc/>
public bool QueryTransformFeedbackEnabled()
{
return _state.TransformFeedbackDescriptors != null;
@@ -283,18 +193,6 @@ namespace Ryujinx.Graphics.Gpu.Shader
}
/// <inheritdoc/>
- public bool QueryViewportTransformDisable()
- {
- return _state.GraphicsState.ViewportTransformDisable;
- }
-
- /// <inheritdoc/>
- public bool QueryYNegateEnabled()
- {
- return _state.GraphicsState.YNegateEnabled;
- }
-
- /// <inheritdoc/>
public void RegisterTexture(int handle, int cbufSlot)
{
_state.SpecializationState?.RegisterTexture(_stageIndex, handle, cbufSlot, GetTextureDescriptor(handle, cbufSlot));