From 14608f1469d6bffeb4418ea295128b9475644d8d Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Thu, 3 Jul 2025 11:00:24 +0200 Subject: [PATCH] panvk: Do not adjust job offset with base on CSF The JOB_OFFSET only actually affect the global id and not wg id. In NIR common, we assume that if base wg isn't supported, it means that global and wg id already contains it. To follow the convention around, we remove the offset to assume global id will need an offset added. Alone, this doesn't change functionality as we always lower away global id so far. Signed-off-by: Mary Guillemard Reviewed-by: Boris Brezillon Reviewed-by: Alyssa Rosenzweig Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c index 66abacb62fc..c756b91d71e 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_dispatch.c @@ -225,12 +225,15 @@ cmd_dispatch(struct panvk_cmd_buffer *cmdbuf, struct panvk_dispatch_info *info) } cs_move32_to(b, cs_sr_reg32(b, COMPUTE, WG_SIZE), wg_size.opaque[0]); - cs_move32_to(b, cs_sr_reg32(b, COMPUTE, JOB_OFFSET_X), - info->wg_base.x * shader->cs.local_size.x); - cs_move32_to(b, cs_sr_reg32(b, COMPUTE, JOB_OFFSET_Y), - info->wg_base.y * shader->cs.local_size.y); - cs_move32_to(b, cs_sr_reg32(b, COMPUTE, JOB_OFFSET_Z), - info->wg_base.z * shader->cs.local_size.z); + + /* global_id and wg_id in NIR are expected to have base_workgroup_id added. + * Because job offset doesn't apply to wg_id on Mali, we set this to 0. + * XXX: We could teach nir_lower_system_values how to handle Mali weird + * case. */ + cs_move32_to(b, cs_sr_reg32(b, COMPUTE, JOB_OFFSET_X), 0); + cs_move32_to(b, cs_sr_reg32(b, COMPUTE, JOB_OFFSET_Y), 0); + cs_move32_to(b, cs_sr_reg32(b, COMPUTE, JOB_OFFSET_Z), 0); + if (indirect) { /* Load parameters from indirect buffer and update workgroup count * registers and sysvals */