From 1e710f7a2c6f9c7777e719e05a71eca12eacbdfc Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Wed, 18 Aug 2021 14:07:42 +0100 Subject: [PATCH] radv: validate shaders after linking passes Signed-off-by: Rhys Perry Reviewed-by: Samuel Pitoiset Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5244 Part-of: --- src/amd/vulkan/radv_pipeline.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 71760293c09..e8db770eede 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2829,6 +2829,8 @@ radv_link_shaders(struct radv_pipeline *pipeline, for (int i = 1; i < shader_count; ++i) { nir_lower_io_arrays_to_elements(ordered_shaders[i], ordered_shaders[i - 1]); + nir_validate_shader(ordered_shaders[i], "after nir_lower_io_arrays_to_elements"); + nir_validate_shader(ordered_shaders[i - 1], "after nir_lower_io_arrays_to_elements"); } for (int i = 0; i < shader_count; ++i) { @@ -2961,6 +2963,9 @@ radv_link_shaders(struct radv_pipeline *pipeline, for (int i = 1; !optimize_conservatively && (i < shader_count); ++i) { if (nir_link_opt_varyings(ordered_shaders[i], ordered_shaders[i - 1])) { + nir_validate_shader(ordered_shaders[i], "after nir_link_opt_varyings"); + nir_validate_shader(ordered_shaders[i - 1], "after nir_link_opt_varyings"); + NIR_PASS(_, ordered_shaders[i - 1], nir_opt_constant_folding); NIR_PASS(_, ordered_shaders[i - 1], nir_opt_algebraic); NIR_PASS(_, ordered_shaders[i - 1], nir_opt_dce); @@ -2972,6 +2977,8 @@ radv_link_shaders(struct radv_pipeline *pipeline, bool progress = nir_remove_unused_varyings(ordered_shaders[i], ordered_shaders[i - 1]); nir_compact_varyings(ordered_shaders[i], ordered_shaders[i - 1], true); + nir_validate_shader(ordered_shaders[i], "after nir_compact_varyings"); + nir_validate_shader(ordered_shaders[i - 1], "after nir_compact_varyings"); if (ordered_shaders[i]->info.stage == MESA_SHADER_MESH) { /* nir_compact_varyings can change the location of per-vertex and per-primitive outputs */ nir_shader_gather_info(ordered_shaders[i], nir_shader_get_entrypoint(ordered_shaders[i]));