From 75968398f37c91a14c0eaafcd16e24a8bf59ec11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tapani=20P=C3=A4lli?= Date: Mon, 27 Feb 2023 13:19:26 +0200 Subject: [PATCH] anv: emit 3DSTATE_HS for each primitive on gfx12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is Wa_16011107343, same workaround as commit 880a3efe6c2 but for gfx12. Signed-off-by: Tapani Pälli Reviewed-by: Lionel Landwerlin Part-of: --- 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,