anv: emit 3DSTATE_HS for each primitive on gfx12

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

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/21551>
This commit is contained in:
Tapani Pälli 2023-02-27 13:19:26 +02:00 committed by Marge Bot
parent df9f71d795
commit 75968398f3

View file

@ -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; cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty;
} }
/* Wa_1306463417 - Send HS state for every primitive on gfx11. */ /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive. */
if (cmd_buffer->state.gfx.dirty & ANV_CMD_DIRTY_PIPELINE || GFX_VER == 11) { if (cmd_buffer->state.gfx.dirty & ANV_CMD_DIRTY_PIPELINE ||
(GFX_VER == 11 || GFX_VER == 12)) {
genX(emit_hs)(cmd_buffer); 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; 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 /* 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, if (anv_pipeline_has_stage(cmd_buffer->state.gfx.pipeline,
MESA_SHADER_TESS_CTRL)) { MESA_SHADER_TESS_CTRL)) {
@ -4201,10 +4202,10 @@ void genX(CmdDrawMultiEXT)(
#else #else
vk_foreach_multi_draw(draw, i, pVertexInfo, drawCount, stride) { vk_foreach_multi_draw(draw, i, pVertexInfo, drawCount, stride) {
/* Wa_1306463417 - Send HS state for every primitive, first /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
* one was handled by cmd_buffer_flush_gfx_state. * 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); genX(emit_hs)(cmd_buffer);
anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE_EXTENDED), prim) { anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE_EXTENDED), prim) {
@ -4408,10 +4409,10 @@ void genX(CmdDrawMultiIndexedEXT)(
#else #else
vk_foreach_multi_draw_indexed(draw, i, pIndexInfo, drawCount, stride) { vk_foreach_multi_draw_indexed(draw, i, pIndexInfo, drawCount, stride) {
/* Wa_1306463417 - Send HS state for every primitive, first /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
* one was handled by cmd_buffer_flush_gfx_state. * 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); genX(emit_hs)(cmd_buffer);
anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE_EXTENDED), prim) { 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); load_indirect_parameters(cmd_buffer, draw, indexed, i);
/* Wa_1306463417 - Send HS state for every primitive HS, first /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
* one was handled by cmd_buffer_flush_gfx_state. * 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); genX(emit_hs)(cmd_buffer);
anv_batch_emit(&cmd_buffer->batch, 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); load_indirect_parameters(cmd_buffer, draw, indexed, i);
/* Wa_1306463417 - Send HS state for every primitive HS, first /* Wa_1306463417, Wa_16011107343 - Send HS state for every primitive,
* one was handled by cmd_buffer_flush_gfx_state. * 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); genX(emit_hs)(cmd_buffer);
anv_batch_emit(&cmd_buffer->batch, anv_batch_emit(&cmd_buffer->batch,