From 10533e7b4cbbaca7c01a7e9a59ff4c20173710f6 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 7 Aug 2024 11:17:59 +0300 Subject: [PATCH] anv/blorp: force CC_VIEWPORT reallocation when programming 3DSTATE_VIEWPORT_STATE_POINTERS_CC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lionel Landwerlin Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11647 Fixes: fe1baa6481 ("anv: reduce blorp dynamic state emissions") Reviewed-by: Tapani Pälli Part-of: --- src/intel/blorp/blorp_genX_exec_brw.h | 5 ++++- src/intel/vulkan/genX_gfx_state.c | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/intel/blorp/blorp_genX_exec_brw.h b/src/intel/blorp/blorp_genX_exec_brw.h index 8bc4c7c88c8..59133699f08 100644 --- a/src/intel/blorp/blorp_genX_exec_brw.h +++ b/src/intel/blorp/blorp_genX_exec_brw.h @@ -593,7 +593,10 @@ blorp_emit_cc_viewport(struct blorp_batch *batch) { uint32_t cc_vp_offset; - if (batch->blorp->config.use_cached_dynamic_states) { + /* Somehow reusing CC_VIEWPORT on Gfx9 is causing issues : + * https://gitlab.freedesktop.org/mesa/mesa/-/issues/11647 + */ + if (GFX_VER != 9 && batch->blorp->config.use_cached_dynamic_states) { cc_vp_offset = blorp_get_dynamic_state(batch, BLORP_DYNAMIC_STATE_CC_VIEWPORT); } else { blorp_emit_dynamic(batch, GENX(CC_VIEWPORT), vp, 32, &cc_vp_offset) { diff --git a/src/intel/vulkan/genX_gfx_state.c b/src/intel/vulkan/genX_gfx_state.c index 0513f792e81..632611ec0ea 100644 --- a/src/intel/vulkan/genX_gfx_state.c +++ b/src/intel/vulkan/genX_gfx_state.c @@ -1840,7 +1840,13 @@ cmd_buffer_gfx_state_emission(struct anv_cmd_buffer *cmd_buffer) } } - if (BITSET_TEST(hw_state->dirty, ANV_GFX_STATE_VIEWPORT_CC)) { + /* Force CC_VIEWPORT reallocation on Gfx9 when reprogramming + * 3DSTATE_VIEWPORT_STATE_POINTERS_CC : + * https://gitlab.freedesktop.org/mesa/mesa/-/issues/11647 + */ + if (BITSET_TEST(hw_state->dirty, ANV_GFX_STATE_VIEWPORT_CC) || + (GFX_VER == 9 && + BITSET_TEST(hw_state->dirty, ANV_GFX_STATE_VIEWPORT_CC_PTR))) { hw_state->vp_cc.state = anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, hw_state->vp_cc.count * 8, 32);