aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGpuAccessor.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/DiskCache/DiskCacheGpuAccessor.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/DiskCache/DiskCacheGpuAccessor.cs')
-rw-r--r--src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGpuAccessor.cs119
1 files changed, 10 insertions, 109 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGpuAccessor.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGpuAccessor.cs
index b5f9395e..93d293f6 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGpuAccessor.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGpuAccessor.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;
@@ -44,6 +43,12 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
_newSpecState = newSpecState;
_stageIndex = stageIndex;
_isVulkan = context.Capabilities.Api == TargetApi.Vulkan;
+
+ if (stageIndex == (int)ShaderStage.Geometry - 1)
+ {
+ // Only geometry shaders require the primitive topology.
+ newSpecState.RecordPrimitiveTopology();
+ }
}
/// <inheritdoc/>
@@ -70,48 +75,6 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
}
/// <inheritdoc/>
- public bool QueryAlphaToCoverageDitherEnable()
- {
- return _oldSpecState.GraphicsState.AlphaToCoverageEnable && _oldSpecState.GraphicsState.AlphaToCoverageDitherEnable;
- }
-
- /// <inheritdoc/>
- public AlphaTestOp QueryAlphaTestCompare()
- {
- if (!_isVulkan || !_oldSpecState.GraphicsState.AlphaTestEnable)
- {
- return AlphaTestOp.Always;
- }
-
- return _oldSpecState.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() => _oldSpecState.GraphicsState.AlphaTestReference;
-
- /// <inheritdoc/>
- public AttributeType QueryAttributeType(int location)
- {
- return _oldSpecState.GraphicsState.AttributeTypes[location];
- }
-
- /// <inheritdoc/>
- public AttributeType QueryFragmentOutputType(int location)
- {
- return _oldSpecState.GraphicsState.FragmentOutputTypes[location];
- }
-
- /// <inheritdoc/>
public int QueryComputeLocalSizeX() => _oldSpecState.ComputeState.LocalSizeX;
/// <inheritdoc/>
@@ -134,52 +97,15 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
}
/// <inheritdoc/>
- public bool QueryHasConstantBufferDrawParameters()
- {
- return _oldSpecState.GraphicsState.HasConstantBufferDrawParameters;
- }
-
- /// <inheritdoc/>
- public bool QueryDualSourceBlendEnable()
- {
- return _oldSpecState.GraphicsState.DualSourceBlendEnable;
- }
-
- /// <inheritdoc/>
- public InputTopology QueryPrimitiveTopology()
+ public GpuGraphicsState QueryGraphicsState()
{
- _newSpecState.RecordPrimitiveTopology();
- return ConvertToInputTopology(_oldSpecState.GraphicsState.Topology, _oldSpecState.GraphicsState.TessellationMode);
+ return _oldSpecState.GraphicsState.CreateShaderGraphicsState(!_isVulkan, _isVulkan || _oldSpecState.GraphicsState.YNegateEnabled);
}
/// <inheritdoc/>
- public bool QueryProgramPointSize()
- {
- return _oldSpecState.GraphicsState.ProgramPointSizeEnable;
- }
-
- /// <inheritdoc/>
- public float QueryPointSize()
- {
- return _oldSpecState.GraphicsState.PointSize;
- }
-
- /// <inheritdoc/>
- public bool QueryTessCw()
- {
- return _oldSpecState.GraphicsState.TessellationMode.UnpackCw();
- }
-
- /// <inheritdoc/>
- public TessPatchType QueryTessPatchType()
- {
- return _oldSpecState.GraphicsState.TessellationMode.UnpackPatchType();
- }
-
- /// <inheritdoc/>
- public TessSpacing QueryTessSpacing()
+ public bool QueryHasConstantBufferDrawParameters()
{
- return _oldSpecState.GraphicsState.TessellationMode.UnpackSpacing();
+ return _oldSpecState.GraphicsState.HasConstantBufferDrawParameters;
}
/// <inheritdoc/>
@@ -205,12 +131,6 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
}
/// <inheritdoc/>
- public bool QueryTransformDepthMinusOneToOne()
- {
- return _oldSpecState.GraphicsState.DepthMode;
- }
-
- /// <inheritdoc/>
public bool QueryTransformFeedbackEnabled()
{
return _oldSpecState.TransformFeedbackDescriptors != null;
@@ -229,31 +149,12 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
}
/// <inheritdoc/>
- public bool QueryEarlyZForce()
- {
- _newSpecState.RecordEarlyZForce();
- return _oldSpecState.GraphicsState.EarlyZForce;
- }
-
- /// <inheritdoc/>
public bool QueryHasUnalignedStorageBuffer()
{
return _oldSpecState.GraphicsState.HasUnalignedStorageBuffer || _oldSpecState.ComputeState.HasUnalignedStorageBuffer;
}
/// <inheritdoc/>
- public bool QueryViewportTransformDisable()
- {
- return _oldSpecState.GraphicsState.ViewportTransformDisable;
- }
-
- /// <inheritdoc/>
- public bool QueryYNegateEnabled()
- {
- return _oldSpecState.GraphicsState.YNegateEnabled;
- }
-
- /// <inheritdoc/>
public void RegisterTexture(int handle, int cbufSlot)
{
if (!_oldSpecState.TextureRegistered(_stageIndex, handle, cbufSlot))