spirv: Move the shader_call_data workaround above nir_validate_shader
Prevents validation failures.
Reviewed-by: Natalie Vock <natalie.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35532>
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 0cf1e79..9679ebd 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -7278,6 +7278,18 @@
/* structurize the CFG */
nir_lower_goto_ifs(b->shader);
+ /* Work around applications that declare shader_call_data variables inside
+ * ray generation shaders or multiple shader_call_data variables in callable
+ * shaders. This needs to happen before validation.
+ *
+ * https://gitlab.freedesktop.org/mesa/mesa/-/issues/5326
+ * https://gitlab.freedesktop.org/mesa/mesa/-/issues/11585
+ */
+ if (gl_shader_stage_is_rt(b->shader->info.stage)) {
+ NIR_PASS(_, b->shader, nir_remove_dead_variables, nir_var_shader_call_data,
+ NULL);
+ }
+
nir_validate_shader(b->shader, "after spirv cfg");
nir_lower_continue_constructs(b->shader);
@@ -7364,17 +7376,6 @@
}
}
- /* Work around applications that declare shader_call_data variables inside
- * ray generation shaders or multiple shader_call_data variables in callable
- * shaders.
- *
- * https://gitlab.freedesktop.org/mesa/mesa/-/issues/5326
- * https://gitlab.freedesktop.org/mesa/mesa/-/issues/11585
- */
- if (gl_shader_stage_is_rt(b->shader->info.stage))
- NIR_PASS(_, b->shader, nir_remove_dead_variables, nir_var_shader_call_data,
- NULL);
-
/* Unparent the shader from the vtn_builder before we delete the builder */
ralloc_steal(NULL, b->shader);