From e36c277af991ffb199e6ecb7b9c315ae03e24823 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 29 May 2025 12:27:50 +0800 Subject: [PATCH] radeonsi: init task shader args MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Part-of: --- src/gallium/drivers/radeonsi/si_compute.c | 6 ++++++ src/gallium/drivers/radeonsi/si_shader.h | 4 ++++ src/gallium/drivers/radeonsi/si_shader_args.c | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 9cdafc47f50..18da5e2e8ff 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -114,6 +114,12 @@ static void si_create_compute_state_async(void *job, void *gdata, int thread_ind return; } + /* task ring entry and draw id + * note uses_draw_id is only available after shader variant creation + */ + if (sel->stage == MESA_SHADER_TASK) + user_sgprs += shader->info.uses_draw_id ? 3 : 2; + shader->config.rsrc1 = S_00B848_VGPRS((shader->config.num_vgprs - 1) / ((shader->wave_size == 32 || sscreen->info.wave64_vgpr_alloc_granularity == 8) ? 8 : 4)) | diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index bbe8322f44a..1ca898e8910 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -190,6 +190,10 @@ enum SI_SGPR_ALPHA_REF, SI_PS_NUM_USER_SGPR, + /* TS only */ + GFX10_SGPR_TS_TASK_RING_ADDR = SI_NUM_RESOURCE_SGPRS, + GFX10_SGPR_TS_TASK_RING_ENTRY, + /* MS only */ GFX11_SGPR_MS_ATTRIBUTE_RING_ADDR = SI_NUM_RESOURCE_SGPRS, diff --git a/src/gallium/drivers/radeonsi/si_shader_args.c b/src/gallium/drivers/radeonsi/si_shader_args.c index d0a3e49fc3a..eb102699495 100644 --- a/src/gallium/drivers/radeonsi/si_shader_args.c +++ b/src/gallium/drivers/radeonsi/si_shader_args.c @@ -513,8 +513,15 @@ void si_init_shader_args(struct si_shader *shader, struct si_shader_args *args, case MESA_SHADER_COMPUTE: case MESA_SHADER_KERNEL: + case MESA_SHADER_TASK: declare_global_desc_pointers(args); declare_per_stage_desc_pointers(args, shader, info, true); + if (stage == MESA_SHADER_TASK) { + ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_VALUE, &args->task_ring_addr); + ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_VALUE, &args->ac.task_ring_entry); + } + if (shader->info.uses_draw_id) + ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_VALUE, &args->ac.draw_id); if (shader->selector->info.uses_grid_size) ac_add_arg(&args->ac, AC_ARG_SGPR, 3, AC_ARG_VALUE, &args->ac.num_work_groups); if (shader->selector->info.uses_variable_block_size)