From c0f47b12fc7913a20c62b2f0dce126b4b87904be Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 12 Nov 2024 16:20:58 +0100 Subject: [PATCH] panvk/cs: Poison cmdbuf registers when PANVK_DEBUG=cs is set Poison all cmdbuf registers to make sure we don't inherit state from a previously executed cmdbuf. Signed-off-by: Boris Brezillon Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/panfrost/vulkan/csf/panvk_cmd_buffer.h | 4 ++++ src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h index efa495c7401..518668ae3e6 100644 --- a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h +++ b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h @@ -302,6 +302,10 @@ panvk_cs_reg_whitelist(frag_ctx, PANVK_CS_REG_RANGE(RUN_FRAGMENT_SR)); panvk_cs_reg_whitelist(vt_ctx, PANVK_CS_REG_RANGE(RUN_IDVS_SR)); #define cs_update_vt_ctx(__b) panvk_cs_reg_upd_ctx(__b, vt_ctx) +panvk_cs_reg_whitelist(cmdbuf_regs, {PANVK_CS_REG_RUN_IDVS_SR_START, + PANVK_CS_REG_SCRATCH_END}); +#define cs_update_cmdbuf_regs(__b) panvk_cs_reg_upd_ctx(__b, cmdbuf_regs) + struct panvk_tls_state { struct panfrost_ptr desc; struct pan_tls_info info; diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index 36d0ee79ef0..a2b5a750adb 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -161,6 +161,16 @@ finish_cs(struct panvk_cmd_buffer *cmdbuf, uint32_t subqueue) } } + if ((instance->debug_flags & PANVK_DEBUG_CS) && + cmdbuf->vk.level != VK_COMMAND_BUFFER_LEVEL_SECONDARY) { + cs_update_cmdbuf_regs(b) { + /* Poison all cmdbuf registers to make sure we don't inherit state from + * a previously executed cmdbuf. */ + for (uint32_t i = 0; i <= PANVK_CS_REG_SCRATCH_END; i++) + cs_move32_to(b, cs_reg32(b, i), 0xdead | i << 24); + } + } + cs_finish(&cmdbuf->state.cs[subqueue].builder); }