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