From b27cb444f2981e31dea7769419ebc370b9870e04 Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Wed, 25 Jun 2025 10:23:42 +0200 Subject: [PATCH] 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 Reviewed-by: Olivia Lee Part-of: --- src/gallium/drivers/panfrost/pan_precomp.c | 3 ++- src/panfrost/libpan/libpan_dgc.h | 23 +++++++++++++++++++ src/panfrost/vulkan/jm/panvk_vX_cmd_precomp.c | 3 ++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_precomp.c b/src/gallium/drivers/panfrost/pan_precomp.c index 71ebd2af5f8..278ad280ee4 100644 --- a/src/gallium/drivers/panfrost/pan_precomp.c +++ b/src/gallium/drivers/panfrost/pan_precomp.c @@ -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; diff --git a/src/panfrost/libpan/libpan_dgc.h b/src/panfrost/libpan/libpan_dgc.h index 520271da2e8..e0cb7d7b276 100644 --- a/src/panfrost/libpan/libpan_dgc.h +++ b/src/panfrost/libpan/libpan_dgc.h @@ -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 \ No newline at end of file diff --git a/src/panfrost/vulkan/jm/panvk_vX_cmd_precomp.c b/src/panfrost/vulkan/jm/panvk_vX_cmd_precomp.c index 5e7103dac03..81f5fbafd95 100644 --- a/src/panfrost/vulkan/jm/panvk_vX_cmd_precomp.c +++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_precomp.c @@ -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); }