Module: Mesa Branch: main Commit: 7ead9c4bb11e79796fe7b016f358a4d24d2a38e7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7ead9c4bb11e79796fe7b016f358a4d24d2a38e7
Author: Marek Olšák <marek.ol...@amd.com> Date: Tue Oct 24 07:11:34 2023 -0400 radeonsi: restructure blocks in si_setup_nir_user_data From: if (sel->info.uses_grid_size) { if (sctx->screen->info.has_set_sh_pairs_packed) ... ... else ... } if (sel->info.uses_variable_block_size) { if (sctx->screen->info.has_set_sh_pairs_packed) ... ... else ... } if (sel->info.base.cs.user_data_components_amd) { if (sctx->screen->info.has_set_sh_pairs_packed) ... ... else ... } To: if (sctx->screen->info.has_set_sh_pairs_packed) { if (sel->info.uses_grid_size) ... if (sel->info.uses_variable_block_size) ... if (sel->info.base.cs.user_data_components_amd) ... } else { if (sel->info.uses_grid_size) ... if (sel->info.uses_variable_block_size) ... if (sel->info.base.cs.user_data_components_amd) ... } si_cp_copy_data is moved to the beginning because it's shared. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-pra...@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26095> --- src/gallium/drivers/radeonsi/si_compute.c | 69 +++++++++++++++---------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 221e45f1437..21bda9d08cd 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -727,54 +727,53 @@ static void si_setup_nir_user_data(struct si_context *sctx, const struct pipe_gr 12 * sel->info.uses_grid_size; unsigned cs_user_data_reg = block_size_reg + 4 * program->sel.info.uses_variable_block_size; - radeon_begin(cs); - - if (sel->info.uses_grid_size) { - if (info->indirect) { - radeon_end(); - - for (unsigned i = 0; i < 3; ++i) { - si_cp_copy_data(sctx, &sctx->gfx_cs, COPY_DATA_REG, NULL, (grid_size_reg >> 2) + i, - COPY_DATA_SRC_MEM, si_resource(info->indirect), - info->indirect_offset + 4 * i); - } - radeon_begin_again(cs); - } else { - if (sctx->screen->info.has_set_sh_pairs_packed) { - gfx11_push_compute_sh_reg(grid_size_reg, info->grid[0]); - gfx11_push_compute_sh_reg(grid_size_reg + 4, info->grid[1]); - gfx11_push_compute_sh_reg(grid_size_reg + 8, info->grid[2]); - } else { - radeon_set_sh_reg_seq(grid_size_reg, 3); - radeon_emit(info->grid[0]); - radeon_emit(info->grid[1]); - radeon_emit(info->grid[2]); - } + if (sel->info.uses_grid_size && info->indirect) { + for (unsigned i = 0; i < 3; ++i) { + si_cp_copy_data(sctx, &sctx->gfx_cs, COPY_DATA_REG, NULL, (grid_size_reg >> 2) + i, + COPY_DATA_SRC_MEM, si_resource(info->indirect), + info->indirect_offset + 4 * i); } } - if (sel->info.uses_variable_block_size) { - uint32_t value = info->block[0] | (info->block[1] << 10) | (info->block[2] << 20); + if (sctx->screen->info.has_set_sh_pairs_packed) { + if (sel->info.uses_grid_size && !info->indirect) { + gfx11_push_compute_sh_reg(grid_size_reg, info->grid[0]); + gfx11_push_compute_sh_reg(grid_size_reg + 4, info->grid[1]); + gfx11_push_compute_sh_reg(grid_size_reg + 8, info->grid[2]); + } - if (sctx->screen->info.has_set_sh_pairs_packed) { + if (sel->info.uses_variable_block_size) { + uint32_t value = info->block[0] | (info->block[1] << 10) | (info->block[2] << 20); gfx11_push_compute_sh_reg(block_size_reg, value); - } else { - radeon_set_sh_reg(block_size_reg, value); } - } - if (sel->info.base.cs.user_data_components_amd) { - unsigned num = sel->info.base.cs.user_data_components_amd; - - if (sctx->screen->info.has_set_sh_pairs_packed) { + if (sel->info.base.cs.user_data_components_amd) { + unsigned num = sel->info.base.cs.user_data_components_amd; for (unsigned i = 0; i < num; i++) gfx11_push_compute_sh_reg(cs_user_data_reg + i * 4, sctx->cs_user_data[i]); - } else { + } + } else { + radeon_begin(cs); + + if (sel->info.uses_grid_size && !info->indirect) { + radeon_set_sh_reg_seq(grid_size_reg, 3); + radeon_emit(info->grid[0]); + radeon_emit(info->grid[1]); + radeon_emit(info->grid[2]); + } + + if (sel->info.uses_variable_block_size) { + uint32_t value = info->block[0] | (info->block[1] << 10) | (info->block[2] << 20); + radeon_set_sh_reg(block_size_reg, value); + } + + if (sel->info.base.cs.user_data_components_amd) { + unsigned num = sel->info.base.cs.user_data_components_amd; radeon_set_sh_reg_seq(cs_user_data_reg, num); radeon_emit_array(sctx->cs_user_data, num); } + radeon_end(); } - radeon_end(); } static void si_emit_dispatch_packets(struct si_context *sctx, const struct pipe_grid_info *info)