Mesa (main): radv: call nir_metadata_preserve in various lowering passes

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 19 14:36:43 UTC 2022


Module: Mesa
Branch: main
Commit: d98b7817fcf657af8a49a2a89a3f30b4b998eda8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d98b7817fcf657af8a49a2a89a3f30b4b998eda8

Author: Rhys Perry <pendingchaos02 at 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 <pendingchaos02 at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at 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;
 }
 



More information about the mesa-commit mailing list