Mesa (main): anv: support depth bias enable dynamic state
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 4 13:16:29 UTC 2021
Module: Mesa
Branch: main
Commit: 496b5084035360353f1d73a92fd3bb55aa772661
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=496b5084035360353f1d73a92fd3bb55aa772661
Author: Tapani Pälli <tapani.palli at intel.com>
Date: Thu Apr 22 14:51:41 2021 +0300
anv: support depth bias enable dynamic state
Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10366>
---
src/intel/vulkan/anv_cmd_buffer.c | 13 +++++++++++++
src/intel/vulkan/anv_pipeline.c | 6 ++++++
src/intel/vulkan/anv_private.h | 1 +
src/intel/vulkan/genX_pipeline.c | 10 +++++++---
src/intel/vulkan/gfx7_cmd_buffer.c | 6 +++++-
src/intel/vulkan/gfx8_cmd_buffer.c | 6 +++++-
6 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
index 2ade35a7be5..6c5a7d0c457 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -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,
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 1c64e0208a8..d5b3522614d 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -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
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index c6e3bc867c9..e947fb8ee02 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -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;
diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c
index 3f3c00ffb4a..ee7e336fec2 100644
--- a/src/intel/vulkan/genX_pipeline.c
+++ b/src/intel/vulkan/genX_pipeline.c
@@ -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
diff --git a/src/intel/vulkan/gfx7_cmd_buffer.c b/src/intel/vulkan/gfx7_cmd_buffer.c
index 421967eace1..2e5ccb22c44 100644
--- a/src/intel/vulkan/gfx7_cmd_buffer.c
+++ b/src/intel/vulkan/gfx7_cmd_buffer.c
@@ -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);
diff --git a/src/intel/vulkan/gfx8_cmd_buffer.c b/src/intel/vulkan/gfx8_cmd_buffer.c
index 67a8a2eace1..9601ddc455b 100644
--- a/src/intel/vulkan/gfx8_cmd_buffer.c
+++ b/src/intel/vulkan/gfx8_cmd_buffer.c
@@ -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,
More information about the mesa-commit
mailing list