[Mesa-dev] [PATCH 12/26] glsl/preprocessor: Handle "#version 300 es" directive.

Ian Romanick idr at freedesktop.org
Fri Nov 30 10:07:27 PST 2012


From: Paul Berry <stereotype441 at gmail.com>

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/glsl/glcpp/glcpp-parse.y | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index f021c73..f62cbe4 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -340,6 +340,9 @@ control_line:
 |	HASH_VERSION integer_constant NEWLINE {
 		_glcpp_parser_handle_version_declaration(parser, $2, NULL);
 	}
+|	HASH_VERSION integer_constant IDENTIFIER NEWLINE {
+		_glcpp_parser_handle_version_declaration(parser, $2, $3);
+	}
 |	HASH NEWLINE
 ;
 
@@ -1962,6 +1965,11 @@ static void
 _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version,
                                          const char *es_identifier)
 {
+	/* Note: We assume that if any identifier is present, it means ES.
+         * The GLSL parser will double-check that the identifier is correct.
+	 */
+	bool is_es = es_identifier != NULL;
+
 	macro_t *macro = hash_table_find (parser->defines, "__VERSION__");
 	if (macro) {
 		hash_table_remove (parser->defines, "__VERSION__");
@@ -1970,15 +1978,20 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio
 	add_builtin_define (parser, "__VERSION__", version);
 
 	if (version == 100)
+		is_es = true;
+	if (is_es)
 		add_builtin_define (parser, "GL_ES", 1);
 
-	/* Currently, all ES2 implementations support highp in the
-	 * fragment shader, so we always define this macro in ES2.
+	/* Currently, all ES2/ES3 implementations support highp in the
+	 * fragment shader, so we always define this macro in ES2/ES3.
 	 * If we ever get a driver that doesn't support highp, we'll
 	 * need to add a flag to the gl_context and check that here.
 	 */
-	if (version >= 130 || version == 100)
+	if (version >= 130 || is_es)
 		add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1);
 
-	ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "#version %" PRIiMAX, version);
+	ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length,
+                                      "#version %" PRIiMAX "%s%s", version,
+                                      es_identifier ? " " : "",
+                                      es_identifier ? es_identifier : "");
 }
-- 
1.7.11.7



More information about the mesa-dev mailing list