From ef229b8c3e120828ef259f1e7fddd5698c044320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 19 Mar 2026 21:46:25 -0400 Subject: [PATCH] radeonsi: stop using si_shader_info::output_semantic for passthrough TCS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will allow removing output_semantic. Acked-by: Pierre-Eric Acked-by: Timur Kristóf Part-of: --- src/gallium/drivers/radeonsi/si_shader_info.c | 2 ++ src/gallium/drivers/radeonsi/si_shader_info.h | 3 +++ src/gallium/drivers/radeonsi/si_shaderlib_nir.c | 10 ++++++---- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c index 37efe926424..ccfc42fef72 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_info.c @@ -518,6 +518,8 @@ void si_nir_gather_info(struct si_screen *sscreen, struct nir_shader *nir, info->base.num_ubos = nir->info.num_ubos; info->base.num_ssbos = nir->info.num_ssbos; info->base.num_images = nir->info.num_images; + info->base.outputs_written = nir->info.outputs_written; + info->base.outputs_written_16bit = nir->info.outputs_written_16bit; info->base.textures_used = nir->info.textures_used[0]; info->base.task_payload_size = nir->info.task_payload_size; diff --git a/src/gallium/drivers/radeonsi/si_shader_info.h b/src/gallium/drivers/radeonsi/si_shader_info.h index b988f4cc0c5..77653310c96 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.h +++ b/src/gallium/drivers/radeonsi/si_shader_info.h @@ -30,6 +30,9 @@ struct si_shader_info { uint8_t num_images; uint32_t textures_used; + uint64_t outputs_written; + uint16_t outputs_written_16bit; + unsigned task_payload_size; uint16_t workgroup_size[3]; bool workgroup_size_variable:1; diff --git a/src/gallium/drivers/radeonsi/si_shaderlib_nir.c b/src/gallium/drivers/radeonsi/si_shaderlib_nir.c index ab7404957eb..2cbaf4a05b1 100644 --- a/src/gallium/drivers/radeonsi/si_shaderlib_nir.c +++ b/src/gallium/drivers/radeonsi/si_shaderlib_nir.c @@ -171,14 +171,16 @@ void *si_create_clear_buffer_rmw_cs(struct si_context *sctx) void *si_create_passthrough_tcs(struct si_context *sctx) { unsigned locations[PIPE_MAX_SHADER_OUTPUTS]; - + unsigned num_outputs = 0; struct si_shader_info *info = &sctx->shader.vs.cso->info; - for (unsigned i = 0; i < info->num_outputs; i++) { - locations[i] = info->output_semantic[i]; + + u_foreach_bit64_two_masks(slot, info->base.outputs_written, + VARYING_SLOT_VAR0_16BIT, info->base.outputs_written_16bit) { + locations[num_outputs++] = slot; } nir_shader *tcs = nir_create_passthrough_tcs_impl(sctx->screen->nir_options, locations, - info->num_outputs, sctx->patch_vertices); + num_outputs, sctx->patch_vertices); NIR_PASS(_, tcs, nir_lower_system_values); return si_create_shader_state(sctx, tcs);