From 77e1bc9f1db315c68d6fd8c1441a678d33ca4db2 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Mon, 26 Nov 2012 14:53:54 -0800 Subject: [PATCH] glcpp: Add a flag to the parser state to indicate GLES. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This can be triggered either by creation of a GLES context (with api == API_OPENGLES2) or else by a #version directive with version value 100 or with a string of "es" following the version value. There's no behavioral change with this commit—just preparation for ES-specific behavior in the preprocessor in the future. Reviewed-by: Matt Turner Reviewed-by: Ian Romanick --- src/glsl/glcpp/glcpp-parse.y | 26 +++++++++++++++----------- src/glsl/glcpp/glcpp.h | 1 + 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y index 380a1d99cb4..76dcd42290c 100644 --- a/src/glsl/glcpp/glcpp-parse.y +++ b/src/glsl/glcpp/glcpp-parse.y @@ -1179,15 +1179,18 @@ glcpp_parser_create (const struct gl_extensions *extensions, int api) parser->has_new_source_number = 0; parser->new_source_number = 0; + parser->is_gles = false; + /* Add pre-defined macros. */ if (extensions != NULL) { if (extensions->OES_EGL_image_external) add_builtin_define(parser, "GL_OES_EGL_image_external", 1); } - if (api == API_OPENGLES2) + if (api == API_OPENGLES2) { + parser->is_gles = true; add_builtin_define(parser, "GL_ES", 1); - else { + } else { add_builtin_define(parser, "GL_ARB_draw_buffers", 1); add_builtin_define(parser, "GL_ARB_texture_rectangle", 1); @@ -2026,11 +2029,6 @@ 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__"); @@ -2038,17 +2036,23 @@ _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) + /* If we didn't have a GLES context to begin with, (indicated + * by parser->api), then the version declaration here might + * indicate GLES. */ + if (! parser->is_gles && + (version == 100 || + (es_identifier && (strcmp(es_identifier, "es") == 0)))) + { + parser->is_gles = true; add_builtin_define (parser, "GL_ES", 1); + } /* 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 || is_es) + if (version >= 130 || parser->is_gles) add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, diff --git a/src/glsl/glcpp/glcpp.h b/src/glsl/glcpp/glcpp.h index a459289b2e4..03a77b7047a 100644 --- a/src/glsl/glcpp/glcpp.h +++ b/src/glsl/glcpp/glcpp.h @@ -182,6 +182,7 @@ struct glcpp_parser { int new_line_number; bool has_new_source_number; int new_source_number; + bool is_gles; }; struct gl_extensions; -- 2.30.2