radeonsi: init task shader args
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37932>
This commit is contained in:
Qiang Yu 2025-05-29 12:27:50 +08:00 committed by Marge Bot
parent 69c10426a4
commit e36c277af9
3 changed files with 17 additions and 0 deletions

View file

@ -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)) |

View file

@ -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,

View file

@ -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)