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);
|
||||
|
Reference in New Issue
Block a user