From 0fb9573c57f50b064e8a4fb148ef3845313de072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Mon, 28 Feb 2022 14:22:09 +0100 Subject: [PATCH] ac/nir/taskmesh: Preserve workgroup ID Y and Z when applying firstTask. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NV_mesh_shader workgroups are only 1 dimensional, so it's OK to only add firstTask to the X dimension. However, let's keep the Y and Z dimensions so this doesn't mess up the workgroup ID for future 3 dimensional task shader dispatches. Signed-off-by: Timur Kristóf Reviewed-by: Rhys Perry Part-of: --- src/amd/common/ac_nir_lower_taskmesh_io_to_mem.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/amd/common/ac_nir_lower_taskmesh_io_to_mem.c b/src/amd/common/ac_nir_lower_taskmesh_io_to_mem.c index 5bcb97a6ea7..fa4f53b39f4 100644 --- a/src/amd/common/ac_nir_lower_taskmesh_io_to_mem.c +++ b/src/amd/common/ac_nir_lower_taskmesh_io_to_mem.c @@ -124,10 +124,12 @@ ac_nir_apply_first_task_to_task_shader(nir_shader *shader) nir_pop_if(b, if_stride); first_task = nir_if_phi(b, first_task, zero); - /* NV_mesh_shader workgroups are 1 dimensional so we only care about X here. */ + /* NV_mesh_shader workgroups are 1 dimensional. + * Apply firstTask to the X dimension, but leave Y and Z intact. + */ nir_ssa_def *hw_workgroup_id = nir_load_workgroup_id(b, 32); nir_ssa_def *api_workgroup_id_x = nir_iadd(b, nir_channel(b, hw_workgroup_id, 0), first_task); - nir_ssa_def *api_workgroup_id = nir_vec3(b, api_workgroup_id_x, zero, zero); + nir_ssa_def *api_workgroup_id = nir_vector_insert_imm(b, hw_workgroup_id, api_workgroup_id_x, 0); add_first_task_to_workgroup_id_state state = { .hw_workgroup_id = hw_workgroup_id,