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:
@@ -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);
|
||||
|
@@ -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 */
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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",
|
||||
|
Reference in New Issue
Block a user