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

Author: Mike Blumenkrantz <[email protected]>
Date:   Sun Mar 21 14:07:26 2021 -0400

st/glsl_to_nir: lower indirect derefs of builtins in non-packed uniform case

the builtin lowering can't handle dynamic array indexing, so this requires
that all indirect derefs be lowered any time this pass is invoked in order
to avoid crashing

fixes #4132

Reviewed-by: Rob Clark <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9741>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 384738cb3bf..494ee7ac82f 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -513,8 +513,15 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct 
gl_program *prog,
     * storage don't need to lower builtins.
     */
    if (!shader_program->data->spirv &&
-       !st->ctx->Const.PackedDriverUniformStorage)
+       !st->ctx->Const.PackedDriverUniformStorage) {
+      /* at this point, array uniforms have been split into separate
+       * nir_variable structs where possible. this codepath can't handle 
dynamic
+       * array indexing, however, so all indirect uniform derefs
+       * must be eliminated beforehand to avoid trying to lower one of those 
builtins
+       */
+      NIR_PASS_V(nir, nir_lower_indirect_builtin_uniform_derefs);
       NIR_PASS_V(nir, st_nir_lower_builtin);
+   }
 
    if (!screen->get_param(screen, PIPE_CAP_NIR_ATOMICS_AS_DEREF))
       NIR_PASS_V(nir, gl_nir_lower_atomics, shader_program, true);

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to