summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/shader/slang/slang_compile.c33
1 files changed, 11 insertions, 22 deletions
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index 54eb092f1a7..2622b796fdb 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -2584,6 +2584,7 @@ compile_with_grammar(const char *source,
unsigned int shader_type,
unsigned int parsing_builtin)
{
+ struct sl_pp_purify_options options;
struct sl_pp_context *context;
struct sl_pp_token_info *tokens;
unsigned char *prod;
@@ -2591,18 +2592,23 @@ compile_with_grammar(const char *source,
unsigned int version;
unsigned int maxVersion;
int result;
- struct sl_pp_purify_options options;
char errmsg[200] = "";
unsigned int errline = 0;
- struct sl_pp_token_info *intokens;
- unsigned int tokens_eaten;
- context = sl_pp_context_create();
+ memset(&options, 0, sizeof(options));
+
+ context = sl_pp_context_create(source, &options);
if (!context) {
slang_info_log_error(infolog, "out of memory");
return GL_FALSE;
}
+ if (sl_pp_version(context, &version)) {
+ slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context));
+ sl_pp_context_destroy(context);
+ return GL_FALSE;
+ }
+
if (sl_pp_context_add_extension(context, "ARB_draw_buffers", "GL_ARB_draw_buffers") ||
sl_pp_context_add_extension(context, "ARB_texture_rectangle", "GL_ARB_texture_rectangle")) {
slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context));
@@ -2619,29 +2625,12 @@ compile_with_grammar(const char *source,
}
#endif
- memset(&options, 0, sizeof(options));
- if (sl_pp_tokenise(context, source, &options, &intokens)) {
+ if (sl_pp_process(context, &tokens)) {
slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context));
sl_pp_context_destroy(context);
return GL_FALSE;
}
- if (sl_pp_version(context, intokens, &version, &tokens_eaten)) {
- slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context));
- sl_pp_context_destroy(context);
- free(intokens);
- return GL_FALSE;
- }
-
- if (sl_pp_process(context, &intokens[tokens_eaten], &tokens)) {
- slang_info_log_error(infolog, "%s", sl_pp_context_error_message(context));
- sl_pp_context_destroy(context);
- free(intokens);
- return GL_FALSE;
- }
-
- free(intokens);
-
/* For the time being we care about only a handful of tokens. */
{
const struct sl_pp_token_info *src = tokens;