Mesa (gles3): glcpp: Add a flag to the parser state to indicate GLES.
Carl Worth
cworth at kemper.freedesktop.org
Tue Nov 27 21:26:23 UTC 2012
Module: Mesa
Branch: gles3
Commit: 4beab01ee1d705c341774fd798332665aa1b6644
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4beab01ee1d705c341774fd798332665aa1b6644
Author: Carl Worth <cworth at cworth.org>
Date: Mon Nov 26 14:53:54 2012 -0800
glcpp: Add a flag to the parser state to indicate GLES.
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 <mattst88 at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
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 f62cbe4..258eb6e 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -1138,15 +1138,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);
@@ -1965,11 +1968,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__");
@@ -1977,17 +1975,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 a459289..03a77b7 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;
More information about the mesa-commit
mailing list