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:
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,9 @@
|
|||||||
|
/* A Bison parser, made by GNU Bison 2.4.3. */
|
||||||
/* A Bison parser, made by GNU Bison 2.4.1. */
|
|
||||||
|
|
||||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||||
|
|
||||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||||
Free Software Foundation, Inc.
|
2009, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "glcpp.h"
|
#include "glcpp.h"
|
||||||
#include "main/core.h" /* for struct gl_extensions */
|
#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_print(stream, str) stream = talloc_strdup_append(stream, str)
|
||||||
#define glcpp_printf(stream, fmt, args, ...) \
|
#define glcpp_printf(stream, fmt, args, ...) \
|
||||||
@@ -309,6 +310,9 @@ control_line:
|
|||||||
_glcpp_parser_skip_stack_pop (parser, & @1);
|
_glcpp_parser_skip_stack_pop (parser, & @1);
|
||||||
}
|
}
|
||||||
| HASH_VERSION integer_constant NEWLINE {
|
| HASH_VERSION integer_constant NEWLINE {
|
||||||
|
if ($2 == 100)
|
||||||
|
add_builtin_define (parser, "GL_ES", 1);
|
||||||
|
|
||||||
macro_t *macro = hash_table_find (parser->defines, "__VERSION__");
|
macro_t *macro = hash_table_find (parser->defines, "__VERSION__");
|
||||||
if (macro) {
|
if (macro) {
|
||||||
hash_table_remove (parser->defines, "__VERSION__");
|
hash_table_remove (parser->defines, "__VERSION__");
|
||||||
@@ -1048,7 +1052,7 @@ static void add_builtin_define(glcpp_parser_t *parser,
|
|||||||
}
|
}
|
||||||
|
|
||||||
glcpp_parser_t *
|
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;
|
glcpp_parser_t *parser;
|
||||||
int language_version;
|
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_draw_buffers", 1);
|
||||||
add_builtin_define(parser, "GL_ARB_texture_rectangle", 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 != NULL) {
|
||||||
if (extensions->EXT_texture_array) {
|
if (extensions->EXT_texture_array) {
|
||||||
add_builtin_define(parser, "GL_EXT_texture_array", 1);
|
add_builtin_define(parser, "GL_EXT_texture_array", 1);
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "glcpp.h"
|
#include "glcpp.h"
|
||||||
|
#include "main/mtypes.h"
|
||||||
|
|
||||||
extern int yydebug;
|
extern int yydebug;
|
||||||
|
|
||||||
@@ -111,7 +112,7 @@ main (int argc, char *argv[])
|
|||||||
if (shader == NULL)
|
if (shader == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
ret = preprocess(ctx, &shader, &info_log, NULL);
|
ret = preprocess(ctx, &shader, &info_log, NULL, API_OPENGL);
|
||||||
|
|
||||||
printf("%s", shader);
|
printf("%s", shader);
|
||||||
fprintf(stderr, "%s", info_log);
|
fprintf(stderr, "%s", info_log);
|
||||||
|
@@ -180,7 +180,7 @@ struct glcpp_parser {
|
|||||||
struct gl_extensions;
|
struct gl_extensions;
|
||||||
|
|
||||||
glcpp_parser_t *
|
glcpp_parser_t *
|
||||||
glcpp_parser_create (const struct gl_extensions *extensions);
|
glcpp_parser_create (const struct gl_extensions *extensions, int api);
|
||||||
|
|
||||||
int
|
int
|
||||||
glcpp_parser_parse (glcpp_parser_t *parser);
|
glcpp_parser_parse (glcpp_parser_t *parser);
|
||||||
@@ -190,7 +190,7 @@ glcpp_parser_destroy (glcpp_parser_t *parser);
|
|||||||
|
|
||||||
int
|
int
|
||||||
preprocess(void *talloc_ctx, const char **shader, char **info_log,
|
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 */
|
/* Functions for writing to the info log */
|
||||||
|
|
||||||
|
@@ -143,10 +143,10 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader)
|
|||||||
|
|
||||||
int
|
int
|
||||||
preprocess(void *talloc_ctx, const char **shader, char **info_log,
|
preprocess(void *talloc_ctx, const char **shader, char **info_log,
|
||||||
const struct gl_extensions *extensions)
|
const struct gl_extensions *extensions, int api)
|
||||||
{
|
{
|
||||||
int errors;
|
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);
|
*shader = remove_line_continuations(parser, *shader);
|
||||||
|
|
||||||
glcpp_lex_set_source_string (parser, *shader);
|
glcpp_lex_set_source_string (parser, *shader);
|
||||||
|
@@ -223,7 +223,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int preprocess(void *ctx, const char **shader, char **info_log,
|
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();
|
||||||
extern void _mesa_destroy_shader_compiler_caches();
|
extern void _mesa_destroy_shader_compiler_caches();
|
||||||
|
@@ -130,7 +130,7 @@ compile_shader(struct gl_shader *shader)
|
|||||||
|
|
||||||
const char *source = shader->Source;
|
const char *source = shader->Source;
|
||||||
state->error = preprocess(state, &source, &state->info_log,
|
state->error = preprocess(state, &source, &state->info_log,
|
||||||
state->extensions);
|
state->extensions, API_OPENGL);
|
||||||
|
|
||||||
if (!state->error) {
|
if (!state->error) {
|
||||||
_mesa_glsl_lexer_ctor(state, source);
|
_mesa_glsl_lexer_ctor(state, source);
|
||||||
|
@@ -2769,7 +2769,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
|
|||||||
}
|
}
|
||||||
|
|
||||||
state->error = preprocess(state, &source, &state->info_log,
|
state->error = preprocess(state, &source, &state->info_log,
|
||||||
&ctx->Extensions);
|
&ctx->Extensions, ctx->API);
|
||||||
|
|
||||||
if (ctx->Shader.Flags & GLSL_DUMP) {
|
if (ctx->Shader.Flags & GLSL_DUMP) {
|
||||||
printf("GLSL source for shader %d:\n", shader->Name);
|
printf("GLSL source for shader %d:\n", shader->Name);
|
||||||
|
Reference in New Issue
Block a user