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 <mary.guillemard@collabora.com>
Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35307>
This commit is contained in:
Mary Guillemard 2025-06-03 10:09:38 +02:00 committed by Marge Bot
parent 0d3e8fa536
commit e23612d0a9
6 changed files with 9 additions and 8 deletions

View file

@ -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

View file

@ -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)); \
}

View file

@ -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)); \

View file

@ -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) { \

View file

@ -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)); \

View file

@ -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),
};