glsl: Define GL_ES preprocessor macro if API is OpenGL ES 2.0.

Also define it if #version 100 is encountered.
This commit is contained in:
Kenneth Graunke 2010-09-05 01:27:02 -07:00
parent 719caa403e
commit 7dcfc44b72
9 changed files with 250 additions and 228 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,9 @@
/* A Bison parser, made by GNU Bison 2.4.1. */
/* A Bison parser, made by GNU Bison 2.4.3. */
/* Skeleton interface for Bison's Yacc-like parsers in C
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -30,6 +30,7 @@
#include "glcpp.h"
#include "main/core.h" /* for struct gl_extensions */
#include "main/mtypes.h" /* for gl_api enum */
#define glcpp_print(stream, str) stream = talloc_strdup_append(stream, str)
#define glcpp_printf(stream, fmt, args, ...) \
@ -309,6 +310,9 @@ control_line:
_glcpp_parser_skip_stack_pop (parser, & @1);
}
| HASH_VERSION integer_constant NEWLINE {
if ($2 == 100)
add_builtin_define (parser, "GL_ES", 1);
macro_t *macro = hash_table_find (parser->defines, "__VERSION__");
if (macro) {
hash_table_remove (parser->defines, "__VERSION__");
@ -1048,7 +1052,7 @@ static void add_builtin_define(glcpp_parser_t *parser,
}
glcpp_parser_t *
glcpp_parser_create (const struct gl_extensions *extensions)
glcpp_parser_create (const struct gl_extensions *extensions, int api)
{
glcpp_parser_t *parser;
int language_version;
@ -1078,6 +1082,9 @@ glcpp_parser_create (const struct gl_extensions *extensions)
add_builtin_define(parser, "GL_ARB_draw_buffers", 1);
add_builtin_define(parser, "GL_ARB_texture_rectangle", 1);
if (api == API_OPENGLES2)
add_builtin_define(parser, "GL_ES", 1);
if (extensions != NULL) {
if (extensions->EXT_texture_array) {
add_builtin_define(parser, "GL_EXT_texture_array", 1);

View File

@ -28,6 +28,7 @@
#include <string.h>
#include <errno.h>
#include "glcpp.h"
#include "main/mtypes.h"
extern int yydebug;
@ -111,7 +112,7 @@ main (int argc, char *argv[])
if (shader == NULL)
return 1;
ret = preprocess(ctx, &shader, &info_log, NULL);
ret = preprocess(ctx, &shader, &info_log, NULL, API_OPENGL);
printf("%s", shader);
fprintf(stderr, "%s", info_log);

View File

@ -180,7 +180,7 @@ struct glcpp_parser {
struct gl_extensions;
glcpp_parser_t *
glcpp_parser_create (const struct gl_extensions *extensions);
glcpp_parser_create (const struct gl_extensions *extensions, int api);
int
glcpp_parser_parse (glcpp_parser_t *parser);
@ -190,7 +190,7 @@ glcpp_parser_destroy (glcpp_parser_t *parser);
int
preprocess(void *talloc_ctx, const char **shader, char **info_log,
const struct gl_extensions *extensions);
const struct gl_extensions *extensions, int api);
/* Functions for writing to the info log */

View File

@ -143,10 +143,10 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader)
int
preprocess(void *talloc_ctx, const char **shader, char **info_log,
const struct gl_extensions *extensions)
const struct gl_extensions *extensions, int api)
{
int errors;
glcpp_parser_t *parser = glcpp_parser_create (extensions);
glcpp_parser_t *parser = glcpp_parser_create (extensions, api);
*shader = remove_line_continuations(parser, *shader);
glcpp_lex_set_source_string (parser, *shader);

View File

@ -223,7 +223,7 @@ extern "C" {
#endif
extern int preprocess(void *ctx, const char **shader, char **info_log,
const struct gl_extensions *extensions);
const struct gl_extensions *extensions, int api);
extern void _mesa_destroy_shader_compiler();
extern void _mesa_destroy_shader_compiler_caches();

View File

@ -130,7 +130,7 @@ compile_shader(struct gl_shader *shader)
const char *source = shader->Source;
state->error = preprocess(state, &source, &state->info_log,
state->extensions);
state->extensions, API_OPENGL);
if (!state->error) {
_mesa_glsl_lexer_ctor(state, source);

View File

@ -2769,7 +2769,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
}
state->error = preprocess(state, &source, &state->info_log,
&ctx->Extensions);
&ctx->Extensions, ctx->API);
if (ctx->Shader.Flags & GLSL_DUMP) {
printf("GLSL source for shader %d:\n", shader->Name);