From e23612d0a98468d230fe487a10f7ceef15d5d909 Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Tue, 3 Jun 2025 10:09:38 +0200 Subject: [PATCH] panvk: Rework iter_sb to be the scoreboard directly This patch changes iter_sb to contains the actual scoreboard info instead of the index in the iter range. This is required to handle NEXT_SB_ENTRY on v11+. Signed-off-by: Mary Guillemard Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/panfrost/vulkan/csf/panvk_cmd_buffer.h | 5 +++-- src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c | 2 +- src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c | 2 +- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 4 ++-- src/panfrost/vulkan/csf/panvk_vX_cmd_precomp.c | 2 +- src/panfrost/vulkan/csf/panvk_vX_queue.c | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h index dda25f0f858..3f7d9337790 100644 --- a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h +++ b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h @@ -387,11 +387,12 @@ VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, vk.base, VkCommandBuffer, VK_OBJECT_TYPE_COMMAND_BUFFER) static inline uint32_t -next_iter_sb(struct panvk_cmd_buffer *cmdbuf, uint32_t sb) +next_iter_sb(struct panvk_cmd_buffer *cmdbuf, uint32_t iter_sb_idx) { struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device); - return sb + 1 < dev->csf.sb.iter_count ? sb + 1 : 0; + return iter_sb_idx + 1 < dev->csf.sb.iter_count ? SB_ITER(iter_sb_idx + 1) + : SB_ITER(0); } static bool diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index b9076b52f30..5579d200339 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -630,7 +630,7 @@ panvk_per_arch(cs_pick_iter_sb)(struct panvk_cmd_buffer *cmdbuf, cs_match(b, iter_sb, cmp_scratch) { #define CASE(x) \ - cs_case(b, x) { \ + cs_case(b, SB_ITER(x)) { \ cs_wait_slot(b, SB_ITER(x)); \ cs_select_sb_entries_for_async_ops(b, SB_ITER(x)); \ } diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c index 0b73a626e9b..6ae2fdb9ffc 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c @@ -311,7 +311,7 @@ cmd_dispatch(struct panvk_cmd_buffer *cmdbuf, struct panvk_dispatch_info *info) cs_match(b, iter_sb, cmp_scratch) { #define CASE(x) \ - cs_case(b, x) { \ + cs_case(b, SB_ITER(x)) { \ cs_sync64_add(b, true, MALI_CS_SYNC_SCOPE_CSG, add_val, sync_addr, \ cs_defer(SB_WAIT_ITER(x), SB_ID(DEFERRED_SYNC))); \ cs_move32_to(b, iter_sb, next_iter_sb(cmdbuf, x)); \ diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index cd738cc5cf8..e07a88222dd 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -2870,7 +2870,7 @@ flush_tiling(struct panvk_cmd_buffer *cmdbuf) cs_match(b, iter_sb, cmp_scratch) { #define CASE(x) \ - cs_case(b, x) { \ + cs_case(b, SB_ITER(x)) { \ cs_heap_operation(b, MALI_CS_HEAP_OPERATION_VERTEX_TILER_COMPLETED, \ cs_defer(SB_WAIT_ITER(x), SB_ID(DEFERRED_SYNC))); \ cs_sync64_add(b, true, MALI_CS_SYNC_SCOPE_CSG, add_val, sync_addr, \ @@ -3123,7 +3123,7 @@ issue_fragment_jobs(struct panvk_cmd_buffer *cmdbuf) cs_match(b, iter_sb, cmp_scratch) { #define CASE(x) \ - cs_case(b, x) { \ + cs_case(b, SB_ITER(x)) { \ const struct cs_async_op async = \ cs_defer(SB_WAIT_ITER(x), SB_ID(DEFERRED_SYNC)); \ if (td_count == 1) { \ diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_precomp.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_precomp.c index 7414885cce7..537d943bd8e 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_precomp.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_precomp.c @@ -129,7 +129,7 @@ panvk_per_arch(dispatch_precomp)(struct panvk_precomp_ctx *ctx, cs_match(b, iter_sb, cmp_scratch) { #define CASE(x) \ - cs_case(b, x) { \ + cs_case(b, SB_ITER(x)) { \ cs_sync64_add(b, true, MALI_CS_SYNC_SCOPE_CSG, add_val, sync_addr, \ cs_defer(SB_WAIT_ITER(x), SB_ID(DEFERRED_SYNC))); \ cs_move32_to(b, iter_sb, next_iter_sb(cmdbuf, x)); \ diff --git a/src/panfrost/vulkan/csf/panvk_vX_queue.c b/src/panfrost/vulkan/csf/panvk_vX_queue.c index 86e50d98366..35a46d99d7a 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_queue.c +++ b/src/panfrost/vulkan/csf/panvk_vX_queue.c @@ -395,7 +395,7 @@ init_subqueue(struct panvk_queue *queue, enum panvk_subqueue_id subqueue) .syncobjs = panvk_priv_mem_dev_addr(queue->syncobjs), .debug.syncobjs = panvk_priv_mem_dev_addr(queue->debug_syncobjs), .debug.tracebuf.cs = subq->tracebuf.addr.dev, - .iter_sb = 0, + .iter_sb = SB_ITER(0), .reg_dump_addr = panvk_priv_mem_dev_addr(subq->regs_save), };