panvk: Use NEXT_SB_ENTRY on v11+ and prepare for indirect wait
Now that cs_next_iter_sb match NEXT_SB_ENTRY behavior, we can just implement it with it. We also setup the scoreboard wait mask when selecting the next scoreboard entry to prepare for defer indirect wait and signal usage around the codebase. 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:
committed by
Marge Bot
parent
9d1d6c75fe
commit
236dcccedb
@@ -617,6 +617,30 @@ panvk_per_arch(CmdPipelineBarrier2)(VkCommandBuffer commandBuffer,
|
||||
}
|
||||
}
|
||||
|
||||
#if PAN_ARCH >= 11
|
||||
void
|
||||
panvk_per_arch(cs_next_iter_sb)(struct panvk_cmd_buffer *cmdbuf,
|
||||
enum panvk_subqueue_id subqueue,
|
||||
struct cs_index scratch_regs)
|
||||
{
|
||||
struct cs_builder *b = panvk_get_cs_builder(cmdbuf, subqueue);
|
||||
struct cs_index iter_sb = cs_extract32(b, scratch_regs, 0);
|
||||
struct cs_index sb_wait_mask = cs_extract32(b, scratch_regs, 1);
|
||||
|
||||
/* Wait for scoreboard to be available and select the next scoreboard entry */
|
||||
cs_next_sb_entry(b, iter_sb, MALI_CS_SCOREBOARD_TYPE_ENDPOINT,
|
||||
MALI_CS_NEXT_SB_ENTRY_FORMAT_INDEX);
|
||||
|
||||
/* Setup indirect scoreboard wait mask now for indirect defer */
|
||||
cs_move32_to(b, sb_wait_mask, 0);
|
||||
cs_bit_set32(b, sb_wait_mask, sb_wait_mask, iter_sb);
|
||||
cs_set_state(b, MALI_CS_SET_STATE_TYPE_SB_MASK_WAIT, sb_wait_mask);
|
||||
|
||||
cs_store32(b, iter_sb, cs_subqueue_ctx_reg(b),
|
||||
offsetof(struct panvk_cs_subqueue_context, iter_sb));
|
||||
cs_flush_stores(b);
|
||||
}
|
||||
#else
|
||||
void
|
||||
panvk_per_arch(cs_next_iter_sb)(struct panvk_cmd_buffer *cmdbuf,
|
||||
enum panvk_subqueue_id subqueue,
|
||||
@@ -656,6 +680,7 @@ panvk_per_arch(cs_next_iter_sb)(struct panvk_cmd_buffer *cmdbuf,
|
||||
offsetof(struct panvk_cs_subqueue_context, iter_sb));
|
||||
cs_flush_stores(b);
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct cs_buffer
|
||||
alloc_cs_buffer(void *cookie)
|
||||
|
||||
@@ -428,6 +428,8 @@ init_subqueue(struct panvk_queue *queue, enum panvk_subqueue_id subqueue)
|
||||
#if PAN_ARCH >= 11
|
||||
cs_set_state_imm32(&b, MALI_CS_SET_STATE_TYPE_SB_SEL_ENDPOINT, SB_ITER(0));
|
||||
cs_set_state_imm32(&b, MALI_CS_SET_STATE_TYPE_SB_SEL_OTHER, SB_ID(LS));
|
||||
cs_set_state_imm32(&b, MALI_CS_SET_STATE_TYPE_SB_SEL_DEFERRED, SB_ID(DEFERRED_SYNC));
|
||||
cs_set_state_imm32(&b, MALI_CS_SET_STATE_TYPE_SB_MASK_STREAM, dev->csf.sb.all_iters_mask);
|
||||
#else
|
||||
cs_set_scoreboard_entry(&b, SB_ITER(0), SB_ID(LS));
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user