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>
This commit is contained in:
Carl Worth
2012-12-05 12:56:16 -08:00
parent 4b00ecebd0
commit f8987f9972
7 changed files with 21 additions and 8 deletions

View File

@@ -94,6 +94,14 @@ load_text_file(void *ctx, const char *filename)
return text; 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 int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
@@ -102,6 +110,9 @@ main (int argc, char *argv[])
char *info_log = ralloc_strdup(ctx, ""); char *info_log = ralloc_strdup(ctx, "");
const char *shader; const char *shader;
int ret; int ret;
struct gl_context gl_ctx;
init_fake_gl_context (&gl_ctx);
if (argc) { if (argc) {
filename = argv[1]; filename = argv[1];
@@ -111,7 +122,7 @@ main (int argc, char *argv[])
if (shader == NULL) if (shader == NULL)
return 1; 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); printf("%s", shader);
fprintf(stderr, "%s", info_log); fprintf(stderr, "%s", info_log);

View File

@@ -27,6 +27,8 @@
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include "main/mtypes.h"
#include "../ralloc.h" #include "../ralloc.h"
#include "program/hash_table.h" #include "program/hash_table.h"
@@ -198,7 +200,7 @@ glcpp_parser_destroy (glcpp_parser_t *parser);
int int
glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, 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 */ /* Functions for writing to the info log */

View File

@@ -151,10 +151,10 @@ remove_line_continuations(glcpp_parser_t *ctx, const char *shader)
int int
glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, 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; 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); *shader = remove_line_continuations(parser, *shader);
glcpp_lex_set_source_string (parser, *shader); glcpp_lex_set_source_string (parser, *shader);

View File

@@ -354,7 +354,7 @@ extern "C" {
#endif #endif
extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, 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(void);
extern void _mesa_destroy_shader_compiler_caches(void); extern void _mesa_destroy_shader_compiler_caches(void);

View File

@@ -146,7 +146,7 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader)
const char *source = shader->Source; const char *source = shader->Source;
state->error = glcpp_preprocess(state, &source, &state->info_log, state->error = glcpp_preprocess(state, &source, &state->info_log,
state->extensions, ctx->API) != 0; state->extensions, ctx) != 0;
if (!state->error) { if (!state->error) {
_mesa_glsl_lexer_ctor(state, source); _mesa_glsl_lexer_ctor(state, source);

View File

@@ -217,7 +217,7 @@ int test_optpass(int argc, char **argv)
shader->Source = input.c_str(); shader->Source = input.c_str();
const char *source = shader->Source; const char *source = shader->Source;
state->error = glcpp_preprocess(state, &source, &state->info_log, state->error = glcpp_preprocess(state, &source, &state->info_log,
state->extensions, ctx->API) != 0; state->extensions, ctx) != 0;
if (!state->error) { if (!state->error) {
_mesa_glsl_lexer_ctor(state, source); _mesa_glsl_lexer_ctor(state, source);

View 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, state->error = glcpp_preprocess(state, &source, &state->info_log,
&ctx->Extensions, ctx->API); &ctx->Extensions, ctx);
if (ctx->Shader.Flags & GLSL_DUMP) { if (ctx->Shader.Flags & GLSL_DUMP) {
printf("GLSL source for %s shader %d:\n", printf("GLSL source for %s shader %d:\n",