mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 02:40:11 +01:00
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 <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9741>
This commit is contained in:
parent
6900498faa
commit
f9c83782f7
1 changed files with 8 additions and 1 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue