Avoid setting depth bias state when not needed.
This commit is contained in:
parent
086656b736
commit
feb67dede6
2 changed files with 30 additions and 15 deletions
|
@ -880,8 +880,17 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
public void SetDepthBias(PolygonModeMask enables, float factor, float units, float clamp)
|
public void SetDepthBias(PolygonModeMask enables, float factor, float units, float clamp)
|
||||||
{
|
{
|
||||||
bool enable = enables != 0;
|
bool enable = (enables != 0) && (factor > 0.0f || units > 0.0f);
|
||||||
DynamicState.SetDepthBias(factor, units, clamp, enable);
|
|
||||||
|
if (enable)
|
||||||
|
{
|
||||||
|
DynamicState.SetDepthBias(factor, units, clamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Gd.Capabilities.SupportsExtendedDynamicState2)
|
||||||
|
{
|
||||||
|
DynamicState.SetDepthBiasEnable(enable);
|
||||||
|
}
|
||||||
|
|
||||||
_newState.DepthBiasEnable = enable;
|
_newState.DepthBiasEnable = enable;
|
||||||
|
|
||||||
|
|
|
@ -77,9 +77,10 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
PatchControlPoints = 1 << 13,
|
PatchControlPoints = 1 << 13,
|
||||||
PrimitiveRestart = 1 << 14,
|
PrimitiveRestart = 1 << 14,
|
||||||
PrimitiveTopology = 1 << 15,
|
PrimitiveTopology = 1 << 15,
|
||||||
|
DepthBiasEnable = 1 << 16,
|
||||||
Standard = Blend | DepthBias | Scissor | Stencil | Viewport | LineWidth,
|
Standard = Blend | DepthBias | Scissor | Stencil | Viewport | LineWidth,
|
||||||
Extended = CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnableandStencilOp | PrimitiveTopology,
|
Extended = CullMode | FrontFace | DepthTestBool | DepthTestCompareOp | StencilTestEnableandStencilOp | PrimitiveTopology,
|
||||||
Extended2 = RasterDiscard | LogicOp | PatchControlPoints | PrimitiveRestart,
|
Extended2 = RasterDiscard | LogicOp | PatchControlPoints | PrimitiveRestart | DepthBiasEnable,
|
||||||
}
|
}
|
||||||
|
|
||||||
private DirtyFlags _dirty;
|
private DirtyFlags _dirty;
|
||||||
|
@ -93,16 +94,21 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_dirty |= DirtyFlags.Blend;
|
_dirty |= DirtyFlags.Blend;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDepthBias(float slopeFactor, float constantFactor, float clamp, bool enable)
|
public void SetDepthBias(float slopeFactor, float constantFactor, float clamp)
|
||||||
{
|
{
|
||||||
_depthBiasSlopeFactor = slopeFactor;
|
_depthBiasSlopeFactor = slopeFactor;
|
||||||
_depthBiasConstantFactor = constantFactor;
|
_depthBiasConstantFactor = constantFactor;
|
||||||
_depthBiasClamp = clamp;
|
_depthBiasClamp = clamp;
|
||||||
|
|
||||||
_depthBiasEnable = enable;
|
|
||||||
_dirty |= DirtyFlags.DepthBias;
|
_dirty |= DirtyFlags.DepthBias;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetDepthBiasEnable(bool enable)
|
||||||
|
{
|
||||||
|
_depthBiasEnable = enable;
|
||||||
|
_dirty |= DirtyFlags.DepthBiasEnable;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetScissor(int index, Rect2D scissor)
|
public void SetScissor(int index, Rect2D scissor)
|
||||||
{
|
{
|
||||||
_scissors[index] = scissor;
|
_scissors[index] = scissor;
|
||||||
|
@ -299,6 +305,11 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
RecordDepthTestBool(gd.ExtendedDynamicStateApi, commandBuffer);
|
RecordDepthTestBool(gd.ExtendedDynamicStateApi, commandBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_dirty.HasFlag(DirtyFlags.DepthBiasEnable))
|
||||||
|
{
|
||||||
|
RecordDepthBiasEnable(gd.ExtendedDynamicState2Api, commandBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
if (_dirty.HasFlag(DirtyFlags.DepthTestCompareOp))
|
if (_dirty.HasFlag(DirtyFlags.DepthTestCompareOp))
|
||||||
{
|
{
|
||||||
RecordDepthTestCompareOp(gd.ExtendedDynamicStateApi, commandBuffer);
|
RecordDepthTestCompareOp(gd.ExtendedDynamicStateApi, commandBuffer);
|
||||||
|
@ -349,19 +360,14 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
|
|
||||||
private readonly void RecordDepthBias(VulkanRenderer gd, CommandBuffer commandBuffer)
|
private readonly void RecordDepthBias(VulkanRenderer gd, CommandBuffer commandBuffer)
|
||||||
{
|
{
|
||||||
if (gd.Capabilities.SupportsExtendedDynamicState2)
|
|
||||||
{
|
|
||||||
gd.ExtendedDynamicState2Api.CmdSetDepthBiasEnable(commandBuffer, _depthBiasEnable);
|
|
||||||
|
|
||||||
if (!_depthBiasEnable)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gd.Api.CmdSetDepthBias(commandBuffer, _depthBiasConstantFactor, _depthBiasClamp, _depthBiasSlopeFactor);
|
gd.Api.CmdSetDepthBias(commandBuffer, _depthBiasConstantFactor, _depthBiasClamp, _depthBiasSlopeFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly void RecordDepthBiasEnable(ExtExtendedDynamicState2 gd, CommandBuffer commandBuffer)
|
||||||
|
{
|
||||||
|
gd.CmdSetDepthBiasEnable(commandBuffer, _depthBiasEnable);
|
||||||
|
}
|
||||||
|
|
||||||
private void RecordScissor(VulkanRenderer gd, CommandBuffer commandBuffer)
|
private void RecordScissor(VulkanRenderer gd, CommandBuffer commandBuffer)
|
||||||
{
|
{
|
||||||
if (ScissorsCount != 0)
|
if (ScissorsCount != 0)
|
||||||
|
|
Loading…
Reference in a new issue