glsl: Add frontend support for `sample` auxiliary storage qualifier
authorChris Forbes <chrisf@ijw.co.nz>
Fri, 29 Nov 2013 08:21:56 +0000 (21:21 +1300)
committerChris Forbes <chrisf@ijw.co.nz>
Sat, 7 Dec 2013 04:14:39 +0000 (17:14 +1300)
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/glsl/ast.h
src/glsl/ast_type.cpp
src/glsl/glsl_lexer.ll
src/glsl/glsl_parser.yy
src/glsl/glsl_parser_extras.cpp

index 5c214b6043b7b9043ea6e9d8c5eb6ead8533f50d..76911f056d34f148e9f2d76b234df9cfcb84dd2e 100644 (file)
@@ -357,6 +357,7 @@ struct ast_type_qualifier {
         unsigned in:1;
         unsigned out:1;
         unsigned centroid:1;
+         unsigned sample:1;
         unsigned uniform:1;
         unsigned smooth:1;
         unsigned flat:1;
index 2b088bf8b855b23fa2efe058febbbb50240060c4..d758bfa1f2a98a7ebf4ce693aa5238c955d83a50 100644 (file)
@@ -90,7 +90,8 @@ ast_type_qualifier::has_storage() const
 bool
 ast_type_qualifier::has_auxiliary_storage() const
 {
-   return this->flags.q.centroid;
+   return this->flags.q.centroid
+          || this->flags.q.sample;
 }
 
 const char*
index 822d70d6b66e71bb92bb7c2c6ae3913a6a32fcba..50875bf3b235dbbb20444751856a96a44dfb6d47 100644 (file)
@@ -520,7 +520,7 @@ readonly    KEYWORD(0, 300, 0, 0, READONLY);
 writeonly      KEYWORD(0, 300, 0, 0, WRITEONLY);
 resource       KEYWORD(0, 300, 0, 0, RESOURCE);
 patch          KEYWORD(0, 300, 0, 0, PATCH);
-sample         KEYWORD(0, 300, 0, 0, SAMPLE);
+sample         KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_gpu_shader5_enable, SAMPLE);
 subroutine     KEYWORD(0, 300, 0, 0, SUBROUTINE);
 
 
index ada3690f609093a8d8097da4c2547cfe29a2f47c..10165547924ba143b586e89e2c05b657cc2a339a 100644 (file)
@@ -1521,7 +1521,7 @@ type_qualifier:
    {
       if ($2.has_auxiliary_storage()) {
          _mesa_glsl_error(&@1, state,
-                          "duplicate auxiliary storage qualifier (centroid)");
+                          "duplicate auxiliary storage qualifier (centroid or sample)");
       }
 
       if (!state->ARB_shading_language_420pack_enable &&
@@ -1571,7 +1571,12 @@ auxiliary_storage_qualifier:
       memset(& $$, 0, sizeof($$));
       $$.flags.q.centroid = 1;
    }
-   /* TODO: "sample" and "patch" also go here someday. */
+   | SAMPLE
+   {
+      memset(& $$, 0, sizeof($$));
+      $$.flags.q.sample = 1;
+   }
+   /* TODO: "patch" also goes here someday. */
 
 storage_qualifier:
    CONST_TOK
index 8e350902355c99464552e6c47bf7141712d6657e..2645c08af901131283f81928814c5330551d340a 100644 (file)
@@ -878,6 +878,8 @@ _mesa_ast_type_qualifier_print(const struct ast_type_qualifier *q)
 
    if (q->flags.q.centroid)
       printf("centroid ");
+   if (q->flags.q.sample)
+      printf("sample ");
    if (q->flags.q.uniform)
       printf("uniform ");
    if (q->flags.q.smooth)