glsl: Implement GLSL ES restriction on images being either readonly or writeonly.
authorFrancisco Jerez <currojerez@riseup.net>
Sun, 16 Aug 2015 22:27:43 +0000 (01:27 +0300)
committerFrancisco Jerez <currojerez@riseup.net>
Thu, 20 Aug 2015 09:28:27 +0000 (12:28 +0300)
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/glsl/ast_to_hir.cpp

index 4d279f6e946fadb20fe33e846dd46264a2a8a00b..ff57ec3a97d43b57c2ba176df16042c1fa680efa 100644 (file)
@@ -2469,6 +2469,24 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
 
          var->data.image_format = GL_NONE;
       }
+
+      /* From page 70 of the GLSL ES 3.1 specification:
+       *
+       * "Except for image variables qualified with the format qualifiers
+       *  r32f, r32i, and r32ui, image variables must specify either memory
+       *  qualifier readonly or the memory qualifier writeonly."
+       */
+      if (state->es_shader &&
+          var->data.image_format != GL_R32F &&
+          var->data.image_format != GL_R32I &&
+          var->data.image_format != GL_R32UI &&
+          !var->data.image_read_only &&
+          !var->data.image_write_only) {
+         _mesa_glsl_error(loc, state, "image variables of format other than "
+                          "r32f, r32i or r32ui must be qualified `readonly' or "
+                          "`writeonly'");
+      }
+
    } else if (qual->flags.q.read_only ||
               qual->flags.q.write_only ||
               qual->flags.q.coherent ||