panfrost: Allow to pass job dependencies in grid for precomp JM

For indirect draws, we need to depends on some previous job in the chain
so we use the grid info to pass this.

Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Olivia Lee <olivia.lee@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35724>
This commit is contained in:
Mary Guillemard
2025-06-25 10:23:42 +02:00
committed by Marge Bot
parent 440e0c283c
commit b27cb444f2
3 changed files with 27 additions and 2 deletions
+2 -1
View File
@@ -312,7 +312,8 @@ GENX(panfrost_launch_precomp)(struct panfrost_batch *batch,
(barrier & PANLIB_BARRIER_JM_SUPPRESS_PREFETCH) != 0;
pan_jc_add_job(&batch->jm.jobs.vtc_jc, MALI_JOB_TYPE_COMPUTE, job_barrier,
suppress_prefetch, 0, 0, &job, false);
suppress_prefetch, grid.jm.local_dep, grid.jm.global_dep,
&job, false);
#else
struct cs_builder *b = batch->csf.cs.builder;
+23
View File
@@ -15,6 +15,13 @@ enum panlib_barrier {
struct panlib_precomp_grid {
uint32_t count[3];
union {
struct {
uint16_t local_dep;
uint16_t global_dep;
} jm;
};
};
static struct panlib_precomp_grid
@@ -23,10 +30,26 @@ panlib_3d(uint32_t x, uint32_t y, uint32_t z)
return (struct panlib_precomp_grid){.count = {x, y, z}};
}
static struct panlib_precomp_grid
panlib_3d_with_jm_deps(uint32_t x, uint32_t y, uint32_t z, uint16_t local_dep,
uint16_t global_dep)
{
return (struct panlib_precomp_grid){
.count = {x, y, z},
.jm = {local_dep, global_dep},
};
}
static struct panlib_precomp_grid
panlib_1d(uint32_t x)
{
return panlib_3d(x, 1, 1);
}
static struct panlib_precomp_grid
panlib_1d_with_jm_deps(uint32_t x, uint16_t local_dep, uint16_t global_dep)
{
return panlib_3d_with_jm_deps(x, 1, 1, local_dep, global_dep);
}
#endif
@@ -78,5 +78,6 @@ panvk_per_arch(dispatch_precomp)(struct panvk_precomp_ctx *ctx,
(barrier & PANLIB_BARRIER_JM_SUPPRESS_PREFETCH) != 0;
pan_jc_add_job(&batch->vtc_jc, MALI_JOB_TYPE_COMPUTE, job_barrier,
suppress_prefetch, 0, 0, &job, false);
suppress_prefetch, grid.jm.local_dep, grid.jm.global_dep,
&job, false);
}