From f09bba82b9366e5912b639a610ae89cbb1cf352c Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 29 Aug 2023 21:10:34 -0300
Subject: Geometry shader emulation for macOS (#5551)

* Implement vertex and geometry shader conversion to compute

* Call InitializeReservedCounts for compute too

* PR feedback

* Set clip distance mask for geometry and tessellation shaders too

* Transform feedback emulation only for vertex
---
 .../Shader/CachedShaderProgram.cs                  | 23 ++++++++++++++++++++++
 1 file changed, 23 insertions(+)

(limited to 'src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs')

diff --git a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs
index ff9c39a1..600c8a98 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderProgram.cs
@@ -14,6 +14,16 @@ namespace Ryujinx.Graphics.Gpu.Shader
         /// </summary>
         public IProgram HostProgram { get; }
 
+        /// <summary>
+        /// Optional vertex shader converted to compute.
+        /// </summary>
+        public ShaderAsCompute VertexAsCompute { get; }
+
+        /// <summary>
+        /// Optional geometry shader converted to compute.
+        /// </summary>
+        public ShaderAsCompute GeometryAsCompute { get; }
+
         /// <summary>
         /// GPU state used to create this version of the shader.
         /// </summary>
@@ -45,12 +55,25 @@ namespace Ryujinx.Graphics.Gpu.Shader
             Bindings = new CachedShaderBindings(shaders.Length == 1, shaders);
         }
 
+        public CachedShaderProgram(
+            IProgram hostProgram,
+            ShaderAsCompute vertexAsCompute,
+            ShaderAsCompute geometryAsCompute,
+            ShaderSpecializationState specializationState,
+            CachedShaderStage[] shaders) : this(hostProgram, specializationState, shaders)
+        {
+            VertexAsCompute = vertexAsCompute;
+            GeometryAsCompute = geometryAsCompute;
+        }
+
         /// <summary>
         /// Dispose of the host shader resources.
         /// </summary>
         public void Dispose()
         {
             HostProgram.Dispose();
+            VertexAsCompute?.HostProgram.Dispose();
+            GeometryAsCompute?.HostProgram.Dispose();
         }
     }
 }
-- 
cgit v1.2.3-70-g09d2