diff options
-rw-r--r-- | src/mesa/shader/slang/slang_compile.c | 33 |
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; |