Fix oversight with implementing Primitive Topology Dynamic State

This commit is contained in:
sunshineinabox 2024-05-29 10:14:12 -07:00
parent e6492f8e78
commit d8d33417e9
2 changed files with 19 additions and 5 deletions

View file

@ -737,7 +737,7 @@ namespace Ryujinx.Graphics.Vulkan
if (oldTopologyClass != newTopologyClass)
{
_newState.Topology = oldTopology;
_newState.TopologyClass = oldTopology;
}
}
else
@ -747,9 +747,10 @@ namespace Ryujinx.Graphics.Vulkan
_newState.DepthTestEnable = oldDepthTestEnable;
_newState.DepthWriteEnable = oldDepthWriteEnable;
_newState.ViewportsCount = oldViewportsCount;
_newState.Topology = oldTopology;
}
_newState.Topology = oldTopology;
DynamicState.SetViewports(ref oldViewports, oldViewportsCount);
SignalStateChange();
@ -1102,18 +1103,20 @@ namespace Ryujinx.Graphics.Vulkan
var vkTopology = Gd.TopologyRemap(topology).Convert();
var newTopologyClass = GetTopologyClass(vkTopology);
var currentTopologyClass = GetTopologyClass(_newState.Topology);
var currentTopologyClass = GetTopologyClass(_newState.TopologyClass);
if (_supportExtDynamic)
{
DynamicState.SetPrimitiveTopology(vkTopology);
}
if (!_supportExtDynamic || (currentTopologyClass != newTopologyClass))
if ((currentTopologyClass != newTopologyClass))
{
_newState.Topology = vkTopology;
_newState.TopologyClass = vkTopology;
}
_newState.Topology = vkTopology;
SignalStateChange();
}

View file

@ -131,6 +131,8 @@ namespace Ryujinx.Graphics.Vulkan
set => Internal.Id7 = (Internal.Id7 & 0xFFFFFFFFFFF0FFFF) | ((ulong)value << 16);
}
public PrimitiveTopology TopologyClass;
public LogicOp LogicOp
{
readonly get => (LogicOp)((Internal.Id7 >> 20) & 0xF);
@ -437,6 +439,15 @@ namespace Ryujinx.Graphics.Vulkan
Topology = Topology,
};
if (supportsExtDynamicState)
{
inputAssemblyState.Topology = TopologyClass;
}
else
{
inputAssemblyState.Topology = Topology;
}
var tessellationState = new PipelineTessellationStateCreateInfo
{
SType = StructureType.PipelineTessellationStateCreateInfo,