pan/desc: Prepare things for fragment job chaining

Right now we assume the fragment job chain contains only one job, but
with multilayer/multiview rendering, we want to submit fragment jobs
for all layers at once.

Turn pan_emit_fragment_job() into pan_emit_fragment_job_payload() and
delegate the job header packing to the caller.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29450>
This commit is contained in:
Boris Brezillon 2024-03-02 11:13:44 +01:00 committed by Marge Bot
parent c694556657
commit 629b9258df
4 changed files with 20 additions and 12 deletions

View file

@ -249,7 +249,13 @@ GENX(jm_emit_fragment_job)(struct panfrost_batch *batch,
struct panfrost_ptr transfer =
pan_pool_alloc_desc(&batch->pool.base, FRAGMENT_JOB);
GENX(pan_emit_fragment_job)(pfb, batch->framebuffer.gpu, transfer.cpu);
GENX(pan_emit_fragment_job_payload)
(pfb, batch->framebuffer.gpu, transfer.cpu);
pan_section_pack(transfer.cpu, FRAGMENT_JOB, HEADER, header) {
header.type = MALI_JOB_TYPE_FRAGMENT;
header.index = 1;
}
batch->jm.jobs.frag = transfer.gpu;
}

View file

@ -941,14 +941,9 @@ GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
#if PAN_ARCH <= 9
void
GENX(pan_emit_fragment_job)(const struct pan_fb_info *fb, mali_ptr fbd,
void *out)
GENX(pan_emit_fragment_job_payload)(const struct pan_fb_info *fb, mali_ptr fbd,
void *out)
{
pan_section_pack(out, FRAGMENT_JOB, HEADER, header) {
header.type = MALI_JOB_TYPE_FRAGMENT;
header.index = 1;
}
pan_section_pack(out, FRAGMENT_JOB, PAYLOAD, payload) {
payload.bound_min_x = fb->extent.minx >> MALI_TILE_SHIFT;
payload.bound_min_y = fb->extent.miny >> MALI_TILE_SHIFT;

View file

@ -185,8 +185,8 @@ unsigned GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
void *out);
#if PAN_ARCH <= 9
void GENX(pan_emit_fragment_job)(const struct pan_fb_info *fb, mali_ptr fbd,
void *out);
void GENX(pan_emit_fragment_job_payload)(const struct pan_fb_info *fb,
mali_ptr fbd, void *out);
#endif
#endif /* ifdef PAN_ARCH */

View file

@ -69,8 +69,15 @@ panvk_cmd_prepare_fragment_job(struct panvk_cmd_buffer *cmdbuf)
struct panfrost_ptr job_ptr =
pan_pool_alloc_desc(&cmdbuf->desc_pool.base, FRAGMENT_JOB);
GENX(pan_emit_fragment_job)
(fbinfo, batch->fb.desc.gpu, job_ptr.cpu), batch->fragment_job = job_ptr.gpu;
GENX(pan_emit_fragment_job_payload)
(fbinfo, batch->fb.desc.gpu, job_ptr.cpu);
pan_section_pack(job_ptr.cpu, FRAGMENT_JOB, HEADER, header) {
header.type = MALI_JOB_TYPE_FRAGMENT;
header.index = 1;
}
batch->fragment_job = job_ptr.gpu;
util_dynarray_append(&batch->jobs, void *, job_ptr.cpu);
}