From a618a2aa8b7e40b42a50dfc9033c30c45b61d63d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 30 Nov 2024 00:51:49 -0500 Subject: [PATCH] nir/linking_helpers: don't promote interpolated varyings to flat Even the most flexible interpolation that we have in NIR options (nir_io_has_flexible_input_interpolation_except_flat) doesn't allow mixing flat and non-flat in the same vec4. This (legacy) optimization can't promote interpolated inputs to flat if it doesn't consider the interpolation mode of the whole vec4 slot. Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/nir/nir_linking_helpers.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c index 0c940ae8e05..4b84369b1a0 100644 --- a/src/compiler/nir/nir_linking_helpers.c +++ b/src/compiler/nir/nir_linking_helpers.c @@ -1409,22 +1409,11 @@ nir_link_opt_varyings(nir_shader *producer, nir_shader *consumer) } nir_scalar uni_scalar; - if (is_direct_uniform_load(ssa, &uni_scalar)) { - if (consumer->options->max_varying_expression_cost >= 2) { - progress |= replace_varying_input_by_uniform_load(consumer, intr, - &uni_scalar); - continue; - } else { - nir_variable *in_var = get_matching_input_var(consumer, out_var); - /* The varying is loaded from same uniform, so no need to do any - * interpolation. Mark it as flat explicitly. - */ - if (!consumer->options->no_integers && - in_var && in_var->data.interpolation <= INTERP_MODE_NOPERSPECTIVE) { - in_var->data.interpolation = INTERP_MODE_FLAT; - out_var->data.interpolation = INTERP_MODE_FLAT; - } - } + if (consumer->options->max_varying_expression_cost >= 2 && + is_direct_uniform_load(ssa, &uni_scalar)) { + progress |= replace_varying_input_by_uniform_load(consumer, intr, + &uni_scalar); + continue; } struct hash_entry *entry = _mesa_hash_table_search(varying_values, ssa);