diff options
| author | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-07 18:55:41 -0700 | 
|---|---|---|
| committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-07 18:56:16 -0700 | 
| commit | 9bcb67bdc4d3f6aee9ef577266aebca85fcfb44f (patch) | |
| tree | c0bc855f7a4f6c276550d05178c047d16a887f2d | |
| parent | 15d162d7b1ebe09b0bdaf43194529f9ef995c623 (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.ypp | 52 | 
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: | 
