diff --git a/.pick_status.json b/.pick_status.json index 6889147bef4..0abd1a9dd45 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -40,7 +40,7 @@ "description": "nir/lower_mediump: Fix metadata in all passes", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "fb29cef8ddabdd05aeddc5220017bb28a83bb19c" }, 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; }