glsl: fix crash compiling bindless samplers inside unnamed UBOs
authorTimothy Arceri <tarceri@itsqueeze.com>
Fri, 11 Oct 2019 05:23:48 +0000 (16:23 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sat, 12 Oct 2019 11:04:23 +0000 (22:04 +1100)
The check to see if we were dealing with a buffer block was
too late and only worked for named UBOs.

Fixes: f32b01ca435c "glsl/linker: remove ubo explicit binding handling"
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1900
src/compiler/glsl/link_uniform_initializers.cpp

index 61b324592dfc9d2645d5e76883f653a2fb4ed137..076ff5cea30a1113f968a42b5c5e88c972ddcf92 100644 (file)
@@ -283,15 +283,15 @@ link_set_uniform_initializers(struct gl_shader_program *prog,
          if (var->data.explicit_binding) {
             const glsl_type *const type = var->type;
 
-            if (type->without_array()->is_sampler() ||
+            if (var->is_in_buffer_block()) {
+               /* This case is handled by link_uniform_blocks (at
+                * process_block_array_leaf)
+                */
+            } else if (type->without_array()->is_sampler() ||
                 type->without_array()->is_image()) {
                int binding = var->data.binding;
                linker::set_opaque_binding(mem_ctx, prog, var, var->type,
                                           var->name, &binding);
-            } else if (var->is_in_buffer_block()) {
-               /* This case is handled by link_uniform_blocks (at
-                * process_block_array_leaf)
-                */
             } else if (type->contains_atomic()) {
                /* we don't actually need to do anything. */
             } else {