diff options
author | Carl Worth <cworth@cworth.org> | 2012-12-05 12:56:16 -0800 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2013-01-11 13:55:41 -0800 |
commit | f8987f99720c46dda1adfff05bcb2884cac01bd8 (patch) | |
tree | d9c04d673340c47d6c1661a27fa3729f1546bc54 | |
parent | 4b00ecebd0019202315f0f4a9e6105d962e659f7 (diff) | |
download | mesa-f8987f99720c46dda1adfff05bcb2884cac01bd8.tar.gz |
glcpp: Accept pointer to GL context rather than just the API version
As the preprocessor becomes more sophisticated and gains more optional
behavior, it's easiest to just pass the GL context pointer to it so that
it can examine any fields there that it needs to (such as API version,
or the state of any driconf options, etc.).
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r-- | src/glsl/glcpp/glcpp.c | 13 | ||||
-rw-r--r-- | src/glsl/glcpp/glcpp.h | 4 | ||||
-rw-r--r-- | src/glsl/glcpp/pp.c | 4 | ||||
-rw-r--r-- | src/glsl/glsl_parser_extras.h | 2 | ||||
-rw-r--r-- | src/glsl/main.cpp | 2 | ||||
-rw-r--r-- | src/glsl/test_optpass.cpp | 2 | ||||
-rw-r--r-- | src/mesa/program/ir_to_mesa.cpp | 2 |
7 files changed, 21 insertions, 8 deletions
diff --git a/src/glsl/glcpp/glcpp.c b/src/glsl/glcpp/glcpp.c index 7c2ded850b..79fbdac5cc 100644 --- a/src/glsl/glcpp/glcpp.c +++ b/src/glsl/glcpp/glcpp.c @@ -94,6 +94,14 @@ load_text_file(void *ctx, const char *filename) return text; } +/* Initialize only those things that glcpp cares about. + */ +static void +init_fake_gl_context (struct gl_context *gl_ctx) +{ + gl_ctx->API = API_OPENGL_COMPAT; +} + int main (int argc, char *argv[]) { @@ -102,6 +110,9 @@ main (int argc, char *argv[]) char *info_log = ralloc_strdup(ctx, ""); const char *shader; int ret; + struct gl_context gl_ctx; + + init_fake_gl_context (&gl_ctx); if (argc) { filename = argv[1]; @@ -111,7 +122,7 @@ main (int argc, char *argv[]) if (shader == NULL) return 1; - ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, API_OPENGL_COMPAT); + ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, &gl_ctx); printf("%s", shader); fprintf(stderr, "%s", info_log); diff --git a/src/glsl/glcpp/glcpp.h b/src/glsl/glcpp/glcpp.h index 03a77b7047..8aaa551d12 100644 --- a/src/glsl/glcpp/glcpp.h +++ b/src/glsl/glcpp/glcpp.h @@ -27,6 +27,8 @@ #include <stdint.h> #include <stdbool.h> +#include "main/mtypes.h" + #include "../ralloc.h" #include "program/hash_table.h" @@ -198,7 +200,7 @@ glcpp_parser_destroy (glcpp_parser_t *parser); int glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, - const struct gl_extensions *extensions, int api); + const struct gl_extensions *extensions, struct gl_context *g_ctx); /* Functions for writing to the info log */ diff --git a/src/glsl/glcpp/pp.c b/src/glsl/glcpp/pp.c index 11b29417be..5f86a499cd 100644 --- a/src/glsl/glcpp/pp.c +++ b/src/glsl/glcpp/pp.c @@ -151,10 +151,10 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader) int glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, - const struct gl_extensions *extensions, int api) + const struct gl_extensions *extensions, struct gl_context *gl_ctx) { int errors; - glcpp_parser_t *parser = glcpp_parser_create (extensions, api); + glcpp_parser_t *parser = glcpp_parser_create (extensions, gl_ctx->API); *shader = remove_line_continuations(parser, *shader); glcpp_lex_set_source_string (parser, *shader); diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h index 46e0784ba3..2e6bb0b0a3 100644 --- a/src/glsl/glsl_parser_extras.h +++ b/src/glsl/glsl_parser_extras.h @@ -354,7 +354,7 @@ extern "C" { #endif extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, - const struct gl_extensions *extensions, int api); + const struct gl_extensions *extensions, struct gl_context *gl_ctx); extern void _mesa_destroy_shader_compiler(void); extern void _mesa_destroy_shader_compiler_caches(void); diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp index a84d010f46..ed6f122798 100644 --- a/src/glsl/main.cpp +++ b/src/glsl/main.cpp @@ -146,7 +146,7 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader) const char *source = shader->Source; state->error = glcpp_preprocess(state, &source, &state->info_log, - state->extensions, ctx->API) != 0; + state->extensions, ctx) != 0; if (!state->error) { _mesa_glsl_lexer_ctor(state, source); diff --git a/src/glsl/test_optpass.cpp b/src/glsl/test_optpass.cpp index ce5df24d90..117b0b006b 100644 --- a/src/glsl/test_optpass.cpp +++ b/src/glsl/test_optpass.cpp @@ -217,7 +217,7 @@ int test_optpass(int argc, char **argv) shader->Source = input.c_str(); const char *source = shader->Source; state->error = glcpp_preprocess(state, &source, &state->info_log, - state->extensions, ctx->API) != 0; + state->extensions, ctx) != 0; if (!state->error) { _mesa_glsl_lexer_ctor(state, source); diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index d5b9683db1..0f7439b3b0 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -3061,7 +3061,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader) } state->error = glcpp_preprocess(state, &source, &state->info_log, - &ctx->Extensions, ctx->API); + &ctx->Extensions, ctx); if (ctx->Shader.Flags & GLSL_DUMP) { printf("GLSL source for %s shader %d:\n", |