radv: call nir_metadata_preserve in various lowering passes
authorRhys Perry <pendingchaos02@gmail.com>
Thu, 14 Apr 2022 15:13:40 +0000 (16:13 +0100)
committerMarge Bot <emma+marge@anholt.net>
Thu, 19 May 2022 13:37:20 +0000 (13:37 +0000)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12448>

src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/radv_shader.c

index 0539d1e..1fb2fdc 100644 (file)
@@ -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;
 }
 
index 6f7c49a..ba13452 100644 (file)
@@ -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;
 }