LineWidth is not supported on MoltenVK

This commit is contained in:
sunshineinabox 2024-05-16 19:09:40 -07:00
parent 1befb5bd8f
commit 506f25054d
3 changed files with 36 additions and 11 deletions

View file

@ -970,8 +970,11 @@ namespace Ryujinx.Graphics.Vulkan
}
public void SetLineParameters(float width, bool smooth)
{
if (!Gd.IsMoltenVk)
{
DynamicState.SetLineWidth(Gd.Capabilities.SupportsWideLines ? width : 1.0f);
}
SignalStateChange();
}
@ -1506,7 +1509,7 @@ namespace Ryujinx.Graphics.Vulkan
_vertexBuffersDirty = ulong.MaxValue >> (64 - _vertexBuffers.Length);
_descriptorSetUpdater.SignalCommandBufferChange();
DynamicState.ForceAllDirty();
DynamicState.ForceAllDirty(Gd);
_currentPipelineHandle = 0;
}

View file

@ -64,7 +64,8 @@ namespace Ryujinx.Graphics.Vulkan
StencilTestEnable = 1 << 9,
Toplogy = 1 << 10,
LineWidth = 1 << 11,
All = Blend | DepthBias | Scissor | Stencil | Viewport | CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnable | Toplogy | LineWidth,
Standard = Blend | DepthBias | Scissor | Stencil | Viewport | LineWidth,
Extended = CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnable | Toplogy,
}
private DirtyFlags _dirty;
@ -204,9 +205,19 @@ namespace Ryujinx.Graphics.Vulkan
_dirty |= DirtyFlags.LineWidth;
}
public void ForceAllDirty()
public void ForceAllDirty(VulkanRenderer gd)
{
_dirty = DirtyFlags.All;
_dirty = DirtyFlags.Standard;
if (gd.Capabilities.SupportsExtendedDynamicState)
{
_dirty = DirtyFlags.Standard | DirtyFlags.Extended;
}
if (gd.IsMoltenVk)
{
_dirty &= ~DirtyFlags.LineWidth;
}
}
public void ReplayIfDirty(Vk api, CommandBuffer commandBuffer)
@ -350,8 +361,11 @@ namespace Ryujinx.Graphics.Vulkan
}
private void RecordLineWidth(Vk api, CommandBuffer commandBuffer)
{
if (!OperatingSystem.IsMacOS())
{
api.CmdSetLineWidth(commandBuffer, _linewidth);
}
}
}
}

View file

@ -482,6 +482,11 @@ namespace Ryujinx.Graphics.Vulkan
DepthBiasEnable = DepthBiasEnable,
};
if (isMoltenVk)
{
rasterizationState.LineWidth = 1.0f;
}
if (!supportsExtDynamicState)
{
rasterizationState.CullMode = CullMode;
@ -603,7 +608,7 @@ namespace Ryujinx.Graphics.Vulkan
colorBlendState.PNext = &colorBlendAdvancedState;
}
int dynamicStatesCount = supportsExtDynamicState ? (isMoltenVk ? 16 : 17) : 8;
int dynamicStatesCount = supportsExtDynamicState ? (isMoltenVk ? 16 : 17) : (isMoltenVk ? 7 : 8);
DynamicState* dynamicStates = stackalloc DynamicState[dynamicStatesCount];
@ -614,8 +619,11 @@ namespace Ryujinx.Graphics.Vulkan
dynamicStates[4] = DynamicState.StencilWriteMask;
dynamicStates[5] = DynamicState.StencilReference;
dynamicStates[6] = DynamicState.BlendConstants;
dynamicStates[7] = DynamicState.LineWidth;
if(!isMoltenVk)
{
dynamicStates[7] = DynamicState.LineWidth;
}
if (supportsExtDynamicState)
{