From bc14efe5f1a7f0f439f759fb993575b4f90792da Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Fri, 13 Sep 2024 15:22:05 -0700 Subject: [PATCH] Avoid setting the dynamic state for feedback loop if it is not set avoids validation error. Also linewidth value is ignored if dynamic state is supported. --- src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 44 ++++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index f5c0c17da..647b77c20 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -495,11 +495,8 @@ namespace Ryujinx.Graphics.Vulkan DepthClampEnable = DepthClampEnable, }; - if (isMoltenVk) - { - // When widelines feature is not supported it must be 1.0f. - rasterizationState.LineWidth = 1.0f; - } + // When widelines feature is not supported it must be 1.0f, this will be ignored if Line Width dynamic state is supported + rasterizationState.LineWidth = 1.0f; var viewportState = new PipelineViewportStateCreateInfo { @@ -661,9 +658,26 @@ namespace Ryujinx.Graphics.Vulkan } } - if (_supportsFeedBackLoopDynamicState) + PipelineCreateFlags pipelineCreateFlags = 0; + + if (gd.Capabilities.SupportsAttachmentFeedbackLoop) { - dynamicStates[dynamicStatesCount++] = DynamicState.AttachmentFeedbackLoopEnableExt; + FeedbackLoopAspects aspects = FeedbackLoopAspects; + + if ((aspects & FeedbackLoopAspects.Color) != 0) + { + pipelineCreateFlags |= PipelineCreateFlags.CreateColorAttachmentFeedbackLoopBitExt; + } + + if ((aspects & FeedbackLoopAspects.Depth) != 0) + { + pipelineCreateFlags |= PipelineCreateFlags.CreateDepthStencilAttachmentFeedbackLoopBitExt; + } + + if (_supportsFeedBackLoopDynamicState && pipelineCreateFlags != 0) + { + dynamicStates[dynamicStatesCount++] = DynamicState.AttachmentFeedbackLoopEnableExt; + } } var pipelineDynamicStateCreateInfo = new PipelineDynamicStateCreateInfo @@ -677,6 +691,7 @@ namespace Ryujinx.Graphics.Vulkan { SType = StructureType.GraphicsPipelineCreateInfo, StageCount = StagesCount, + Flags = pipelineCreateFlags, PStages = Stages.Pointer, PVertexInputState = &vertexInputState, PInputAssemblyState = &inputAssemblyState, @@ -690,21 +705,6 @@ namespace Ryujinx.Graphics.Vulkan RenderPass = renderPass, }; - if (gd.Capabilities.SupportsAttachmentFeedbackLoop && !_supportsFeedBackLoopDynamicState) - { - FeedbackLoopAspects aspects = FeedbackLoopAspects; - - if ((aspects & FeedbackLoopAspects.Color) != 0) - { - pipelineCreateInfo.Flags |= PipelineCreateFlags.CreateColorAttachmentFeedbackLoopBitExt; - } - - if ((aspects & FeedbackLoopAspects.Depth) != 0) - { - pipelineCreateInfo.Flags |= PipelineCreateFlags.CreateDepthStencilAttachmentFeedbackLoopBitExt; - } - } - if (!gd.Capabilities.SupportsExtendedDynamicState2.ExtendedDynamicState2PatchControlPoints) { pipelineCreateInfo.PTessellationState = &tessellationState;