From 2d1af4ddb44132ed75cab4aef00fcb68e48a4a7e Mon Sep 17 00:00:00 2001
From: sunshineinabox <aqemail@gmail.com>
Date: Mon, 12 Aug 2024 20:57:08 -0700
Subject: [PATCH] Set a default topology state that can be overwritten later if
 needed.

---
 src/Ryujinx.Graphics.Vulkan/PipelineBase.cs      | 2 ++
 src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs | 4 +---
 src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs  | 5 +++++
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs
index 2b75d2753d..a1c66de35f 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs
@@ -1105,6 +1105,8 @@ namespace Ryujinx.Graphics.Vulkan
             _newState.HasTessellationControlShader = internalProgram.HasTessellationControlShader;
             _newState.StagesCount = (uint)stages.Length;
 
+            _newState.Topology = internalProgram.ShaderTopology;
+
             stages.CopyTo(_newState.Stages.AsSpan()[..stages.Length]);
 
             SignalStateChange();
diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs
index 75a6674a30..28241f5da8 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs
@@ -218,9 +218,7 @@ namespace Ryujinx.Graphics.Vulkan
             pipeline.StencilBackDepthFailOp = extendedDynamicState ? 0 : state.StencilTest.BackDpFail.Convert();
             pipeline.StencilBackCompareOp = extendedDynamicState ? 0 : state.StencilTest.BackFunc.Convert();
 
-            var vkTopology = gd.TopologyRemap(state.Topology).Convert();
-
-            pipeline.Topology = extendedDynamicState ? vkTopology.ConvertToClass() : vkTopology;
+            pipeline.Topology = gd.TopologyRemap(state.Topology).Convert();
 
             int vaCount = Math.Min(Constants.MaxVertexAttributes, state.VertexAttribCount);
             int vbCount = Math.Min(Constants.MaxVertexBuffers, state.VertexBufferCount);
diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
index 5338030d98..821a3cbceb 100644
--- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
+++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
 using System.Threading.Tasks;
+using PrimitiveTopology = Silk.NET.Vulkan.PrimitiveTopology;
 
 namespace Ryujinx.Graphics.Vulkan
 {
@@ -23,6 +24,8 @@ namespace Ryujinx.Graphics.Vulkan
         public bool IsCompute { get; }
         public bool HasTessellationControlShader => (Stages & (1u << 3)) != 0;
 
+        public PrimitiveTopology ShaderTopology;
+
         public bool UpdateTexturesWithoutTemplate { get; }
 
         public uint Stages { get; }
@@ -551,6 +554,8 @@ namespace Ryujinx.Graphics.Vulkan
 
             PipelineState pipeline = _state.ToVulkanPipelineState(_gd);
 
+            ShaderTopology = pipeline.Topology;
+
             // Copy the shader stage info to the pipeline.
             var stages = pipeline.Stages.AsSpan();