diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/PipelineState.cs')
| -rw-r--r-- | src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index 25fd7168..49c12b37 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -311,6 +311,7 @@ namespace Ryujinx.Graphics.Vulkan set => Internal.Id9 = (Internal.Id9 & 0xFFFFFFFFFFFFFFBF) | ((value ? 1UL : 0UL) << 6); } + public bool HasTessellationControlShader; public NativeArray<PipelineShaderStageCreateInfo> Stages; public PipelineLayout PipelineLayout; public SpecData SpecializationData; @@ -319,6 +320,7 @@ namespace Ryujinx.Graphics.Vulkan public void Initialize() { + HasTessellationControlShader = false; Stages = new NativeArray<PipelineShaderStageCreateInfo>(Constants.MaxShaderStages); AdvancedBlendSrcPreMultiplied = true; @@ -419,6 +421,15 @@ namespace Ryujinx.Graphics.Vulkan PVertexBindingDescriptions = pVertexBindingDescriptions, }; + // Using patches topology without a tessellation shader is invalid. + // If we find such a case, return null pipeline to skip the draw. + if (Topology == PrimitiveTopology.PatchList && !HasTessellationControlShader) + { + program.AddGraphicsPipeline(ref Internal, null); + + return null; + } + bool primitiveRestartEnable = PrimitiveRestartEnable; bool topologySupportsRestart; |
