Module: Mesa Branch: main Commit: d98b7817fcf657af8a49a2a89a3f30b4b998eda8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d98b7817fcf657af8a49a2a89a3f30b4b998eda8
Author: Rhys Perry <pendingchao...@gmail.com> Date: Thu Apr 14 16:13:40 2022 +0100 radv: call nir_metadata_preserve in various lowering passes Signed-off-by: Rhys Perry <pendingchao...@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12448> --- src/amd/vulkan/radv_pipeline.c | 32 +++++++++++++++++++++++++++++--- src/amd/vulkan/radv_shader.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 0539d1e80c1..1fb2fdc2116 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2653,6 +2653,7 @@ static bool radv_lower_viewport_to_zero(nir_shader *nir) { nir_function_impl *impl = nir_shader_get_entrypoint(nir); + bool progress = false; nir_builder b; nir_builder_init(&b, impl); @@ -2675,11 +2676,19 @@ radv_lower_viewport_to_zero(nir_shader *nir) b.cursor = nir_before_instr(instr); nir_ssa_def_rewrite_uses(&intr->dest.ssa, nir_imm_zero(&b, 1, 32)); - return true; + progress = true; + break; } + if (progress) + break; } - return false; + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + + return progress; } static nir_variable * @@ -2746,10 +2755,17 @@ radv_lower_multiview(nir_shader *nir) progress = true; if (nir->info.stage == MESA_SHADER_VERTEX) - return progress; + break; } + if (nir->info.stage == MESA_SHADER_VERTEX && progress) + break; } + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + return progress; } @@ -4054,6 +4070,11 @@ radv_lower_vs_input(nir_shader *nir, const struct radv_pipeline_key *pipeline_ke } } + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + return progress; } @@ -4213,6 +4234,11 @@ radv_lower_fs_output(nir_shader *nir, const struct radv_pipeline_key *pipeline_k } } + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + return progress; } diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 6f7c49ab446..ba1345297c6 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -333,6 +333,11 @@ lower_intrinsics(nir_shader *nir, const struct radv_pipeline_key *key) } } + if (progress) + nir_metadata_preserve(entry, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(entry, nir_metadata_all); + return progress; } @@ -401,10 +406,17 @@ radv_lower_primitive_shading_rate(nir_shader *nir) progress = true; if (nir->info.stage == MESA_SHADER_VERTEX) - return progress; + break; } + if (nir->info.stage == MESA_SHADER_VERTEX && progress) + break; } + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + return progress; } @@ -459,11 +471,18 @@ radv_force_primitive_shading_rate(nir_shader *nir, struct radv_device *device) progress = true; if (nir->info.stage == MESA_SHADER_VERTEX) - return progress; + break; } } + if (nir->info.stage == MESA_SHADER_VERTEX && progress) + break; } + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + return progress; } @@ -549,6 +568,11 @@ radv_lower_fs_intrinsics(nir_shader *nir, const struct radv_pipeline_stage *fs_s } } + if (progress) + nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(impl, nir_metadata_all); + return progress; } @@ -986,6 +1010,11 @@ lower_view_index(nir_shader *nir) } } + if (progress) + nir_metadata_preserve(entry, nir_metadata_block_index | nir_metadata_dominance); + else + nir_metadata_preserve(entry, nir_metadata_all); + return progress; }