From cc517822e5de72f98afc9a1c44850118c61878f0 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Fri, 10 Jan 2025 16:03:49 +0100 Subject: [PATCH] panvk/csf: Make all sync operations on the CSG scope The SYSTEM scope triggers CPU interrupts we don't really need, so let's use the CSG scope to avoid those. Note that the scope doesn't encode the visibility aspect, meaning changes to the sync object with a CSG scope will still be instantly visible to the CPU, it's just that the CPU needs to poll the value to detect a change, which is basically what we're doing for syncobjs attached to events/queries, so we're good. Signed-off-by: Boris Brezillon Reviewed-by: Lars-Ivar Hesselberg Simonsen Reviewed-by: Benjamin Lee Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c | 2 +- src/panfrost/vulkan/csf/panvk_vX_cmd_event.c | 4 ++-- src/panfrost/vulkan/csf/panvk_vX_cmd_query.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index 7dc56190574..e30a4d60918 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -148,7 +148,7 @@ finish_cs(struct panvk_cmd_buffer *cmdbuf, uint32_t subqueue) offsetof(struct panvk_cs_sync32, error)); cs_wait_slots(b, SB_ALL_MASK, false); if (cmdbuf->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) - cs_sync32_add(b, true, MALI_CS_SYNC_SCOPE_SYSTEM, one, + cs_sync32_add(b, true, MALI_CS_SYNC_SCOPE_CSG, one, debug_sync_addr, cs_now()); cs_match(b, error, cmp_scratch) { cs_case(b, 0) { diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_event.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_event.c index df348dbecbb..2a312626453 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_event.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_event.c @@ -50,7 +50,7 @@ panvk_per_arch(CmdResetEvent2)(VkCommandBuffer commandBuffer, VkEvent _event, cs_default(b) { cs_move32_to(b, seqno, 0); - cs_sync32_set(b, false, MALI_CS_SYNC_SCOPE_SYSTEM, seqno, sync_addr, + cs_sync32_set(b, false, MALI_CS_SYNC_SCOPE_CSG, seqno, sync_addr, cs_defer(sb_mask | SB_MASK(DEFERRED_FLUSH), SB_ID(DEFERRED_SYNC))); } @@ -100,7 +100,7 @@ panvk_per_arch(CmdSetEvent2)(VkCommandBuffer commandBuffer, VkEvent _event, } cs_move32_to(b, seqno, 1); - cs_sync32_set(b, false, MALI_CS_SYNC_SCOPE_SYSTEM, seqno, sync_addr, + cs_sync32_set(b, false, MALI_CS_SYNC_SCOPE_CSG, seqno, sync_addr, cs_defer(sb_mask | SB_MASK(DEFERRED_FLUSH), SB_ID(DEFERRED_SYNC))); } diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_query.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_query.c index c50a160c327..45404cbb66f 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_query.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_query.c @@ -64,7 +64,7 @@ panvk_cmd_reset_occlusion_queries(struct panvk_cmd_buffer *cmd, for (uint32_t query = first_query; query < first_query + query_count; query++) { cs_move64_to(b, addr, panvk_query_available_dev_addr(pool, query)); - cs_sync32_set(b, true, MALI_CS_SYNC_SCOPE_SYSTEM, zero32, addr, + cs_sync32_set(b, true, MALI_CS_SYNC_SCOPE_CSG, zero32, addr, cs_defer(SB_IMM_MASK, SB_ID(DEFERRED_SYNC))); } } @@ -126,7 +126,7 @@ panvk_cmd_end_occlusion_query(struct panvk_cmd_buffer *cmd, /* We wait on any previous flush, and defer on sync */ cs_move64_to(b, sync_addr, panvk_query_available_dev_addr(pool, query)); - cs_sync32_set(b, true, MALI_CS_SYNC_SCOPE_SYSTEM, seqno, sync_addr, + cs_sync32_set(b, true, MALI_CS_SYNC_SCOPE_CSG, seqno, sync_addr, cs_defer(SB_MASK(DEFERRED_FLUSH), SB_ID(DEFERRED_SYNC))); }