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
