From 9def0a6e5bb4b0a28985321c5e3b13f454a36c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 29 Oct 2025 23:39:12 -0400 Subject: [PATCH] ac/nir: set support_indirect_inputs/outputs in common code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes mesh shader performance of RADV for GravityMark by stopping the lowering of ClipDistance[64][4] indirect access for mesh shader outputs. The perf improvement is 14% on Navi48. Reviewed-by: Timur Kristóf Part-of: --- src/amd/common/nir/ac_nir.c | 4 ++++ src/gallium/drivers/radeonsi/si_get.c | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/amd/common/nir/ac_nir.c b/src/amd/common/nir/ac_nir.c index 6b8bb34e351..ca3aa270947 100644 --- a/src/amd/common/nir/ac_nir.c +++ b/src/amd/common/nir/ac_nir.c @@ -96,6 +96,10 @@ void ac_nir_set_options(struct radeon_info *info, bool use_llvm, nir_lower_minmax64 | nir_lower_iabs64 | nir_lower_iadd_sat64 | nir_lower_conv64 | nir_lower_bitfield_extract64; options->divergence_analysis_options = nir_divergence_view_index_uniform; + options->support_indirect_inputs = BITFIELD_BIT(MESA_SHADER_TESS_CTRL) | + BITFIELD_BIT(MESA_SHADER_TESS_EVAL); + options->support_indirect_outputs = BITFIELD_BIT(MESA_SHADER_TESS_CTRL) | + BITFIELD_BIT(MESA_SHADER_MESH); options->optimize_quad_vote_to_reduce = !use_llvm; options->lower_fisnormal = true; options->support_16bit_alu = info->gfx_level >= GFX8; diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index 762acd86d1c..9e0ce922c18 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -837,9 +837,6 @@ void si_init_screen_get_functions(struct si_screen *sscreen) * TCS outputs | Yes * VS/TES outputs before GS | No */ - options->support_indirect_inputs = BITFIELD_BIT(MESA_SHADER_TESS_CTRL) | - BITFIELD_BIT(MESA_SHADER_TESS_EVAL); - options->support_indirect_outputs = BITFIELD_BIT(MESA_SHADER_TESS_CTRL); options->varying_expression_max_cost = si_varying_expression_max_cost; for (unsigned i = 0; i < MESA_SHADER_STAGES; i++)