glcpp: Accept pointer to GL context rather than just the API version
authorCarl Worth <cworth@cworth.org>
Wed, 5 Dec 2012 20:56:16 +0000 (12:56 -0800)
committerCarl Worth <cworth@cworth.org>
Fri, 11 Jan 2013 21:55:41 +0000 (13:55 -0800)
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>
src/glsl/glcpp/glcpp.c
src/glsl/glcpp/glcpp.h
src/glsl/glcpp/pp.c
src/glsl/glsl_parser_extras.h
src/glsl/main.cpp
src/glsl/test_optpass.cpp
src/mesa/program/ir_to_mesa.cpp

index 7c2ded850bd9986045b08acd25d0f5c7ed1fd0db..79fbdac5cc0f84484d3b650da22efce31413fe16 100644 (file)
@@ -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);
index 03a77b7047a06e9ba27fac03638e16673272121d..8aaa551d128b538f11c59a4727cb869d27e5674d 100644 (file)
@@ -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 */
 
index 11b29417be262b1eb3105dcb0304c9b3f4a1e4aa..5f86a499cd42fc6143e0832e7f5e23c665d3b20c 100644 (file)
@@ -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);
index 46e0784ba3685a07aff00cf34ec70e25e75a5ab4..2e6bb0b0a3ddcbcb302b75e5832fa4645734f056 100644 (file)
@@ -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);
index a84d010f460c1e395049ebe97bda8c64c7931fdb..ed6f122798aa654cc2017ed64996b3feb1baf225 100644 (file)
@@ -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);
index ce5df24d90455869930882f5eba8060d1bcb467d..117b0b006bcc5b46c0402f9482a8825b44b79e5f 100644 (file)
@@ -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);
index d5b9683db134dfa27cfc609effff7587621694a7..0f7439b3b069d8c0e7481a46bb451aee1e45124e 100644 (file)
@@ -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",