LineWidth is not supported on MoltenVK
This commit is contained in:
parent
cc085bcc92
commit
865eb6b69a
3 changed files with 36 additions and 11 deletions
|
@ -968,8 +968,11 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -1502,7 +1505,7 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
_vertexBuffersDirty = ulong.MaxValue >> (64 - _vertexBuffers.Length);
|
||||
|
||||
_descriptorSetUpdater.SignalCommandBufferChange();
|
||||
DynamicState.ForceAllDirty();
|
||||
DynamicState.ForceAllDirty(Gd);
|
||||
_currentPipelineHandle = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,8 +63,9 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
DepthTestCompareOp = 1 << 8,
|
||||
StencilTestEnable = 1 << 9,
|
||||
Toplogy = 1 << 10,
|
||||
LineWidth = 1 <<11,
|
||||
All = Blend | DepthBias | Scissor | Stencil | Viewport | CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnable | Toplogy | LineWidth,
|
||||
LineWidth = 1 << 11,
|
||||
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)
|
||||
|
@ -351,7 +362,10 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
|
||||
private void RecordLineWidth(Vk api, CommandBuffer commandBuffer)
|
||||
{
|
||||
api.CmdSetLineWidth(commandBuffer, _linewidth);
|
||||
if (!OperatingSystem.IsMacOS())
|
||||
{
|
||||
api.CmdSetLineWidth(commandBuffer, _linewidth);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -482,6 +482,11 @@ namespace Ryujinx.Graphics.Vulkan
|
|||
DepthBiasEnable = DepthBiasEnable,
|
||||
};
|
||||
|
||||
if (isMoltenVk)
|
||||
{
|
||||
rasterizationState.LineWidth = 1.0f;
|
||||
}
|
||||
|
||||
if (!supportsExtDynamicState)
|
||||
{
|
||||
rasterizationState.CullMode = CullMode;
|
||||
|
@ -599,7 +604,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];
|
||||
|
||||
|
@ -610,8 +615,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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue