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/GpuGraphicsState.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/GpuGraphicsState.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Shader/GpuGraphicsState.cs | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Shader/GpuGraphicsState.cs b/src/Ryujinx.Graphics.Shader/GpuGraphicsState.cs new file mode 100644 index 00000000..f16c71d5 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/GpuGraphicsState.cs @@ -0,0 +1,169 @@ +using Ryujinx.Common.Memory; + +namespace Ryujinx.Graphics.Shader +{ + /// <summary> + /// GPU graphics state that the shader depends on. + /// </summary> + public readonly struct GpuGraphicsState + { + /// <summary> + /// Early Z force enable. + /// </summary> + public readonly bool EarlyZForce; + + /// <summary> + /// Primitive topology of current draw. + /// </summary> + public readonly InputTopology Topology; + + /// <summary> + /// Tessellation winding order. + /// </summary> + public readonly bool TessCw; + + /// <summary> + /// Tessellation patch type. + /// </summary> + public readonly TessPatchType TessPatchType; + + /// <summary> + /// Tessellation spacing. + /// </summary> + public readonly TessSpacing TessSpacing; + + /// <summary> + /// Indicates whether alpha-to-coverage is enabled. + /// </summary> + public readonly bool AlphaToCoverageEnable; + + /// <summary> + /// Indicates whether alpha-to-coverage dithering is enabled. + /// </summary> + public readonly bool AlphaToCoverageDitherEnable; + + /// <summary> + /// Indicates whether the viewport transform is disabled. + /// </summary> + public readonly bool ViewportTransformDisable; + + /// <summary> + /// Depth mode zero to one or minus one to one. + /// </summary> + public readonly bool DepthMode; + + /// <summary> + /// Indicates if the point size is set on the shader or is fixed. + /// </summary> + public readonly bool ProgramPointSizeEnable; + + /// <summary> + /// Point size used if <see cref="ProgramPointSizeEnable" /> is false. + /// </summary> + public readonly float PointSize; + + /// <summary> + /// When alpha test is enabled, indicates the comparison that decides if the fragment should be discarded. + /// </summary> + public readonly AlphaTestOp AlphaTestCompare; + + /// <summary> + /// When alpha test is enabled, indicates the value to compare with the fragment output alpha. + /// </summary> + public readonly float AlphaTestReference; + + /// <summary> + /// Type of the vertex attributes consumed by the shader. + /// </summary> + public readonly Array32<AttributeType> AttributeTypes; + + /// <summary> + /// Indicates that the draw is writing the base vertex, base instance and draw index to Constant Buffer 0. + /// </summary> + public readonly bool HasConstantBufferDrawParameters; + + /// <summary> + /// Type of the fragment shader outputs. + /// </summary> + public readonly Array8<AttributeType> FragmentOutputTypes; + + /// <summary> + /// Indicates whether dual source blend is enabled. + /// </summary> + public readonly bool DualSourceBlendEnable; + + /// <summary> + /// Indicates if negation of the viewport Y axis is enabled. + /// </summary> + public readonly bool YNegateEnabled; + + /// <summary> + /// If true, indicates that the fragment origin is the upper left corner of the viewport, otherwise it is the lower left corner. + /// </summary> + public readonly bool OriginUpperLeft; + + /// <summary> + /// Creates a new GPU graphics state. + /// </summary> + /// <param name="earlyZForce">Early Z force enable</param> + /// <param name="topology">Primitive topology</param> + /// <param name="tessCw">Tessellation winding order (clockwise or counter-clockwise)</param> + /// <param name="tessPatchType">Tessellation patch type</param> + /// <param name="tessSpacing">Tessellation spacing</param> + /// <param name="alphaToCoverageEnable">Indicates whether alpha-to-coverage is enabled</param> + /// <param name="alphaToCoverageDitherEnable">Indicates whether alpha-to-coverage dithering is enabled</param> + /// <param name="viewportTransformDisable">Indicates whether the viewport transform is disabled</param> + /// <param name="depthMode">Depth mode zero to one or minus one to one</param> + /// <param name="programPointSizeEnable">Indicates if the point size is set on the shader or is fixed</param> + /// <param name="pointSize">Point size if not set from shader</param> + /// <param name="alphaTestCompare">When alpha test is enabled, indicates the comparison that decides if the fragment should be discarded</param> + /// <param name="alphaTestReference">When alpha test is enabled, indicates the value to compare with the fragment output alpha</param> + /// <param name="attributeTypes">Type of the vertex attributes consumed by the shader</param> + /// <param name="hasConstantBufferDrawParameters">Indicates that the draw is writing the base vertex, base instance and draw index to Constant Buffer 0</param> + /// <param name="fragmentOutputTypes">Type of the fragment shader outputs</param> + /// <param name="dualSourceBlendEnable">Indicates whether dual source blend is enabled</param> + /// <param name="yNegateEnabled">Indicates if negation of the viewport Y axis is enabled</param> + /// <param name="originUpperLeft">If true, indicates that the fragment origin is the upper left corner of the viewport, otherwise it is the lower left corner</param> + public GpuGraphicsState( + bool earlyZForce, + InputTopology topology, + bool tessCw, + TessPatchType tessPatchType, + TessSpacing tessSpacing, + bool alphaToCoverageEnable, + bool alphaToCoverageDitherEnable, + bool viewportTransformDisable, + bool depthMode, + bool programPointSizeEnable, + float pointSize, + AlphaTestOp alphaTestCompare, + float alphaTestReference, + in Array32<AttributeType> attributeTypes, + bool hasConstantBufferDrawParameters, + in Array8<AttributeType> fragmentOutputTypes, + bool dualSourceBlendEnable, + bool yNegateEnabled, + bool originUpperLeft) + { + EarlyZForce = earlyZForce; + Topology = topology; + TessCw = tessCw; + TessPatchType = tessPatchType; + TessSpacing = tessSpacing; + AlphaToCoverageEnable = alphaToCoverageEnable; + AlphaToCoverageDitherEnable = alphaToCoverageDitherEnable; + ViewportTransformDisable = viewportTransformDisable; + DepthMode = depthMode; + ProgramPointSizeEnable = programPointSizeEnable; + PointSize = pointSize; + AlphaTestCompare = alphaTestCompare; + AlphaTestReference = alphaTestReference; + AttributeTypes = attributeTypes; + HasConstantBufferDrawParameters = hasConstantBufferDrawParameters; + FragmentOutputTypes = fragmentOutputTypes; + DualSourceBlendEnable = dualSourceBlendEnable; + YNegateEnabled = yNegateEnabled; + OriginUpperLeft = originUpperLeft; + } + } +} |