Module: Mesa
Branch: main
Commit: 75968398f37c91a14c0eaafcd16e24a8bf59ec11
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=75968398f37c91a14c0eaafcd16e24a8bf59ec11

Author: Tapani Pälli <[email protected]>
Date:   Mon Feb 27 13:19:26 2023 +0200

anv: emit 3DSTATE_HS for each primitive on gfx12

This is Wa_16011107343, same workaround as commit 880a3efe6c2
but for gfx12.

Signed-off-by: Tapani Pälli <[email protected]>
Reviewed-by: Lionel Landwerlin <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21551>

---

 src/intel/vulkan/genX_cmd_buffer.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/intel/vulkan/genX_cmd_buffer.c 
b/src/intel/vulkan/genX_cmd_buffer.c
index 7f01a77c8da..1af7dff8aca 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -3391,8 +3391,9 @@ genX(cmd_buffer_flush_gfx_state)(struct anv_cmd_buffer 
*cmd_buffer)
       cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty;
    }
 
-   /* Wa_1306463417 - Send HS state for every primitive on gfx11. */
-   if (cmd_buffer->state.gfx.dirty & ANV_CMD_DIRTY_PIPELINE || GFX_VER == 11) {
+   /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive. */
+   if (cmd_buffer->state.gfx.dirty & ANV_CMD_DIRTY_PIPELINE ||
+       (GFX_VER == 11 || GFX_VER == 12)) {
       genX(emit_hs)(cmd_buffer);
    }
 
@@ -3555,9 +3556,9 @@ anv_use_generated_draws(const struct anv_cmd_buffer 
*cmd_buffer, uint32_t count)
 {
    const struct anv_device *device = cmd_buffer->device;
 
-#if GFX_VER == 11
+#if GFX_VER == 11 || GFX_VER == 12
    /* Limit generated draws to pipelines without HS stage. This makes things
-    * simpler for implementing Wa_1306463417.
+    * simpler for implementing Wa_1306463417, Wa_16011107343.
     */
    if (anv_pipeline_has_stage(cmd_buffer->state.gfx.pipeline,
                              MESA_SHADER_TESS_CTRL)) {
@@ -4201,10 +4202,10 @@ void genX(CmdDrawMultiEXT)(
 #else
    vk_foreach_multi_draw(draw, i, pVertexInfo, drawCount, stride) {
 
-      /* Wa_1306463417 - Send HS state for every primitive, first
-       * one was handled by cmd_buffer_flush_gfx_state.
+      /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
+       * first one was handled by cmd_buffer_flush_gfx_state.
        */
-      if (i && GFX_VER == 11)
+      if (i && (GFX_VER == 11 || GFX_VER == 12))
          genX(emit_hs)(cmd_buffer);
 
       anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE_EXTENDED), prim) {
@@ -4408,10 +4409,10 @@ void genX(CmdDrawMultiIndexedEXT)(
 #else
    vk_foreach_multi_draw_indexed(draw, i, pIndexInfo, drawCount, stride) {
 
-      /* Wa_1306463417 - Send HS state for every primitive, first
-       * one was handled by cmd_buffer_flush_gfx_state.
+      /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
+       * first one was handled by cmd_buffer_flush_gfx_state.
        */
-      if (i && GFX_VER == 11)
+      if (i && (GFX_VER == 11 || GFX_VER == 12))
          genX(emit_hs)(cmd_buffer);
 
       anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE_EXTENDED), prim) {
@@ -4658,10 +4659,10 @@ emit_indirect_draws(struct anv_cmd_buffer *cmd_buffer,
 
       load_indirect_parameters(cmd_buffer, draw, indexed, i);
 
-      /* Wa_1306463417 - Send HS state for every primitive HS, first
-       * one was handled by cmd_buffer_flush_gfx_state.
+      /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
+       * first one was handled by cmd_buffer_flush_gfx_state.
        */
-      if (i && GFX_VER == 11)
+      if (i && (GFX_VER == 11 || GFX_VER == 12))
          genX(emit_hs)(cmd_buffer);
 
       anv_batch_emit(&cmd_buffer->batch,
@@ -4892,10 +4893,10 @@ emit_indirect_count_draws(struct anv_cmd_buffer 
*cmd_buffer,
 
       load_indirect_parameters(cmd_buffer, draw, indexed, i);
 
-      /* Wa_1306463417 - Send HS state for every primitive HS, first
-       * one was handled by cmd_buffer_flush_gfx_state.
+      /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
+       * first one was handled by cmd_buffer_flush_gfx_state.
        */
-      if (i && GFX_VER == 11)
+      if (i && (GFX_VER == 11 || GFX_VER == 12))
          genX(emit_hs)(cmd_buffer);
 
       anv_batch_emit(&cmd_buffer->batch,

Reply via email to