- add depth bias

This commit is contained in:
Magnus Norddahl 2019-03-04 00:14:28 +01:00
parent cf49e1ec21
commit eaf367e876
5 changed files with 25 additions and 1 deletions

View file

@ -245,7 +245,7 @@ void VkRenderPassSetup::CreatePipeline(const VkRenderPassKey &key)
builder.addDynamicState(VK_DYNAMIC_STATE_VIEWPORT);
builder.addDynamicState(VK_DYNAMIC_STATE_SCISSOR);
// builder.addDynamicState(VK_DYNAMIC_STATE_LINE_WIDTH);
// builder.addDynamicState(VK_DYNAMIC_STATE_DEPTH_BIAS);
builder.addDynamicState(VK_DYNAMIC_STATE_DEPTH_BIAS);
// builder.addDynamicState(VK_DYNAMIC_STATE_BLEND_CONSTANTS);
// builder.addDynamicState(VK_DYNAMIC_STATE_DEPTH_BOUNDS);
// builder.addDynamicState(VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK);
@ -296,6 +296,7 @@ void VkRenderPassSetup::CreatePipeline(const VkRenderPassKey &key)
builder.setDepthStencilEnable(key.DepthTest, key.DepthWrite, key.StencilTest);
builder.setDepthFunc(depthfunc2vk[key.DepthFunc]);
builder.setDepthClampEnable(key.DepthClamp);
builder.setDepthBias(key.DepthBias, 0.0f, 0.0f, 0.0f);
builder.setCull(key.CullMode == Cull_None ? VK_CULL_MODE_NONE : VK_CULL_MODE_FRONT_AND_BACK, key.CullMode == Cull_CW ? VK_FRONT_FACE_CLOCKWISE : VK_FRONT_FACE_COUNTER_CLOCKWISE);
builder.setColorWriteMask((VkColorComponentFlagBits)key.ColorMask);
builder.setStencil(VK_STENCIL_OP_KEEP, op2vk[key.StencilPassOp], VK_STENCIL_OP_KEEP, VK_COMPARE_OP_EQUAL, 0xffffffff, 0xffffffff, 0);

View file

@ -19,6 +19,7 @@ public:
int DepthTest;
int DepthFunc;
int DepthClamp;
int DepthBias;
int StencilTest;
int StencilPassOp;
int ColorMask;

View file

@ -222,6 +222,7 @@ void VkRenderState::Apply(int dt)
ApplyScissor();
ApplyViewport();
ApplyStencilRef();
ApplyDepthBias();
ApplyStreamData();
ApplyMatrices();
ApplyPushConstants();
@ -231,6 +232,15 @@ void VkRenderState::Apply(int dt)
mNeedApply = false;
}
void VkRenderState::ApplyDepthBias()
{
if (mBias.mChanged)
{
mCommandBuffer->setDepthBias(mBias.mUnits, 0.0f, mBias.mFactor);
mBias.mChanged = false;
}
}
void VkRenderState::ApplyRenderPass(int dt)
{
auto fb = GetVulkanFrameBuffer();
@ -245,6 +255,7 @@ void VkRenderState::ApplyRenderPass(int dt)
passKey.DepthWrite = mDepthTest && mDepthWrite;
passKey.DepthFunc = mDepthFunc;
passKey.DepthClamp = mDepthClamp;
passKey.DepthBias = !(mBias.mFactor == 0 && mBias.mUnits == 0);
passKey.StencilTest = mStencilTest;
passKey.StencilPassOp = mStencilOp;
passKey.ColorMask = mColorMask;
@ -273,6 +284,7 @@ void VkRenderState::ApplyRenderPass(int dt)
mScissorChanged = true;
mViewportChanged = true;
mStencilRefChanged = true;
mBias.mChanged = true;
}
else if (changingRenderPass)
{

View file

@ -48,6 +48,7 @@ private:
void Apply(int dt);
void ApplyRenderPass(int dt);
void ApplyStencilRef();
void ApplyDepthBias();
void ApplyScissor();
void ApplyViewport();
void ApplyStreamData();

View file

@ -189,6 +189,7 @@ public:
void setDepthStencilEnable(bool test, bool write, bool stencil);
void setDepthFunc(VkCompareOp func);
void setDepthClampEnable(bool value);
void setDepthBias(bool enable, float biasConstantFactor, float biasClamp, float biasSlopeFactor);
void setColorWriteMask(VkColorComponentFlags mask);
void setStencil(VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp, uint32_t compareMask, uint32_t writeMask, uint32_t reference);
@ -806,6 +807,14 @@ inline void GraphicsPipelineBuilder::setDepthClampEnable(bool value)
rasterizer.depthClampEnable = value ? VK_TRUE : VK_FALSE;
}
inline void GraphicsPipelineBuilder::setDepthBias(bool enable, float biasConstantFactor, float biasClamp, float biasSlopeFactor)
{
rasterizer.depthBiasEnable = enable ? VK_TRUE : VK_FALSE;
rasterizer.depthBiasConstantFactor = biasConstantFactor;
rasterizer.depthBiasClamp = biasClamp;
rasterizer.depthBiasSlopeFactor = biasSlopeFactor;
}
inline void GraphicsPipelineBuilder::setColorWriteMask(VkColorComponentFlags mask)
{
colorBlendAttachment.colorWriteMask = mask;