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.

This commit is contained in:
sunshineinabox 2024-09-13 15:22:05 -07:00
parent b557dc805b
commit bc14efe5f1

View File

@ -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;