From cee712105850ac3385cd0091a923438167433f9f Mon Sep 17 00:00:00 2001
From: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Date: Sat, 8 Apr 2023 01:22:00 +0200
Subject: Move solution and projects to src

---
 src/Ryujinx.Graphics.GAL/ProgramPipelineState.cs | 78 ++++++++++++++++++++++++
 1 file changed, 78 insertions(+)
 create mode 100644 src/Ryujinx.Graphics.GAL/ProgramPipelineState.cs

(limited to 'src/Ryujinx.Graphics.GAL/ProgramPipelineState.cs')

diff --git a/src/Ryujinx.Graphics.GAL/ProgramPipelineState.cs b/src/Ryujinx.Graphics.GAL/ProgramPipelineState.cs
new file mode 100644
index 00000000..41afb34b
--- /dev/null
+++ b/src/Ryujinx.Graphics.GAL/ProgramPipelineState.cs
@@ -0,0 +1,78 @@
+using Ryujinx.Common.Memory;
+using System;
+
+namespace Ryujinx.Graphics.GAL
+{
+    /// <summary>
+    /// Descriptor for a pipeline buffer binding.
+    /// </summary>
+    public readonly struct BufferPipelineDescriptor
+    {
+        public bool Enable { get; }
+        public int Stride { get; }
+        public int Divisor { get; }
+
+        public BufferPipelineDescriptor(bool enable, int stride, int divisor)
+        {
+            Enable = enable;
+            Stride = stride;
+            Divisor = divisor;
+        }
+    }
+
+    /// <summary>
+    /// State required for a program to compile shaders.
+    /// </summary>
+    public struct ProgramPipelineState
+    {
+        // Some state is considered always dynamic and should not be included:
+        // - Viewports/Scissors
+        // - Bias values (not enable)
+
+        public int SamplesCount;
+        public Array8<bool> AttachmentEnable;
+        public Array8<Format> AttachmentFormats;
+        public bool DepthStencilEnable;
+        public Format DepthStencilFormat;
+
+        public bool LogicOpEnable;
+        public LogicalOp LogicOp;
+        public Array8<BlendDescriptor> BlendDescriptors;
+        public Array8<uint> ColorWriteMask;
+
+        public int VertexAttribCount;
+        public Array32<VertexAttribDescriptor> VertexAttribs;
+
+        public int VertexBufferCount;
+        public Array32<BufferPipelineDescriptor> VertexBuffers;
+
+        // TODO: Min/max depth bounds.
+        public DepthTestDescriptor DepthTest;
+        public StencilTestDescriptor StencilTest;
+        public FrontFace FrontFace;
+        public Face CullMode;
+        public bool CullEnable;
+
+        public PolygonModeMask BiasEnable;
+
+        public float LineWidth;
+        // TODO: Polygon mode.
+        public bool DepthClampEnable;
+        public bool RasterizerDiscard;
+        public PrimitiveTopology Topology;
+        public bool PrimitiveRestartEnable;
+        public uint PatchControlPoints;
+
+        public void SetVertexAttribs(ReadOnlySpan<VertexAttribDescriptor> vertexAttribs)
+        {
+            VertexAttribCount = vertexAttribs.Length;
+            vertexAttribs.CopyTo(VertexAttribs.AsSpan());
+        }
+
+        public void SetLogicOpState(bool enable, LogicalOp op)
+        {
+            LogicOp = op;
+            LogicOpEnable = enable;
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2