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

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

View file

@ -63,8 +63,9 @@ namespace Ryujinx.Graphics.Vulkan
DepthTestCompareOp = 1 << 8, DepthTestCompareOp = 1 << 8,
StencilTestEnable = 1 << 9, StencilTestEnable = 1 << 9,
Toplogy = 1 << 10, Toplogy = 1 << 10,
LineWidth = 1 <<11, 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; private DirtyFlags _dirty;
@ -204,9 +205,19 @@ namespace Ryujinx.Graphics.Vulkan
_dirty |= DirtyFlags.LineWidth; _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) public void ReplayIfDirty(Vk api, CommandBuffer commandBuffer)
@ -351,7 +362,10 @@ namespace Ryujinx.Graphics.Vulkan
private void RecordLineWidth(Vk api, CommandBuffer commandBuffer) private void RecordLineWidth(Vk api, CommandBuffer commandBuffer)
{ {
api.CmdSetLineWidth(commandBuffer, _linewidth); if (!OperatingSystem.IsMacOS())
{
api.CmdSetLineWidth(commandBuffer, _linewidth);
}
} }
} }
} }

View file

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