Enable VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT

This commit is contained in:
sunshineinabox 2024-05-19 00:24:07 -07:00
parent 863674768d
commit 5d5f482d57
3 changed files with 90 additions and 55 deletions

View file

@ -432,40 +432,17 @@ namespace Ryujinx.Graphics.Vulkan
return null;
}
bool primitiveRestartEnable = PrimitiveRestartEnable;
bool topologySupportsRestart;
if (gd.Capabilities.SupportsPrimitiveTopologyListRestart)
{
topologySupportsRestart = gd.Capabilities.SupportsPrimitiveTopologyPatchListRestart || Topology != PrimitiveTopology.PatchList;
}
else
{
topologySupportsRestart = Topology == PrimitiveTopology.LineStrip ||
Topology == PrimitiveTopology.TriangleStrip ||
Topology == PrimitiveTopology.TriangleFan ||
Topology == PrimitiveTopology.LineStripWithAdjacency ||
Topology == PrimitiveTopology.TriangleStripWithAdjacency;
}
primitiveRestartEnable &= topologySupportsRestart;
//Cannot disable primitveRestartEnable for these Topoligies on MacOS
if ((Topology == PrimitiveTopology.LineStrip || Topology == PrimitiveTopology.TriangleStrip ||
Topology == PrimitiveTopology.LineStripWithAdjacency ||
Topology == PrimitiveTopology.TriangleStripWithAdjacency) && isMoltenVk)
{
primitiveRestartEnable = true;
}
var inputAssemblyState = new PipelineInputAssemblyStateCreateInfo
{
SType = StructureType.PipelineInputAssemblyStateCreateInfo,
PrimitiveRestartEnable = primitiveRestartEnable,
Topology = Topology,
};
if (!supportsExtDynamicState)
{
inputAssemblyState.PrimitiveRestartEnable = PrimitiveRestartEnable;
}
var tessellationState = new PipelineTessellationStateCreateInfo
{
SType = StructureType.PipelineTessellationStateCreateInfo,
@ -631,7 +608,7 @@ namespace Ryujinx.Graphics.Vulkan
if (supportsExtDynamicState2)
{
additionalDynamicStatesCount += 2;
additionalDynamicStatesCount += 3;
if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
{
additionalDynamicStatesCount++;
@ -703,6 +680,7 @@ namespace Ryujinx.Graphics.Vulkan
{
dynamicStates[currentIndex++] = DynamicState.DepthBiasEnableExt;
dynamicStates[currentIndex++] = DynamicState.RasterizerDiscardEnableExt;
dynamicStates[currentIndex++] = DynamicState.PrimitiveRestartEnableExt;
if (gd.ExtendedDynamicState2Features.ExtendedDynamicState2LogicOp)
{