anv: support depth bias enable dynamic state
Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10366>
This commit is contained in:
@@ -102,6 +102,7 @@ const struct anv_dynamic_state default_dynamic_state = {
|
||||
.dyn_vbo_size = 0,
|
||||
.color_writes = 0xff,
|
||||
.raster_discard = 0,
|
||||
.depth_bias_enable = 0,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -191,6 +192,7 @@ anv_dynamic_state_copy(struct anv_dynamic_state *dest,
|
||||
ANV_CMP_COPY(dyn_vbo_size, ANV_CMD_DIRTY_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE);
|
||||
|
||||
ANV_CMP_COPY(raster_discard, ANV_CMD_DIRTY_DYNAMIC_RASTERIZER_DISCARD_ENABLE);
|
||||
ANV_CMP_COPY(depth_bias_enable, ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE);
|
||||
|
||||
if (copy_mask & ANV_CMD_DIRTY_DYNAMIC_SAMPLE_LOCATIONS) {
|
||||
dest->sample_locations.samples = src->sample_locations.samples;
|
||||
@@ -518,6 +520,17 @@ void anv_CmdSetRasterizerDiscardEnableEXT(
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_RASTERIZER_DISCARD_ENABLE;
|
||||
}
|
||||
|
||||
void anv_CmdSetDepthBiasEnableEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBool32 depthBiasEnable)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
cmd_buffer->state.gfx.dynamic.depth_bias_enable = depthBiasEnable;
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE;
|
||||
}
|
||||
|
||||
void anv_CmdSetViewport(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstViewport,
|
||||
|
@@ -1996,6 +1996,12 @@ copy_non_dynamic_state(struct anv_graphics_pipeline *pipeline,
|
||||
pCreateInfo->pRasterizationState->rasterizerDiscardEnable;
|
||||
}
|
||||
|
||||
if (states & ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE) {
|
||||
assert(pCreateInfo->pRasterizationState);
|
||||
dynamic->depth_bias_enable =
|
||||
pCreateInfo->pRasterizationState->depthBiasEnable;
|
||||
}
|
||||
|
||||
/* Section 9.2 of the Vulkan 1.0.15 spec says:
|
||||
*
|
||||
* pColorBlendState is [...] NULL if the pipeline has rasterization
|
||||
|
@@ -2677,6 +2677,7 @@ struct anv_dynamic_state {
|
||||
bool depth_bounds_test_enable;
|
||||
bool stencil_test_enable;
|
||||
bool raster_discard;
|
||||
bool depth_bias_enable;
|
||||
bool dyn_vbo_stride;
|
||||
bool dyn_vbo_size;
|
||||
|
||||
|
@@ -746,9 +746,13 @@ emit_rs_state(struct anv_graphics_pipeline *pipeline,
|
||||
VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT;
|
||||
#endif
|
||||
|
||||
raster.GlobalDepthOffsetEnableSolid = rs_info->depthBiasEnable;
|
||||
raster.GlobalDepthOffsetEnableWireframe = rs_info->depthBiasEnable;
|
||||
raster.GlobalDepthOffsetEnablePoint = rs_info->depthBiasEnable;
|
||||
bool depth_bias_enable =
|
||||
dynamic_states & ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE ?
|
||||
0 : rs_info->depthBiasEnable;
|
||||
|
||||
raster.GlobalDepthOffsetEnableSolid = depth_bias_enable;
|
||||
raster.GlobalDepthOffsetEnableWireframe = depth_bias_enable;
|
||||
raster.GlobalDepthOffsetEnablePoint = depth_bias_enable;
|
||||
|
||||
#if GFX_VER == 7
|
||||
/* Gfx7 requires that we provide the depth format in 3DSTATE_SF so that it
|
||||
|
@@ -211,7 +211,8 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
ANV_CMD_DIRTY_DYNAMIC_LINE_WIDTH |
|
||||
ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS |
|
||||
ANV_CMD_DIRTY_DYNAMIC_CULL_MODE |
|
||||
ANV_CMD_DIRTY_DYNAMIC_FRONT_FACE)) {
|
||||
ANV_CMD_DIRTY_DYNAMIC_FRONT_FACE |
|
||||
ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE)) {
|
||||
uint32_t sf_dw[GENX(3DSTATE_SF_length)];
|
||||
struct GENX(3DSTATE_SF) sf = {
|
||||
GENX(3DSTATE_SF_header),
|
||||
@@ -222,6 +223,9 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
.GlobalDepthOffsetClamp = d->depth_bias.clamp,
|
||||
.FrontWinding = genX(vk_to_intel_front_face)[d->front_face],
|
||||
.CullMode = genX(vk_to_intel_cullmode)[d->cull_mode],
|
||||
.GlobalDepthOffsetEnableSolid = d->depth_bias_enable,
|
||||
.GlobalDepthOffsetEnableWireframe = d->depth_bias_enable,
|
||||
.GlobalDepthOffsetEnablePoint = d->depth_bias_enable,
|
||||
};
|
||||
GENX(3DSTATE_SF_pack)(NULL, sf_dw, &sf);
|
||||
|
||||
|
@@ -442,7 +442,8 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
if (cmd_buffer->state.gfx.dirty & (ANV_CMD_DIRTY_PIPELINE |
|
||||
ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS |
|
||||
ANV_CMD_DIRTY_DYNAMIC_CULL_MODE |
|
||||
ANV_CMD_DIRTY_DYNAMIC_FRONT_FACE)) {
|
||||
ANV_CMD_DIRTY_DYNAMIC_FRONT_FACE |
|
||||
ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS_ENABLE)) {
|
||||
uint32_t raster_dw[GENX(3DSTATE_RASTER_length)];
|
||||
struct GENX(3DSTATE_RASTER) raster = {
|
||||
GENX(3DSTATE_RASTER_header),
|
||||
@@ -451,6 +452,9 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
.GlobalDepthOffsetClamp = d->depth_bias.clamp,
|
||||
.CullMode = genX(vk_to_intel_cullmode)[d->cull_mode],
|
||||
.FrontWinding = genX(vk_to_intel_front_face)[d->front_face],
|
||||
.GlobalDepthOffsetEnableSolid = d->depth_bias_enable,
|
||||
.GlobalDepthOffsetEnableWireframe = d->depth_bias_enable,
|
||||
.GlobalDepthOffsetEnablePoint = d->depth_bias_enable,
|
||||
};
|
||||
GENX(3DSTATE_RASTER_pack)(NULL, raster_dw, &raster);
|
||||
anv_batch_emit_merge(&cmd_buffer->batch, raster_dw,
|
||||
|
Reference in New Issue
Block a user