The depth values of all fragments generated by the rasterization of a
polygon can be offset by a single value that is computed for that polygon.
This behavior is controlled by the
depthBiasSlopeFactor members of
VkPipelineRasterizationStateCreateInfo, or by the corresponding
parameters to the
command if depth bias state is dynamic.
// Provided by VK_VERSION_1_0 void vkCmdSetDepthBias( VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
commandBufferis the command buffer into which the command will be recorded.
depthBiasConstantFactoris a scalar factor controlling the constant depth value added to each fragment.
depthBiasClampis the maximum (or minimum) depth bias of a fragment.
depthBiasSlopeFactoris a scalar factor applied to a fragment’s slope in depth bias calculations.
VK_FALSE at draw time, no depth bias is
applied and the fragment’s depth values are unchanged.
depthBiasSlopeFactor scales the maximum depth slope of the polygon,
depthBiasConstantFactor scales the minimum resolvable difference
of the depth buffer.
The resulting values are summed to produce the depth bias value which is
then clamped to a minimum or maximum value specified by
depthBiasClamp can each be positive, negative, or zero.
The maximum depth slope m of a triangle is
where (xf, yf, zf) is a point on the triangle. m may be approximated as
The minimum resolvable difference r is a parameter that depends on the
depth buffer representation.
It is the smallest difference in framebuffer coordinate z values that
is guaranteed to remain distinct throughout polygon rasterization and in the
All pairs of fragments generated by the rasterization of two polygons with
otherwise identical vertices, but
zf values that differ by
r, will have distinct depth values.
For fixed-point depth buffer representations, r is constant throughout the range of the entire depth buffer. Its value is implementation dependent but must be at most
r = 2 × 2-n
for an n-bit buffer. For floating-point depth buffers, there is no single minimum resolvable difference. In this case, the minimum resolvable difference for a given polygon is dependent on the maximum exponent, e, in the range of z values spanned by the primitive. If n is the number of bits in the floating-point mantissa, the minimum resolvable difference, r, for the given primitive is defined as
r = 2e-n
If a triangle is rasterized using the
VK_POLYGON_MODE_FILL_RECTANGLE_NV polygon mode, then this minimum
resolvable difference may not be resolvable for samples outside of the
triangle, where the depth is extrapolated.
If no depth buffer is present, r is undefined.
The bias value o for a polygon is
m is computed as described above. If the depth buffer uses a fixed-point representation, m is a function of depth values in the range [0,1], and o is applied to depth values in the same range.
For fixed-point depth buffers, fragment depth values are always limited to
the range [0,1] by clamping after depth bias addition is performed.
VK_EXT_depth_range_unrestricted extension is enabled,
fragment depth values are clamped even when the depth buffer uses a
For more information, see the Vulkan Specification
This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.