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;
}
/* 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);

View 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 */

View 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);

View 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);

View 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);

View 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);

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