glsl: handle memory qualifiers for struct with array of images
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 25 May 2017 14:19:58 +0000 (16:19 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 1 Jun 2017 09:54:06 +0000 (11:54 +0200)
This handles a situation like:

struct {
   image2D imgs[6];
} s;

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/compiler/glsl/ast_to_hir.cpp

index 2dec8bbc32b7722079ab3e42e6d47f09e1676c50..65b6262f345654250aff5b6d67144dff4ae4b6f8 100644 (file)
@@ -7402,9 +7402,10 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
          }
 
          /* Memory qualifiers are allowed on buffer and image variables, while
-          * the format qualifier is only accept for images.
+          * the format qualifier is only accepted for images.
           */
-         if (var_mode == ir_var_shader_storage || field_type->is_image()) {
+         if (var_mode == ir_var_shader_storage ||
+             field_type->without_array()->is_image()) {
             /* For readonly and writeonly qualifiers the field definition,
              * if set, overwrites the layout qualifier.
              */
@@ -7431,7 +7432,7 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
             fields[i].memory_restrict = qual->flags.q.restrict_flag ||
                                         (layout && layout->flags.q.restrict_flag);
 
-            if (field_type->is_image()) {
+            if (field_type->without_array()->is_image()) {
                if (qual->flags.q.explicit_image_format) {
                   if (qual->image_base_type != field_type->sampled_type) {
                      _mesa_glsl_error(&loc, state, "format qualifier doesn't "