summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-06-07 18:55:41 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-06-07 18:56:16 -0700
commit9bcb67bdc4d3f6aee9ef577266aebca85fcfb44f (patch)
treec0bc855f7a4f6c276550d05178c047d16a887f2d
parent15d162d7b1ebe09b0bdaf43194529f9ef995c623 (diff)
Fix parsing of precision qualifiers
This causes the following tests to pass: glslparsertest/glsl2/precision-02.vert glslparsertest/glsl2/precision-04.vert glslparsertest/glsl2/precision-06.vert This causes the following test to fail. This shader was previously failing to compile, but it was failing for the wrong reasons. glslparsertest/glsl2/precision-03.vert
-rw-r--r--glsl_parser.ypp52
1 files changed, 45 insertions, 7 deletions
diff --git a/glsl_parser.ypp b/glsl_parser.ypp
index a2ce2af877..4de1ec9591 100644
--- a/glsl_parser.ypp
+++ b/glsl_parser.ypp
@@ -94,7 +94,7 @@
%token MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
%token SUB_ASSIGN
%token INVARIANT
-%token HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
+%token LOWP MEDIUMP HIGHP PRECISION
%token VERSION EXTENSION LINE PRAGMA COLON EOL INTERFACE OUTPUT
@@ -105,7 +105,7 @@
%token LONG SHORT DOUBLE HALF FIXED UNSIGNED INPUT OUPTUT
%token HVEC2 HVEC3 HVEC4 DVEC2 DVEC3 DVEC4 FVEC2 FVEC3 FVEC4
%token SAMPLER2DRECT SAMPLER3DRECT SAMPLER2DRECTSHADOW
-%token SIZEOF CAST NAMESPACE USING LOWP MEDIUMP HIGHP
+%token SIZEOF CAST NAMESPACE USING
%type <identifier> variable_identifier
%type <node> statement
@@ -234,11 +234,19 @@ extension_statement:
external_declaration_list:
external_declaration
{
- state->translation_unit.push_tail(& $1->link);
+ /* FINISHME: The NULL test is only required because 'precision'
+ * FINISHME: statements are not yet supported.
+ */
+ if ($1 != NULL)
+ state->translation_unit.push_tail(& $1->link);
}
| external_declaration_list external_declaration
{
- state->translation_unit.push_tail(& $2->link);
+ /* FINISHME: The NULL test is only required because 'precision'
+ * FINISHME: statements are not yet supported.
+ */
+ if ($2 != NULL)
+ state->translation_unit.push_tail(& $2->link);
}
;
@@ -999,9 +1007,39 @@ basic_type_specifier_nonarray:
;
precision_qualifier:
- HIGH_PRECISION { $$ = ast_precision_high; }
- | MEDIUM_PRECISION { $$ = ast_precision_medium; }
- | LOW_PRECISION { $$ = ast_precision_low; }
+ HIGHP {
+ if (state->language_version < 130)
+ _mesa_glsl_error(& @1, state,
+ "precission qualifier forbidden "
+ "in GLSL %d.%d (1.30 or later "
+ "required)\n",
+ state->language_version / 100,
+ state->language_version % 100);
+
+ $$ = ast_precision_high;
+ }
+ | MEDIUMP {
+ if (state->language_version < 130)
+ _mesa_glsl_error(& @1, state,
+ "precission qualifier forbidden "
+ "in GLSL %d.%d (1.30 or later "
+ "required)\n",
+ state->language_version / 100,
+ state->language_version % 100);
+
+ $$ = ast_precision_medium;
+ }
+ | LOWP {
+ if (state->language_version < 130)
+ _mesa_glsl_error(& @1, state,
+ "precission qualifier forbidden "
+ "in GLSL %d.%d (1.30 or later "
+ "required)\n",
+ state->language_version / 100,
+ state->language_version % 100);
+
+ $$ = ast_precision_low;
+ }
;
struct_specifier: