diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs
index c1a7d52d7..3e330ee7f 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs
@@ -169,19 +169,19 @@ namespace Ryujinx.Graphics.Vulkan
 
             pipeline.PolygonMode = PolygonMode.Fill; // Not implemented.
 
-            if (!gd.Capabilities.SupportsExtendedDynamicState2)
+            if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2)
             {
                 pipeline.PrimitiveRestartEnable = state.PrimitiveRestartEnable;
                 pipeline.RasterizerDiscardEnable = state.RasterizerDiscard;
                 pipeline.DepthBiasEnable = state.BiasEnable != 0;
             }
 
-            if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
+            if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2LogicOp)
             {
                 pipeline.LogicOp = state.LogicOpEnable ? state.LogicOp.Convert() : default;
             }
 
-            if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2PatchControlPoints)
+            if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints)
             {
                 pipeline.PatchControlPoints = state.PatchControlPoints;
             }
diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineDynamicState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineDynamicState.cs
index 2c473ab79..dbcd3814d 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineDynamicState.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineDynamicState.cs
@@ -242,7 +242,7 @@ namespace Ryujinx.Graphics.Vulkan
                 _dirty |= DirtyFlags.Extended;
             }
 
-            if (gd.Capabilities.SupportsExtendedDynamicState2)
+            if (gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2)
             {
                 _dirty |= DirtyFlags.Extended2;
             }
@@ -252,12 +252,12 @@ namespace Ryujinx.Graphics.Vulkan
                 _dirty &= ~DirtyFlags.LineWidth;
             }
 
-            if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
+            if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2LogicOp)
             {
                 _dirty &= ~DirtyFlags.LogicOp;
             }
 
-            if (!gd.ExtendedDynamicState2Features.ExtendedDynamicState2PatchControlPoints)
+            if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints)
             {
                 _dirty &= ~DirtyFlags.PatchControlPoints;
             }
diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs
index 66ce0fa1a..cd306525c 100644
--- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs
+++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs
@@ -429,7 +429,7 @@ namespace Ryujinx.Graphics.Vulkan
 
                 PipelineTessellationStateCreateInfo tessellationState;
 
-                if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints)
+                if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints && HasTessellationControlShader)
                 {
                     tessellationState.SType = StructureType.PipelineTessellationStateCreateInfo;
                     tessellationState.PatchControlPoints = PatchControlPoints;
@@ -643,7 +643,7 @@ namespace Ryujinx.Graphics.Vulkan
                     RenderPass = renderPass,
                 };
 
-                if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints)
+                if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints && HasTessellationControlShader)
                 {
                     pipelineCreateInfo.PTessellationState = &tessellationState;
                 }