r600g: compute support for evergreen
[mesa.git] / src / glsl / glsl_parser.yy
index 26cdc16520610e7f3a19fbbd2c45a9608edff65a..5ca8740c4ff26ec9e174d4fedad166cfefe4a2e1 100644 (file)
@@ -103,6 +103,8 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
 %token SAMPLER2DARRAYSHADOW ISAMPLER1D ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
 %token ISAMPLER1DARRAY ISAMPLER2DARRAY USAMPLER1D USAMPLER2D USAMPLER3D
 %token USAMPLERCUBE USAMPLER1DARRAY USAMPLER2DARRAY
+%token SAMPLER2DRECT ISAMPLER2DRECT USAMPLER2DRECT SAMPLER2DRECTSHADOW
+%token SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
 %token SAMPLEREXTERNALOES
 %token STRUCT VOID_TOK WHILE
 %token <identifier> IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER
@@ -130,12 +132,12 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
 %token INLINE_TOK NOINLINE VOLATILE PUBLIC_TOK STATIC EXTERN EXTERNAL
 %token LONG_TOK SHORT_TOK DOUBLE_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK OUPTUT
 %token HVEC2 HVEC3 HVEC4 DVEC2 DVEC3 DVEC4 FVEC2 FVEC3 FVEC4
-%token SAMPLER2DRECT SAMPLER3DRECT SAMPLER2DRECTSHADOW
+%token SAMPLER3DRECT
 %token SIZEOF CAST NAMESPACE USING
 
 %token ERROR_TOK
 
-%token COMMON PARTITION ACTIVE SAMPLERBUFFER FILTER
+%token COMMON PARTITION ACTIVE FILTER
 %token  IMAGE1D  IMAGE2D  IMAGE3D  IMAGECUBE  IMAGE1DARRAY  IMAGE2DARRAY
 %token IIMAGE1D IIMAGE2D IIMAGE3D IIMAGECUBE IIMAGE1DARRAY IIMAGE2DARRAY
 %token UIMAGE1D UIMAGE2D UIMAGE3D UIMAGECUBE UIMAGE1DARRAY UIMAGE2DARRAY
@@ -1103,8 +1105,14 @@ layout_qualifier_id_list:
           if ($1.flags.q.explicit_location)
              $$.location = $1.location;
 
+          if ($1.flags.q.explicit_index)
+             $$.index = $1.index;
+
           if ($3.flags.q.explicit_location)
              $$.location = $3.location;
+
+          if ($3.flags.q.explicit_index)
+             $$.index = $3.index;
        }
        ;
 
@@ -1191,6 +1199,20 @@ layout_qualifier_id:
                    YYERROR;
                 }
              }
+
+             if (strcmp("index", $1) == 0) {
+                got_one = true;
+
+                $$.flags.q.explicit_index = 1;
+
+                if ($3 >= 0) {
+                   $$.index = $3;
+                } else {
+                   _mesa_glsl_error(& @3, state,
+                                    "invalid index %d specified\n", $3);
+                    YYERROR;
+                 }
+              }
           }
 
           /* If the identifier didn't match any known layout identifiers,
@@ -1405,18 +1427,23 @@ basic_type_specifier_nonarray:
        | SAMPLER2DARRAY        { $$ = "sampler2DArray"; }
        | SAMPLER1DARRAYSHADOW  { $$ = "sampler1DArrayShadow"; }
        | SAMPLER2DARRAYSHADOW  { $$ = "sampler2DArrayShadow"; }
+       | SAMPLERBUFFER         { $$ = "samplerBuffer"; }
        | ISAMPLER1D            { $$ = "isampler1D"; }
        | ISAMPLER2D            { $$ = "isampler2D"; }
+       | ISAMPLER2DRECT        { $$ = "isampler2DRect"; }
        | ISAMPLER3D            { $$ = "isampler3D"; }
        | ISAMPLERCUBE          { $$ = "isamplerCube"; }
        | ISAMPLER1DARRAY       { $$ = "isampler1DArray"; }
        | ISAMPLER2DARRAY       { $$ = "isampler2DArray"; }
+       | ISAMPLERBUFFER        { $$ = "isamplerBuffer"; }
        | USAMPLER1D            { $$ = "usampler1D"; }
        | USAMPLER2D            { $$ = "usampler2D"; }
+       | USAMPLER2DRECT        { $$ = "usampler2DRect"; }
        | USAMPLER3D            { $$ = "usampler3D"; }
        | USAMPLERCUBE          { $$ = "usamplerCube"; }
        | USAMPLER1DARRAY       { $$ = "usampler1DArray"; }
        | USAMPLER2DARRAY       { $$ = "usampler2DArray"; }
+       | USAMPLERBUFFER        { $$ = "usamplerBuffer"; }
        ;
 
 precision_qualifier: