From 9b57a81815c54b3eb01b711761bc3856d722995d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 6 Jul 2021 12:55:23 -0400 Subject: [PATCH] nir/lower_mediump: Fix metadata in all passes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: fb29cef8dda ("nir: add many passes that lower and optimize 16-bit input/outputs and samplers") Signed-off-by: Alyssa Rosenzweig Reviewed-by: Marek Olšák Part-of: --- src/compiler/nir/nir_lower_mediump.c | 48 ++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/src/compiler/nir/nir_lower_mediump.c b/src/compiler/nir/nir_lower_mediump.c index f4b10806358..4df1cce2472 100644 --- a/src/compiler/nir/nir_lower_mediump.c +++ b/src/compiler/nir/nir_lower_mediump.c @@ -121,7 +121,13 @@ nir_recompute_io_bases(nir_function_impl *impl, nir_variable_mode modes) } } - nir_metadata_preserve(impl, nir_metadata_all); + if (changed) { + nir_metadata_preserve(impl, nir_metadata_dominance | + nir_metadata_block_index); + } else { + nir_metadata_preserve(impl, nir_metadata_all); + } + return changed; } @@ -227,7 +233,13 @@ nir_lower_mediump_io(nir_shader *nir, nir_variable_mode modes, if (changed && use_16bit_slots) nir_recompute_io_bases(impl, modes); - nir_metadata_preserve(impl, nir_metadata_all); + if (changed) { + nir_metadata_preserve(impl, nir_metadata_dominance | + nir_metadata_block_index); + } else { + nir_metadata_preserve(impl, nir_metadata_all); + } + return changed; } @@ -286,7 +298,13 @@ nir_force_mediump_io(nir_shader *nir, nir_variable_mode modes, } } - nir_metadata_preserve(impl, nir_metadata_all); + if (changed) { + nir_metadata_preserve(impl, nir_metadata_dominance | + nir_metadata_block_index); + } else { + nir_metadata_preserve(impl, nir_metadata_all); + } + return changed; } @@ -326,7 +344,13 @@ nir_unpack_16bit_varying_slots(nir_shader *nir, nir_variable_mode modes) if (changed) nir_recompute_io_bases(impl, modes); - nir_metadata_preserve(impl, nir_metadata_all); + if (changed) { + nir_metadata_preserve(impl, nir_metadata_dominance | + nir_metadata_block_index); + } else { + nir_metadata_preserve(impl, nir_metadata_all); + } + return changed; } @@ -515,7 +539,13 @@ nir_fold_16bit_sampler_conversions(nir_shader *nir, } } - nir_metadata_preserve(impl, nir_metadata_all); + if (changed) { + nir_metadata_preserve(impl, nir_metadata_dominance | + nir_metadata_block_index); + } else { + nir_metadata_preserve(impl, nir_metadata_all); + } + return changed; } @@ -606,6 +636,12 @@ nir_legalize_16bit_sampler_srcs(nir_shader *nir, } } - nir_metadata_preserve(impl, nir_metadata_all); + if (changed) { + nir_metadata_preserve(impl, nir_metadata_dominance | + nir_metadata_block_index); + } else { + nir_metadata_preserve(impl, nir_metadata_all); + } + return changed; }