From 121769eeb314ea580a3292309332ebbf0a409b3c Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 11 Jun 2009 18:56:10 +0200 Subject: glsl: Add a purify command-line tool. --- src/glsl/apps/SConscript | 18 ++++++++++ src/glsl/apps/purify.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 src/glsl/apps/SConscript create mode 100644 src/glsl/apps/purify.c (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript new file mode 100644 index 0000000000..d68e6b23b3 --- /dev/null +++ b/src/glsl/apps/SConscript @@ -0,0 +1,18 @@ +Import('*') + +if env['platform'] not in ['windows']: + Return() + +env = env.Clone() + +if env['platform'] == 'windows': + env.PrependUnique(LIBS = [ + 'user32', + ]) + +env.Prepend(LIBS = [glsl]) + +env.Program( + target = 'purify', + source = ['purify.c'], +) diff --git a/src/glsl/apps/purify.c b/src/glsl/apps/purify.c new file mode 100644 index 0000000000..7dff8aea45 --- /dev/null +++ b/src/glsl/apps/purify.c @@ -0,0 +1,93 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include +#include "../pp/sl_pp_purify.h" + + +int +main(int argc, + char *argv[]) +{ + FILE *in; + long size; + char *inbuf; + struct sl_pp_purify_options options; + char *outbuf; + FILE *out; + + if (argc != 3) { + return 1; + } + + in = fopen(argv[1], "rb"); + if (!in) { + return 1; + } + + fseek(in, 0, SEEK_END); + size = ftell(in); + fseek(in, 0, SEEK_SET); + + inbuf = malloc(size + 1); + if (!inbuf) { + fclose(in); + return 1; + } + + if (fread(inbuf, 1, size, in) != size) { + free(inbuf); + fclose(in); + return 1; + } + inbuf[size] = '\0'; + + fclose(in); + + memset(&options, 0, sizeof(options)); + + if (sl_pp_purify(inbuf, &options, &outbuf)) { + free(inbuf); + return 1; + } + + free(inbuf); + + out = fopen(argv[2], "wb"); + if (!out) { + free(outbuf); + return 1; + } + + fwrite(outbuf, 1, strlen(outbuf), out); + + free(outbuf); + fclose(out); + + return 0; +} -- cgit v1.2.3 From 0d5ef796f847bc51888a8883110cc607494a61f0 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 12 Jun 2009 12:57:59 +0200 Subject: glsl: Add a tokenise app. --- src/glsl/apps/SConscript | 5 + src/glsl/apps/tokenise.c | 318 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 323 insertions(+) create mode 100644 src/glsl/apps/tokenise.c (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript index d68e6b23b3..6af1e55253 100644 --- a/src/glsl/apps/SConscript +++ b/src/glsl/apps/SConscript @@ -16,3 +16,8 @@ env.Program( target = 'purify', source = ['purify.c'], ) + +env.Program( + target = 'tokenise', + source = ['tokenise.c'], +) diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c new file mode 100644 index 0000000000..2631b82998 --- /dev/null +++ b/src/glsl/apps/tokenise.c @@ -0,0 +1,318 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include +#include +#include "../pp/sl_pp_purify.h" +#include "../pp/sl_pp_token.h" + + +int +main(int argc, + char *argv[]) +{ + FILE *in; + long size; + char *inbuf; + struct sl_pp_purify_options options; + char *outbuf; + struct sl_pp_token_info *tokens; + FILE *out; + unsigned int i; + + if (argc != 3) { + return 1; + } + + in = fopen(argv[1], "rb"); + if (!in) { + return 1; + } + + fseek(in, 0, SEEK_END); + size = ftell(in); + fseek(in, 0, SEEK_SET); + + inbuf = malloc(size + 1); + if (!inbuf) { + fclose(in); + return 1; + } + + if (fread(inbuf, 1, size, in) != size) { + free(inbuf); + fclose(in); + return 1; + } + inbuf[size] = '\0'; + + fclose(in); + + memset(&options, 0, sizeof(options)); + + if (sl_pp_purify(inbuf, &options, &outbuf)) { + free(inbuf); + return 1; + } + + free(inbuf); + + if (sl_pp_tokenise(outbuf, &tokens)) { + free(outbuf); + return 1; + } + + free(outbuf); + + out = fopen(argv[2], "wb"); + if (!out) { + free(tokens); + return 1; + } + + for (i = 0; tokens[i].token != SL_PP_EOF; i++) { + switch (tokens[i].token) { + case SL_PP_WHITESPACE: + break; + + case SL_PP_NEWLINE: + fprintf(out, "\n"); + break; + + case SL_PP_HASH: + fprintf(out, "# "); + break; + + case SL_PP_COMMA: + fprintf(out, ", "); + break; + + case SL_PP_SEMICOLON: + fprintf(out, "; "); + break; + + case SL_PP_LBRACE: + fprintf(out, "{ "); + break; + + case SL_PP_RBRACE: + fprintf(out, "} "); + break; + + case SL_PP_LPAREN: + fprintf(out, "( "); + break; + + case SL_PP_RPAREN: + fprintf(out, ") "); + break; + + case SL_PP_LBRACKET: + fprintf(out, "[ "); + break; + + case SL_PP_RBRACKET: + fprintf(out, "] "); + break; + + case SL_PP_DOT: + fprintf(out, ". "); + break; + + case SL_PP_INCREMENT: + fprintf(out, "++ "); + break; + + case SL_PP_ADDASSIGN: + fprintf(out, "+= "); + break; + + case SL_PP_PLUS: + fprintf(out, "+ "); + break; + + case SL_PP_DECREMENT: + fprintf(out, "-- "); + break; + + case SL_PP_SUBASSIGN: + fprintf(out, "-= "); + break; + + case SL_PP_MINUS: + fprintf(out, "- "); + break; + + case SL_PP_BITNOT: + fprintf(out, "~ "); + break; + + case SL_PP_NOTEQUAL: + fprintf(out, "!= "); + break; + + case SL_PP_NOT: + fprintf(out, "! "); + break; + + case SL_PP_MULASSIGN: + fprintf(out, "*= "); + break; + + case SL_PP_STAR: + fprintf(out, "* "); + break; + + case SL_PP_DIVASSIGN: + fprintf(out, "/= "); + break; + + case SL_PP_SLASH: + fprintf(out, "/ "); + break; + + case SL_PP_MODASSIGN: + fprintf(out, "%= "); + break; + + case SL_PP_MODULO: + fprintf(out, "% "); + break; + + case SL_PP_LSHIFTASSIGN: + fprintf(out, "<<= "); + break; + + case SL_PP_LSHIFT: + fprintf(out, "<< "); + break; + + case SL_PP_LESSEQUAL: + fprintf(out, "<= "); + break; + + case SL_PP_LESS: + fprintf(out, "< "); + break; + + case SL_PP_RSHIFTASSIGN: + fprintf(out, ">>= "); + break; + + case SL_PP_RSHIFT: + fprintf(out, ">> "); + break; + + case SL_PP_GREATEREQUAL: + fprintf(out, ">= "); + break; + + case SL_PP_GREATER: + fprintf(out, "> "); + break; + + case SL_PP_EQUAL: + fprintf(out, "== "); + break; + + case SL_PP_ASSIGN: + fprintf(out, "= "); + break; + + case SL_PP_AND: + fprintf(out, "&& "); + break; + + case SL_PP_BITANDASSIGN: + fprintf(out, "&= "); + break; + + case SL_PP_BITAND: + fprintf(out, "& "); + break; + + case SL_PP_XOR: + fprintf(out, "^^ "); + break; + + case SL_PP_BITXORASSIGN: + fprintf(out, "^= "); + break; + + case SL_PP_BITXOR: + fprintf(out, "^ "); + break; + + case SL_PP_OR: + fprintf(out, "|| "); + break; + + case SL_PP_BITORASSIGN: + fprintf(out, "|= "); + break; + + case SL_PP_BITOR: + fprintf(out, "| "); + break; + + case SL_PP_QUESTION: + fprintf(out, "? "); + break; + + case SL_PP_COLON: + fprintf(out, ": "); + break; + + case SL_PP_IDENTIFIER: + fprintf(out, "%s ", tokens[i].data.identifier); + free(tokens[i].data.identifier); + break; + + case SL_PP_NUMBER: + fprintf(out, "(%s) ", tokens[i].data.number); + free(tokens[i].data.number); + break; + + case SL_PP_OTHER: + if (tokens[i].data.other == '\'') { + fprintf(out, "'\\'' "); + } else { + fprintf(out, "'%c' ", tokens[i].data.other); + } + break; + + default: + assert(0); + } + } + + free(tokens); + fclose(out); + + return 0; +} -- cgit v1.2.3 From af617c603720cf41ec433f1653cc6dbdcffd8e31 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Sat, 13 Jun 2009 13:44:56 +0200 Subject: glsl/apps: Add version test app. --- src/glsl/apps/SConscript | 5 +++ src/glsl/apps/version.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 src/glsl/apps/version.c (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript index 6af1e55253..ce4c6ec390 100644 --- a/src/glsl/apps/SConscript +++ b/src/glsl/apps/SConscript @@ -21,3 +21,8 @@ env.Program( target = 'tokenise', source = ['tokenise.c'], ) + +env.Program( + target = 'version', + source = ['version.c'], +) diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c new file mode 100644 index 0000000000..e774c4a8f1 --- /dev/null +++ b/src/glsl/apps/version.c @@ -0,0 +1,110 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include +#include +#include "../pp/sl_pp_purify.h" +#include "../pp/sl_pp_version.h" + + +int +main(int argc, + char *argv[]) +{ + FILE *in; + long size; + char *inbuf; + struct sl_pp_purify_options options; + char *outbuf; + struct sl_pp_token_info *tokens; + unsigned int version; + unsigned int tokens_eaten; + FILE *out; + + if (argc != 3) { + return 1; + } + + in = fopen(argv[1], "rb"); + if (!in) { + return 1; + } + + fseek(in, 0, SEEK_END); + size = ftell(in); + fseek(in, 0, SEEK_SET); + + inbuf = malloc(size + 1); + if (!inbuf) { + fclose(in); + return 1; + } + + if (fread(inbuf, 1, size, in) != size) { + free(inbuf); + fclose(in); + return 1; + } + inbuf[size] = '\0'; + + fclose(in); + + memset(&options, 0, sizeof(options)); + + if (sl_pp_purify(inbuf, &options, &outbuf)) { + free(inbuf); + return 1; + } + + free(inbuf); + + if (sl_pp_tokenise(outbuf, &tokens)) { + free(outbuf); + return 1; + } + + free(outbuf); + + if (sl_pp_version(tokens, &version, &tokens_eaten)) { + free(tokens); + return -1; + } + + free(tokens); + + out = fopen(argv[2], "wb"); + if (!out) { + return 1; + } + + fprintf(out, "%u\n", version); + + fclose(out); + + return 0; +} -- cgit v1.2.3 From 55f75c13f05ea6373b95f0777078fcdec226672a Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Sat, 13 Jun 2009 19:42:11 +0200 Subject: glsl/apps: Print out the number of tokens eaten in version test. --- src/glsl/apps/version.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index e774c4a8f1..b49395ba97 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -102,7 +102,10 @@ main(int argc, return 1; } - fprintf(out, "%u\n", version); + fprintf(out, + "%u\n%u\n", + version, + tokens_eaten); fclose(out); -- cgit v1.2.3 From f24ec185c531d2b2209df01901c90eca57ca711f Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Mon, 15 Jun 2009 11:02:04 +0200 Subject: glsl: Add `process' test app that returns tokenised and preprocessed text. --- src/glsl/apps/SConscript | 5 + src/glsl/apps/process.c | 323 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 328 insertions(+) create mode 100644 src/glsl/apps/process.c (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript index ce4c6ec390..12a0018d1c 100644 --- a/src/glsl/apps/SConscript +++ b/src/glsl/apps/SConscript @@ -26,3 +26,8 @@ env.Program( target = 'version', source = ['version.c'], ) + +env.Program( + target = 'process', + source = ['process.c'], +) diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c new file mode 100644 index 0000000000..6e2828aa41 --- /dev/null +++ b/src/glsl/apps/process.c @@ -0,0 +1,323 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include +#include +#include "../pp/sl_pp_purify.h" +#include "../pp/sl_pp_version.h" +#include "../pp/sl_pp_process.h" + + +int +main(int argc, + char *argv[]) +{ + FILE *in; + long size; + char *inbuf; + struct sl_pp_purify_options options; + char *outbuf; + struct sl_pp_token_info *tokens; + unsigned int version; + unsigned int tokens_eaten; + struct sl_pp_token_info *outtokens; + FILE *out; + unsigned int i; + + if (argc != 3) { + return 1; + } + + in = fopen(argv[1], "rb"); + if (!in) { + return 1; + } + + fseek(in, 0, SEEK_END); + size = ftell(in); + fseek(in, 0, SEEK_SET); + + inbuf = malloc(size + 1); + if (!inbuf) { + fclose(in); + return 1; + } + + if (fread(inbuf, 1, size, in) != size) { + free(inbuf); + fclose(in); + return 1; + } + inbuf[size] = '\0'; + + fclose(in); + + memset(&options, 0, sizeof(options)); + + if (sl_pp_purify(inbuf, &options, &outbuf)) { + free(inbuf); + return 1; + } + + free(inbuf); + + if (sl_pp_tokenise(outbuf, &tokens)) { + free(outbuf); + return 1; + } + + free(outbuf); + + if (sl_pp_version(tokens, &version, &tokens_eaten)) { + free(tokens); + return -1; + } + + if (sl_pp_process(&tokens[tokens_eaten], &outtokens)) { + free(tokens); + return -1; + } + + free(tokens); + + out = fopen(argv[2], "wb"); + if (!out) { + free(outtokens); + return 1; + } + + for (i = 0; outtokens[i].token != SL_PP_EOF; i++) { + switch (outtokens[i].token) { + case SL_PP_NEWLINE: + fprintf(out, "\n"); + break; + + case SL_PP_COMMA: + fprintf(out, ", "); + break; + + case SL_PP_SEMICOLON: + fprintf(out, "; "); + break; + + case SL_PP_LBRACE: + fprintf(out, "{ "); + break; + + case SL_PP_RBRACE: + fprintf(out, "} "); + break; + + case SL_PP_LPAREN: + fprintf(out, "( "); + break; + + case SL_PP_RPAREN: + fprintf(out, ") "); + break; + + case SL_PP_LBRACKET: + fprintf(out, "[ "); + break; + + case SL_PP_RBRACKET: + fprintf(out, "] "); + break; + + case SL_PP_DOT: + fprintf(out, ". "); + break; + + case SL_PP_INCREMENT: + fprintf(out, "++ "); + break; + + case SL_PP_ADDASSIGN: + fprintf(out, "+= "); + break; + + case SL_PP_PLUS: + fprintf(out, "+ "); + break; + + case SL_PP_DECREMENT: + fprintf(out, "-- "); + break; + + case SL_PP_SUBASSIGN: + fprintf(out, "-= "); + break; + + case SL_PP_MINUS: + fprintf(out, "- "); + break; + + case SL_PP_BITNOT: + fprintf(out, "~ "); + break; + + case SL_PP_NOTEQUAL: + fprintf(out, "!= "); + break; + + case SL_PP_NOT: + fprintf(out, "! "); + break; + + case SL_PP_MULASSIGN: + fprintf(out, "*= "); + break; + + case SL_PP_STAR: + fprintf(out, "* "); + break; + + case SL_PP_DIVASSIGN: + fprintf(out, "/= "); + break; + + case SL_PP_SLASH: + fprintf(out, "/ "); + break; + + case SL_PP_MODASSIGN: + fprintf(out, "%= "); + break; + + case SL_PP_MODULO: + fprintf(out, "% "); + break; + + case SL_PP_LSHIFTASSIGN: + fprintf(out, "<<= "); + break; + + case SL_PP_LSHIFT: + fprintf(out, "<< "); + break; + + case SL_PP_LESSEQUAL: + fprintf(out, "<= "); + break; + + case SL_PP_LESS: + fprintf(out, "< "); + break; + + case SL_PP_RSHIFTASSIGN: + fprintf(out, ">>= "); + break; + + case SL_PP_RSHIFT: + fprintf(out, ">> "); + break; + + case SL_PP_GREATEREQUAL: + fprintf(out, ">= "); + break; + + case SL_PP_GREATER: + fprintf(out, "> "); + break; + + case SL_PP_EQUAL: + fprintf(out, "== "); + break; + + case SL_PP_ASSIGN: + fprintf(out, "= "); + break; + + case SL_PP_AND: + fprintf(out, "&& "); + break; + + case SL_PP_BITANDASSIGN: + fprintf(out, "&= "); + break; + + case SL_PP_BITAND: + fprintf(out, "& "); + break; + + case SL_PP_XOR: + fprintf(out, "^^ "); + break; + + case SL_PP_BITXORASSIGN: + fprintf(out, "^= "); + break; + + case SL_PP_BITXOR: + fprintf(out, "^ "); + break; + + case SL_PP_OR: + fprintf(out, "|| "); + break; + + case SL_PP_BITORASSIGN: + fprintf(out, "|= "); + break; + + case SL_PP_BITOR: + fprintf(out, "| "); + break; + + case SL_PP_QUESTION: + fprintf(out, "? "); + break; + + case SL_PP_COLON: + fprintf(out, ": "); + break; + + case SL_PP_IDENTIFIER: + fprintf(out, "%s ", outtokens[i].data.identifier); + free(outtokens[i].data.identifier); + break; + + case SL_PP_NUMBER: + fprintf(out, "(%s) ", outtokens[i].data.number); + free(outtokens[i].data.number); + break; + + case SL_PP_OTHER: + fprintf(out, "%c", outtokens[i].data.other); + break; + + default: + assert(0); + } + } + + free(outtokens); + fclose(out); + + return 0; +} -- cgit v1.2.3 From f24322fbf6599b31f07ebc548e390c77b803d67c Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Wed, 17 Jun 2009 13:49:06 +0200 Subject: glsl: Introduce sl_pp_context and maintain a reuseable pool of strings. --- src/glsl/apps/process.c | 21 ++++++++----- src/glsl/apps/tokenise.c | 15 ++++++--- src/glsl/apps/version.c | 10 ++++-- src/glsl/pp/SConscript | 1 + src/glsl/pp/sl_pp_context.c | 77 +++++++++++++++++++++++++++++++++++++++++++++ src/glsl/pp/sl_pp_context.h | 52 ++++++++++++++++++++++++++++++ src/glsl/pp/sl_pp_process.c | 16 ++-------- src/glsl/pp/sl_pp_process.h | 3 +- src/glsl/pp/sl_pp_token.c | 29 ++++++++--------- src/glsl/pp/sl_pp_token.h | 7 +++-- src/glsl/pp/sl_pp_version.c | 35 +++++++++++++++------ src/glsl/pp/sl_pp_version.h | 4 ++- 12 files changed, 213 insertions(+), 57 deletions(-) create mode 100644 src/glsl/pp/sl_pp_context.c create mode 100644 src/glsl/pp/sl_pp_context.h (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 6e2828aa41..abcf1a92b8 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -28,6 +28,7 @@ #include #include #include +#include "../pp/sl_pp_context.h" #include "../pp/sl_pp_purify.h" #include "../pp/sl_pp_version.h" #include "../pp/sl_pp_process.h" @@ -42,6 +43,7 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + struct sl_pp_context context; struct sl_pp_token_info *tokens; unsigned int version; unsigned int tokens_eaten; @@ -86,19 +88,24 @@ main(int argc, free(inbuf); - if (sl_pp_tokenise(outbuf, &tokens)) { + sl_pp_context_init(&context); + + if (sl_pp_tokenise(&context, outbuf, &tokens)) { + sl_pp_context_destroy(&context); free(outbuf); return 1; } free(outbuf); - if (sl_pp_version(tokens, &version, &tokens_eaten)) { + if (sl_pp_version(&context, tokens, &version, &tokens_eaten)) { + sl_pp_context_destroy(&context); free(tokens); return -1; } - if (sl_pp_process(&tokens[tokens_eaten], &outtokens)) { + if (sl_pp_process(&context, &tokens[tokens_eaten], &outtokens)) { + sl_pp_context_destroy(&context); free(tokens); return -1; } @@ -107,6 +114,7 @@ main(int argc, out = fopen(argv[2], "wb"); if (!out) { + sl_pp_context_destroy(&context); free(outtokens); return 1; } @@ -298,13 +306,11 @@ main(int argc, break; case SL_PP_IDENTIFIER: - fprintf(out, "%s ", outtokens[i].data.identifier); - free(outtokens[i].data.identifier); + fprintf(out, "%s ", sl_pp_context_cstr(&context, outtokens[i].data.identifier)); break; case SL_PP_NUMBER: - fprintf(out, "(%s) ", outtokens[i].data.number); - free(outtokens[i].data.number); + fprintf(out, "%s ", sl_pp_context_cstr(&context, outtokens[i].data.number)); break; case SL_PP_OTHER: @@ -316,6 +322,7 @@ main(int argc, } } + sl_pp_context_destroy(&context); free(outtokens); fclose(out); diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index 2631b82998..b5092ba35f 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -28,6 +28,7 @@ #include #include #include +#include "../pp/sl_pp_context.h" #include "../pp/sl_pp_purify.h" #include "../pp/sl_pp_token.h" @@ -41,6 +42,7 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + struct sl_pp_context context; struct sl_pp_token_info *tokens; FILE *out; unsigned int i; @@ -82,7 +84,10 @@ main(int argc, free(inbuf); - if (sl_pp_tokenise(outbuf, &tokens)) { + sl_pp_context_init(&context); + + if (sl_pp_tokenise(&context, outbuf, &tokens)) { + sl_pp_context_destroy(&context); free(outbuf); return 1; } @@ -91,6 +96,7 @@ main(int argc, out = fopen(argv[2], "wb"); if (!out) { + sl_pp_context_destroy(&context); free(tokens); return 1; } @@ -289,13 +295,11 @@ main(int argc, break; case SL_PP_IDENTIFIER: - fprintf(out, "%s ", tokens[i].data.identifier); - free(tokens[i].data.identifier); + fprintf(out, "%s ", sl_pp_context_cstr(&context, tokens[i].data.identifier)); break; case SL_PP_NUMBER: - fprintf(out, "(%s) ", tokens[i].data.number); - free(tokens[i].data.number); + fprintf(out, "(%s) ", sl_pp_context_cstr(&context, tokens[i].data.number)); break; case SL_PP_OTHER: @@ -311,6 +315,7 @@ main(int argc, } } + sl_pp_context_destroy(&context); free(tokens); fclose(out); diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index b49395ba97..c56ae9dde9 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -41,6 +41,7 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + struct sl_pp_context context; struct sl_pp_token_info *tokens; unsigned int version; unsigned int tokens_eaten; @@ -83,18 +84,23 @@ main(int argc, free(inbuf); - if (sl_pp_tokenise(outbuf, &tokens)) { + sl_pp_context_init(&context); + + if (sl_pp_tokenise(&context, outbuf, &tokens)) { + sl_pp_context_destroy(&context); free(outbuf); return 1; } free(outbuf); - if (sl_pp_version(tokens, &version, &tokens_eaten)) { + if (sl_pp_version(&context, tokens, &version, &tokens_eaten)) { + sl_pp_context_destroy(&context); free(tokens); return -1; } + sl_pp_context_destroy(&context); free(tokens); out = fopen(argv[2], "wb"); diff --git a/src/glsl/pp/SConscript b/src/glsl/pp/SConscript index 0be2114794..3d4a1cb967 100644 --- a/src/glsl/pp/SConscript +++ b/src/glsl/pp/SConscript @@ -8,6 +8,7 @@ env = env.Clone() glsl = env.StaticLibrary( target = 'glsl', source = [ + 'sl_pp_context.c', 'sl_pp_process.c', 'sl_pp_purify.c', 'sl_pp_token.c', diff --git a/src/glsl/pp/sl_pp_context.c b/src/glsl/pp/sl_pp_context.c new file mode 100644 index 0000000000..71712de1fe --- /dev/null +++ b/src/glsl/pp/sl_pp_context.c @@ -0,0 +1,77 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include "sl_pp_context.h" + + +void +sl_pp_context_init(struct sl_pp_context *context) +{ + memset(context, 0, sizeof(struct sl_pp_context)); +} + +void +sl_pp_context_destroy(struct sl_pp_context *context) +{ + free(context->cstr_pool); +} + +int +sl_pp_context_add_str(struct sl_pp_context *context, + const char *str) +{ + unsigned int size; + unsigned int offset; + + size = strlen(str) + 1; + + if (context->cstr_pool_len + size > context->cstr_pool_max) { + context->cstr_pool_max = (context->cstr_pool_len + size + 0xffff) & ~0xffff; + context->cstr_pool = realloc(context->cstr_pool, context->cstr_pool_max); + } + + if (!context->cstr_pool) { + return -1; + } + + offset = context->cstr_pool_len; + memcpy(&context->cstr_pool[offset], str, size); + context->cstr_pool_len += size; + + return offset; +} + +const char * +sl_pp_context_cstr(const struct sl_pp_context *context, + int offset) +{ + if (offset == -1) { + return NULL; + } + return &context->cstr_pool[offset]; +} diff --git a/src/glsl/pp/sl_pp_context.h b/src/glsl/pp/sl_pp_context.h new file mode 100644 index 0000000000..3a1e215625 --- /dev/null +++ b/src/glsl/pp/sl_pp_context.h @@ -0,0 +1,52 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#ifndef SL_PP_CONTEXT_H +#define SL_PP_CONTEXT_H + + +struct sl_pp_context { + char *cstr_pool; + unsigned int cstr_pool_max; + unsigned int cstr_pool_len; +}; + +void +sl_pp_context_init(struct sl_pp_context *context); + +void +sl_pp_context_destroy(struct sl_pp_context *context); + +int +sl_pp_context_add_str(struct sl_pp_context *context, + const char *str); + +const char * +sl_pp_context_cstr(const struct sl_pp_context *context, + int offset); + +#endif /* SL_PP_VERSION_H */ diff --git a/src/glsl/pp/sl_pp_process.c b/src/glsl/pp/sl_pp_process.c index 56b8fab52a..a97c750de4 100644 --- a/src/glsl/pp/sl_pp_process.c +++ b/src/glsl/pp/sl_pp_process.c @@ -26,7 +26,6 @@ **************************************************************************/ #include -#include #include "sl_pp_process.h" @@ -38,7 +37,8 @@ enum process_state { }; int -sl_pp_process(const struct sl_pp_token_info *input, +sl_pp_process(struct sl_pp_context *context, + const struct sl_pp_token_info *input, struct sl_pp_token_info **output) { unsigned int i = 0; @@ -132,18 +132,6 @@ sl_pp_process(const struct sl_pp_token_info *input, out_max = new_max; } - if (info.token == SL_PP_IDENTIFIER) { - info.data.identifier = strdup(info.data.identifier); - if (!info.data.identifier) { - return -1; - } - } else if (info.token == SL_PP_NUMBER) { - info.data.number = strdup(info.data.number); - if (!info.data.number) { - return -1; - } - } - out[out_len++] = info; if (info.token == SL_PP_EOF) { diff --git a/src/glsl/pp/sl_pp_process.h b/src/glsl/pp/sl_pp_process.h index 6e930ca567..b71ee4466a 100644 --- a/src/glsl/pp/sl_pp_process.h +++ b/src/glsl/pp/sl_pp_process.h @@ -32,7 +32,8 @@ int -sl_pp_process(const struct sl_pp_token_info *input, +sl_pp_process(struct sl_pp_context *context, + const struct sl_pp_token_info *input, struct sl_pp_token_info **output); #endif /* SL_PP_PROCESS_H */ diff --git a/src/glsl/pp/sl_pp_token.c b/src/glsl/pp/sl_pp_token.c index 4001fe54c8..e200b961aa 100644 --- a/src/glsl/pp/sl_pp_token.c +++ b/src/glsl/pp/sl_pp_token.c @@ -30,7 +30,8 @@ static int -_tokenise_identifier(const char **pinput, +_tokenise_identifier(struct sl_pp_context *context, + const char **pinput, struct sl_pp_token_info *info) { const char *input = *pinput; @@ -38,7 +39,7 @@ _tokenise_identifier(const char **pinput, unsigned int i = 0; info->token = SL_PP_IDENTIFIER; - info->data.identifier = NULL; + info->data.identifier = -1; identifier[i++] = *input++; while ((*input >= 'a' && *input <= 'z') || @@ -52,11 +53,10 @@ _tokenise_identifier(const char **pinput, } identifier[i++] = '\0'; - info->data.identifier = malloc(i); - if (!info->data.identifier) { + info->data.identifier = sl_pp_context_add_str(context, identifier); + if (info->data.identifier == -1) { return -1; } - memcpy(info->data.identifier, identifier, i); *pinput = input; return 0; @@ -64,7 +64,8 @@ _tokenise_identifier(const char **pinput, static int -_tokenise_number(const char **pinput, +_tokenise_number(struct sl_pp_context *context, + const char **pinput, struct sl_pp_token_info *info) { const char *input = *pinput; @@ -72,7 +73,7 @@ _tokenise_number(const char **pinput, unsigned int i = 0; info->token = SL_PP_NUMBER; - info->data.number = NULL; + info->data.number = -1; number[i++] = *input++; while ((*input >= '0' && *input <= '9') || @@ -90,11 +91,10 @@ _tokenise_number(const char **pinput, } number[i++] = '\0'; - info->data.number = malloc(i); - if (!info->data.number) { + info->data.number = sl_pp_context_add_str(context, number); + if (info->data.number == -1) { return -1; } - memcpy(info->data.number, number, i); *pinput = input; return 0; @@ -102,7 +102,8 @@ _tokenise_number(const char **pinput, int -sl_pp_tokenise(const char *input, +sl_pp_tokenise(struct sl_pp_context *context, + const char *input, struct sl_pp_token_info **output) { struct sl_pp_token_info *out = NULL; @@ -171,7 +172,7 @@ sl_pp_tokenise(const char *input, case '.': if (input[1] >= '0' && input[1] <= '9') { - if (_tokenise_number(&input, &info)) { + if (_tokenise_number(context, &input, &info)) { free(out); return -1; } @@ -355,12 +356,12 @@ sl_pp_tokenise(const char *input, if ((*input >= 'a' && *input <= 'z') || (*input >= 'A' && *input <= 'Z') || (*input == '_')) { - if (_tokenise_identifier(&input, &info)) { + if (_tokenise_identifier(context, &input, &info)) { free(out); return -1; } } else if (*input >= '0' && *input <= '9') { - if (_tokenise_number(&input, &info)) { + if (_tokenise_number(context, &input, &info)) { free(out); return -1; } diff --git a/src/glsl/pp/sl_pp_token.h b/src/glsl/pp/sl_pp_token.h index 5e7fae7d29..c801804ae6 100644 --- a/src/glsl/pp/sl_pp_token.h +++ b/src/glsl/pp/sl_pp_token.h @@ -90,8 +90,8 @@ enum sl_pp_token { }; union sl_pp_token_data { - char *identifier; - char *number; + int identifier; + int number; char other; }; @@ -101,7 +101,8 @@ struct sl_pp_token_info { }; int -sl_pp_tokenise(const char *input, +sl_pp_tokenise(struct sl_pp_context *context, + const char *input, struct sl_pp_token_info **output); #endif /* SL_PP_TOKEN_H */ diff --git a/src/glsl/pp/sl_pp_version.c b/src/glsl/pp/sl_pp_version.c index e743a09841..89c3cfa1a5 100644 --- a/src/glsl/pp/sl_pp_version.c +++ b/src/glsl/pp/sl_pp_version.c @@ -54,7 +54,8 @@ _parse_integer(const char *input, int -sl_pp_version(const struct sl_pp_token_info *input, +sl_pp_version(struct sl_pp_context *context, + const struct sl_pp_token_info *input, unsigned int *version, unsigned int *tokens_eaten) { @@ -99,11 +100,18 @@ sl_pp_version(const struct sl_pp_token_info *input, break; case SL_PP_IDENTIFIER: - if (strcmp(input[i].data.identifier, "version")) { - return 0; + { + const char *id = sl_pp_context_cstr(context, input[i].data.identifier); + + if (!id) { + return -1; + } + if (strcmp(id, "version")) { + return 0; + } + i++; + found_version = 1; } - i++; - found_version = 1; break; default: @@ -119,12 +127,19 @@ sl_pp_version(const struct sl_pp_token_info *input, break; case SL_PP_NUMBER: - if (_parse_integer(input[i].data.number, version)) { - /* Expected version number. */ - return -1; + { + const char *num = sl_pp_context_cstr(context, input[i].data.number); + + if (!num) { + return -1; + } + if (_parse_integer(num, version)) { + /* Expected version number. */ + return -1; + } + i++; + found_number = 1; } - i++; - found_number = 1; break; default: diff --git a/src/glsl/pp/sl_pp_version.h b/src/glsl/pp/sl_pp_version.h index 7deee1a134..cee9f55bc6 100644 --- a/src/glsl/pp/sl_pp_version.h +++ b/src/glsl/pp/sl_pp_version.h @@ -28,11 +28,13 @@ #ifndef SL_PP_VERSION_H #define SL_PP_VERSION_H +#include "sl_pp_context.h" #include "sl_pp_token.h" int -sl_pp_version(const struct sl_pp_token_info *input, +sl_pp_version(struct sl_pp_context *context, + const struct sl_pp_token_info *input, unsigned int *version, unsigned int *tokens_eaten); -- cgit v1.2.3 From c42428c787aae4bc560adf507991f1e274407135 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 4 Sep 2009 08:16:14 +0200 Subject: glsl: Print out error message in apps/process. --- src/glsl/apps/process.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index abcf1a92b8..d01294f340 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -104,21 +104,24 @@ main(int argc, return -1; } - if (sl_pp_process(&context, &tokens[tokens_eaten], &outtokens)) { + out = fopen(argv[2], "wb"); + if (!out) { sl_pp_context_destroy(&context); free(tokens); - return -1; + return 1; } - free(tokens); + if (sl_pp_process(&context, &tokens[tokens_eaten], &outtokens)) { + fprintf(out, "$ERROR: `%s'\n", context.error_msg); - out = fopen(argv[2], "wb"); - if (!out) { sl_pp_context_destroy(&context); - free(outtokens); - return 1; + free(tokens); + fclose(out); + return -1; } + free(tokens); + for (i = 0; outtokens[i].token != SL_PP_EOF; i++) { switch (outtokens[i].token) { case SL_PP_NEWLINE: -- cgit v1.2.3 From 94321b44416f47eb08bf72c93f4299ff7dc47017 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 4 Sep 2009 10:49:12 +0200 Subject: glsl: Handle pragma tokens in apps/process. --- src/glsl/apps/process.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index d01294f340..9a450ce5a7 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -320,6 +320,14 @@ main(int argc, fprintf(out, "%c", outtokens[i].data.other); break; + case SL_PP_PRAGMA_OPTIMIZE: + fprintf(out, "#pragma optimize(%s)", outtokens[i].data.pragma ? "on" : "off"); + break; + + case SL_PP_PRAGMA_DEBUG: + fprintf(out, "#pragma debug(%s)", outtokens[i].data.pragma ? "on" : "off"); + break; + default: assert(0); } -- cgit v1.2.3 From 7f187583c14448047c95d933a96b190273a881e5 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 4 Sep 2009 11:33:15 +0200 Subject: glsl: Handle extension tokens in apps/proces. --- src/glsl/apps/process.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 9a450ce5a7..b40ad442bb 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -328,6 +328,22 @@ main(int argc, fprintf(out, "#pragma debug(%s)", outtokens[i].data.pragma ? "on" : "off"); break; + case SL_PP_EXTENSION_REQUIRE: + fprintf(out, "#extension %s : require", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + break; + + case SL_PP_EXTENSION_ENABLE: + fprintf(out, "#extension %s : enable", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + break; + + case SL_PP_EXTENSION_WARN: + fprintf(out, "#extension %s : warn", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + break; + + case SL_PP_EXTENSION_DISABLE: + fprintf(out, "#extension %s : disable", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + break; + default: assert(0); } -- cgit v1.2.3 From b6df77fb9a6093eb8ed13b5c7c1327c162c41584 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 4 Sep 2009 15:16:42 +0200 Subject: glsl: Handle line tokens in apps/process. --- src/glsl/apps/process.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index b40ad442bb..ca96d62f78 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -344,6 +344,10 @@ main(int argc, fprintf(out, "#extension %s : disable", sl_pp_context_cstr(&context, outtokens[i].data.extension)); break; + case SL_PP_LINE: + fprintf(out, "#line %u", outtokens[i].data.line); + break; + default: assert(0); } -- cgit v1.2.3 From b7960b3d3ac347604bfec705a50d6c2eda439eef Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 4 Sep 2009 15:29:35 +0200 Subject: glsl: Handle file tokens in apps/process. --- src/glsl/apps/process.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index ca96d62f78..71211ccb72 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -348,6 +348,10 @@ main(int argc, fprintf(out, "#line %u", outtokens[i].data.line); break; + case SL_PP_FILE: + fprintf(out, " #file %u", outtokens[i].data.file); + break; + default: assert(0); } -- cgit v1.2.3 From 169aead1b55446c7bfe669b6a822d56e8af15f7f Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Mon, 14 Sep 2009 13:08:07 +0200 Subject: glsl/apps: Adapt to pp interface change. --- src/glsl/apps/process.c | 5 ++++- src/glsl/apps/tokenise.c | 5 ++++- src/glsl/apps/version.c | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 71211ccb72..a11f9741f5 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -88,7 +88,10 @@ main(int argc, free(inbuf); - sl_pp_context_init(&context); + if (sl_pp_context_init(&context)) { + free(outbuf); + return 1; + } if (sl_pp_tokenise(&context, outbuf, &tokens)) { sl_pp_context_destroy(&context); diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index b5092ba35f..64b0a2f05e 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -84,7 +84,10 @@ main(int argc, free(inbuf); - sl_pp_context_init(&context); + if (sl_pp_context_init(&context)) { + free(outbuf); + return 1; + } if (sl_pp_tokenise(&context, outbuf, &tokens)) { sl_pp_context_destroy(&context); diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index c56ae9dde9..9e579043b2 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -84,7 +84,10 @@ main(int argc, free(inbuf); - sl_pp_context_init(&context); + if (sl_pp_context_init(&context)) { + free(outbuf); + return 1; + } if (sl_pp_tokenise(&context, outbuf, &tokens)) { sl_pp_context_destroy(&context); -- cgit v1.2.3 From cc629940d4a47c998d0ed5dbcc0f396025932e0e Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Wed, 16 Sep 2009 22:04:22 +0200 Subject: glsl/apps: Always write out error condition. --- src/glsl/apps/process.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index a11f9741f5..678b1005f8 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -64,14 +64,26 @@ main(int argc, size = ftell(in); fseek(in, 0, SEEK_SET); + out = fopen(argv[2], "wb"); + if (!out) { + fclose(in); + return 1; + } + inbuf = malloc(size + 1); if (!inbuf) { + fprintf(out, "$OOMERROR\n"); + + fclose(out); fclose(in); return 1; } if (fread(inbuf, 1, size, in) != size) { + fprintf(out, "$READERROR\n"); + free(inbuf); + fclose(out); fclose(in); return 1; } @@ -82,36 +94,41 @@ main(int argc, memset(&options, 0, sizeof(options)); if (sl_pp_purify(inbuf, &options, &outbuf)) { + fprintf(out, "$PURIFYERROR\n"); + free(inbuf); + fclose(out); return 1; } free(inbuf); if (sl_pp_context_init(&context)) { + fprintf(out, "$CONTEXERROR\n"); + free(outbuf); + fclose(out); return 1; } if (sl_pp_tokenise(&context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", context.error_msg); + sl_pp_context_destroy(&context); free(outbuf); + fclose(out); return 1; } free(outbuf); if (sl_pp_version(&context, tokens, &version, &tokens_eaten)) { - sl_pp_context_destroy(&context); - free(tokens); - return -1; - } + fprintf(out, "$ERROR: `%s'\n", context.error_msg); - out = fopen(argv[2], "wb"); - if (!out) { sl_pp_context_destroy(&context); free(tokens); - return 1; + fclose(out); + return -1; } if (sl_pp_process(&context, &tokens[tokens_eaten], &outtokens)) { -- cgit v1.2.3 From 69bdd47dba1f7331a632316e4f9cc9942fb93ca4 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 17 Sep 2009 10:45:16 +0200 Subject: glsl/apps: Always write out error condition. --- src/glsl/apps/purify.c | 21 +++++++++++++++------ src/glsl/apps/tokenise.c | 28 +++++++++++++++++++++------- src/glsl/apps/version.c | 29 ++++++++++++++++++++++++----- 3 files changed, 60 insertions(+), 18 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/purify.c b/src/glsl/apps/purify.c index 7dff8aea45..d4c53704e5 100644 --- a/src/glsl/apps/purify.c +++ b/src/glsl/apps/purify.c @@ -54,14 +54,26 @@ main(int argc, size = ftell(in); fseek(in, 0, SEEK_SET); + out = fopen(argv[2], "wb"); + if (!out) { + fclose(in); + return 1; + } + inbuf = malloc(size + 1); if (!inbuf) { + fprintf(out, "$OOMERROR\n"); + + fclose(out); fclose(in); return 1; } if (fread(inbuf, 1, size, in) != size) { + fprintf(out, "$READERROR\n"); + free(inbuf); + fclose(out); fclose(in); return 1; } @@ -72,18 +84,15 @@ main(int argc, memset(&options, 0, sizeof(options)); if (sl_pp_purify(inbuf, &options, &outbuf)) { + fprintf(out, "$PURIFYERROR\n"); + free(inbuf); + fclose(out); return 1; } free(inbuf); - out = fopen(argv[2], "wb"); - if (!out) { - free(outbuf); - return 1; - } - fwrite(outbuf, 1, strlen(outbuf), out); free(outbuf); diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index 64b0a2f05e..1746e20c13 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -60,14 +60,26 @@ main(int argc, size = ftell(in); fseek(in, 0, SEEK_SET); + out = fopen(argv[2], "wb"); + if (!out) { + fclose(in); + return 1; + } + inbuf = malloc(size + 1); if (!inbuf) { + fprintf(out, "$OOMERROR\n"); + + fclose(out); fclose(in); return 1; } if (fread(inbuf, 1, size, in) != size) { + fprintf(out, "$READERROR\n"); + free(inbuf); + fclose(out); fclose(in); return 1; } @@ -78,32 +90,34 @@ main(int argc, memset(&options, 0, sizeof(options)); if (sl_pp_purify(inbuf, &options, &outbuf)) { + fprintf(out, "$PURIFYERROR\n"); + free(inbuf); + fclose(out); return 1; } free(inbuf); if (sl_pp_context_init(&context)) { + fprintf(out, "$CONTEXERROR\n"); + free(outbuf); + fclose(out); return 1; } if (sl_pp_tokenise(&context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", context.error_msg); + sl_pp_context_destroy(&context); free(outbuf); + fclose(out); return 1; } free(outbuf); - out = fopen(argv[2], "wb"); - if (!out) { - sl_pp_context_destroy(&context); - free(tokens); - return 1; - } - for (i = 0; tokens[i].token != SL_PP_EOF; i++) { switch (tokens[i].token) { case SL_PP_WHITESPACE: diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index 9e579043b2..50c564b470 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -60,14 +60,26 @@ main(int argc, size = ftell(in); fseek(in, 0, SEEK_SET); + out = fopen(argv[2], "wb"); + if (!out) { + fclose(in); + return 1; + } + inbuf = malloc(size + 1); if (!inbuf) { + fprintf(out, "$OOMERROR\n"); + + fclose(out); fclose(in); return 1; } if (fread(inbuf, 1, size, in) != size) { + fprintf(out, "$READERROR\n"); + free(inbuf); + fclose(out); fclose(in); return 1; } @@ -78,39 +90,46 @@ main(int argc, memset(&options, 0, sizeof(options)); if (sl_pp_purify(inbuf, &options, &outbuf)) { + fprintf(out, "$PURIFYERROR\n"); + free(inbuf); + fclose(out); return 1; } free(inbuf); if (sl_pp_context_init(&context)) { + fprintf(out, "$CONTEXERROR\n"); + free(outbuf); + fclose(out); return 1; } if (sl_pp_tokenise(&context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", context.error_msg); + sl_pp_context_destroy(&context); free(outbuf); + fclose(out); return 1; } free(outbuf); if (sl_pp_version(&context, tokens, &version, &tokens_eaten)) { + fprintf(out, "$ERROR: `%s'\n", context.error_msg); + sl_pp_context_destroy(&context); free(tokens); + fclose(out); return -1; } sl_pp_context_destroy(&context); free(tokens); - out = fopen(argv[2], "wb"); - if (!out) { - return 1; - } - fprintf(out, "%u\n%u\n", version, -- cgit v1.2.3 From 5f9f30a75268bf6803627930ce982aede2c870f5 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 18 Sep 2009 11:20:42 +0200 Subject: glsl/apps: Use glsl pp public interface. --- src/glsl/apps/process.c | 42 ++++++++++++++++++++---------------------- src/glsl/apps/purify.c | 2 +- src/glsl/apps/tokenise.c | 21 ++++++++++----------- src/glsl/apps/version.c | 22 +++++++++++----------- 4 files changed, 42 insertions(+), 45 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 678b1005f8..1fdb09670c 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -28,10 +28,7 @@ #include #include #include -#include "../pp/sl_pp_context.h" -#include "../pp/sl_pp_purify.h" -#include "../pp/sl_pp_version.h" -#include "../pp/sl_pp_process.h" +#include "../pp/sl_pp_public.h" int @@ -43,7 +40,7 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; - struct sl_pp_context context; + struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; unsigned int tokens_eaten; @@ -103,7 +100,8 @@ main(int argc, free(inbuf); - if (sl_pp_context_init(&context)) { + context = sl_pp_context_create(); + if (!context) { fprintf(out, "$CONTEXERROR\n"); free(outbuf); @@ -111,10 +109,10 @@ main(int argc, return 1; } - if (sl_pp_tokenise(&context, outbuf, &tokens)) { - fprintf(out, "$ERROR: `%s'\n", context.error_msg); + if (sl_pp_tokenise(context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(outbuf); fclose(out); return 1; @@ -122,19 +120,19 @@ main(int argc, free(outbuf); - if (sl_pp_version(&context, tokens, &version, &tokens_eaten)) { - fprintf(out, "$ERROR: `%s'\n", context.error_msg); + if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(tokens); fclose(out); return -1; } - if (sl_pp_process(&context, &tokens[tokens_eaten], &outtokens)) { - fprintf(out, "$ERROR: `%s'\n", context.error_msg); + if (sl_pp_process(context, &tokens[tokens_eaten], &outtokens)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(tokens); fclose(out); return -1; @@ -329,11 +327,11 @@ main(int argc, break; case SL_PP_IDENTIFIER: - fprintf(out, "%s ", sl_pp_context_cstr(&context, outtokens[i].data.identifier)); + fprintf(out, "%s ", sl_pp_context_cstr(context, outtokens[i].data.identifier)); break; case SL_PP_NUMBER: - fprintf(out, "%s ", sl_pp_context_cstr(&context, outtokens[i].data.number)); + fprintf(out, "%s ", sl_pp_context_cstr(context, outtokens[i].data.number)); break; case SL_PP_OTHER: @@ -349,19 +347,19 @@ main(int argc, break; case SL_PP_EXTENSION_REQUIRE: - fprintf(out, "#extension %s : require", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + fprintf(out, "#extension %s : require", sl_pp_context_cstr(context, outtokens[i].data.extension)); break; case SL_PP_EXTENSION_ENABLE: - fprintf(out, "#extension %s : enable", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + fprintf(out, "#extension %s : enable", sl_pp_context_cstr(context, outtokens[i].data.extension)); break; case SL_PP_EXTENSION_WARN: - fprintf(out, "#extension %s : warn", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + fprintf(out, "#extension %s : warn", sl_pp_context_cstr(context, outtokens[i].data.extension)); break; case SL_PP_EXTENSION_DISABLE: - fprintf(out, "#extension %s : disable", sl_pp_context_cstr(&context, outtokens[i].data.extension)); + fprintf(out, "#extension %s : disable", sl_pp_context_cstr(context, outtokens[i].data.extension)); break; case SL_PP_LINE: @@ -377,7 +375,7 @@ main(int argc, } } - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(outtokens); fclose(out); diff --git a/src/glsl/apps/purify.c b/src/glsl/apps/purify.c index d4c53704e5..435bdbe514 100644 --- a/src/glsl/apps/purify.c +++ b/src/glsl/apps/purify.c @@ -27,7 +27,7 @@ #include #include -#include "../pp/sl_pp_purify.h" +#include "../pp/sl_pp_public.h" int diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index 1746e20c13..2b3ebcf283 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -28,9 +28,7 @@ #include #include #include -#include "../pp/sl_pp_context.h" -#include "../pp/sl_pp_purify.h" -#include "../pp/sl_pp_token.h" +#include "../pp/sl_pp_public.h" int @@ -42,7 +40,7 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; - struct sl_pp_context context; + struct sl_pp_context *context; struct sl_pp_token_info *tokens; FILE *out; unsigned int i; @@ -99,7 +97,8 @@ main(int argc, free(inbuf); - if (sl_pp_context_init(&context)) { + context = sl_pp_context_create(); + if (!context) { fprintf(out, "$CONTEXERROR\n"); free(outbuf); @@ -107,10 +106,10 @@ main(int argc, return 1; } - if (sl_pp_tokenise(&context, outbuf, &tokens)) { - fprintf(out, "$ERROR: `%s'\n", context.error_msg); + if (sl_pp_tokenise(context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(outbuf); fclose(out); return 1; @@ -312,11 +311,11 @@ main(int argc, break; case SL_PP_IDENTIFIER: - fprintf(out, "%s ", sl_pp_context_cstr(&context, tokens[i].data.identifier)); + fprintf(out, "%s ", sl_pp_context_cstr(context, tokens[i].data.identifier)); break; case SL_PP_NUMBER: - fprintf(out, "(%s) ", sl_pp_context_cstr(&context, tokens[i].data.number)); + fprintf(out, "(%s) ", sl_pp_context_cstr(context, tokens[i].data.number)); break; case SL_PP_OTHER: @@ -332,7 +331,7 @@ main(int argc, } } - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(tokens); fclose(out); diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index 50c564b470..f259431992 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -28,8 +28,7 @@ #include #include #include -#include "../pp/sl_pp_purify.h" -#include "../pp/sl_pp_version.h" +#include "../pp/sl_pp_public.h" int @@ -41,7 +40,7 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; - struct sl_pp_context context; + struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; unsigned int tokens_eaten; @@ -99,7 +98,8 @@ main(int argc, free(inbuf); - if (sl_pp_context_init(&context)) { + context = sl_pp_context_create(); + if (!context) { fprintf(out, "$CONTEXERROR\n"); free(outbuf); @@ -107,10 +107,10 @@ main(int argc, return 1; } - if (sl_pp_tokenise(&context, outbuf, &tokens)) { - fprintf(out, "$ERROR: `%s'\n", context.error_msg); + if (sl_pp_tokenise(context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(outbuf); fclose(out); return 1; @@ -118,16 +118,16 @@ main(int argc, free(outbuf); - if (sl_pp_version(&context, tokens, &version, &tokens_eaten)) { - fprintf(out, "$ERROR: `%s'\n", context.error_msg); + if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(tokens); fclose(out); return -1; } - sl_pp_context_destroy(&context); + sl_pp_context_destroy(context); free(tokens); fprintf(out, -- cgit v1.2.3 From 125691dda3d261d3115bf85265428e28d2bbf6c8 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Tue, 22 Sep 2009 12:52:21 +0200 Subject: glsl/apps: Update after recent pp interface changes. --- src/glsl/apps/process.c | 8 ++++++-- src/glsl/apps/tokenise.c | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 1fdb09670c..4fff3570c1 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -330,8 +330,12 @@ main(int argc, fprintf(out, "%s ", sl_pp_context_cstr(context, outtokens[i].data.identifier)); break; - case SL_PP_NUMBER: - fprintf(out, "%s ", sl_pp_context_cstr(context, outtokens[i].data.number)); + case SL_PP_UINT: + fprintf(out, "%s ", sl_pp_context_cstr(context, outtokens[i].data._uint)); + break; + + case SL_PP_FLOAT: + fprintf(out, "%s ", sl_pp_context_cstr(context, outtokens[i].data._float)); break; case SL_PP_OTHER: diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index 2b3ebcf283..9f95424f5c 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -314,8 +314,12 @@ main(int argc, fprintf(out, "%s ", sl_pp_context_cstr(context, tokens[i].data.identifier)); break; - case SL_PP_NUMBER: - fprintf(out, "(%s) ", sl_pp_context_cstr(context, tokens[i].data.number)); + case SL_PP_UINT: + fprintf(out, "(%s) ", sl_pp_context_cstr(context, tokens[i].data._uint)); + break; + + case SL_PP_FLOAT: + fprintf(out, "(%s) ", sl_pp_context_cstr(context, tokens[i].data._float)); break; case SL_PP_OTHER: -- cgit v1.2.3 From 13f9a39cea81bf8f1efd4aca1467c63a49a42dab Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 24 Sep 2009 08:43:54 +0200 Subject: glsl/apps: Fix apps after pp interface changes. --- src/glsl/apps/process.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 4fff3570c1..28b415c3ff 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -367,11 +367,7 @@ main(int argc, break; case SL_PP_LINE: - fprintf(out, "#line %u", outtokens[i].data.line); - break; - - case SL_PP_FILE: - fprintf(out, " #file %u", outtokens[i].data.file); + fprintf(out, "#line %u %u", outtokens[i].data.line.lineno, outtokens[i].data.line.fileno); break; default: -- cgit v1.2.3 From db097a9a3ff532d37875b8cd911dda0515a60dcd Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 24 Sep 2009 10:54:56 +0200 Subject: glsl/apps: Allow builds on all platforms. --- src/glsl/apps/SConscript | 3 --- 1 file changed, 3 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript index 12a0018d1c..5802011bf5 100644 --- a/src/glsl/apps/SConscript +++ b/src/glsl/apps/SConscript @@ -1,8 +1,5 @@ Import('*') -if env['platform'] not in ['windows']: - Return() - env = env.Clone() if env['platform'] == 'windows': -- cgit v1.2.3 From e8e3fe15e1b0f75c43e197f8875a7fae1468f584 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 24 Sep 2009 10:55:37 +0200 Subject: glsl/apps: Include missing header, properly escape format strings. --- src/glsl/apps/process.c | 5 +++-- src/glsl/apps/purify.c | 1 + src/glsl/apps/tokenise.c | 5 +++-- src/glsl/apps/version.c | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 28b415c3ff..e20b68b1a9 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -27,6 +27,7 @@ #include #include +#include #include #include "../pp/sl_pp_public.h" @@ -235,11 +236,11 @@ main(int argc, break; case SL_PP_MODASSIGN: - fprintf(out, "%= "); + fprintf(out, "%%= "); break; case SL_PP_MODULO: - fprintf(out, "% "); + fprintf(out, "%% "); break; case SL_PP_LSHIFTASSIGN: diff --git a/src/glsl/apps/purify.c b/src/glsl/apps/purify.c index 435bdbe514..53ba253022 100644 --- a/src/glsl/apps/purify.c +++ b/src/glsl/apps/purify.c @@ -27,6 +27,7 @@ #include #include +#include #include "../pp/sl_pp_public.h" diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index 9f95424f5c..d6b9c4fa04 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -27,6 +27,7 @@ #include #include +#include #include #include "../pp/sl_pp_public.h" @@ -219,11 +220,11 @@ main(int argc, break; case SL_PP_MODASSIGN: - fprintf(out, "%= "); + fprintf(out, "%%= "); break; case SL_PP_MODULO: - fprintf(out, "% "); + fprintf(out, "%% "); break; case SL_PP_LSHIFTASSIGN: diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index f259431992..4570f86217 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -27,6 +27,7 @@ #include #include +#include #include #include "../pp/sl_pp_public.h" -- cgit v1.2.3 From b5c8c87eab4cbc4f05cbd98d7647b9b83607f976 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Tue, 10 Nov 2009 00:15:54 +0100 Subject: glsl/apps: Update for glsl/pp interface changes. --- src/glsl/apps/process.c | 6 ++++-- src/glsl/apps/purify.c | 6 ++++-- src/glsl/apps/tokenise.c | 6 ++++-- src/glsl/apps/version.c | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index e20b68b1a9..7f392613e0 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -41,6 +41,8 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + char errmsg[100] = ""; + unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; @@ -91,8 +93,8 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf)) { - fprintf(out, "$PURIFYERROR\n"); + if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { + fprintf(out, "$PURIFYERROR %s\n", errmsg); free(inbuf); fclose(out); diff --git a/src/glsl/apps/purify.c b/src/glsl/apps/purify.c index 53ba253022..8c01f4fc6a 100644 --- a/src/glsl/apps/purify.c +++ b/src/glsl/apps/purify.c @@ -40,6 +40,8 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + char errmsg[100] = ""; + unsigned int errline = 0; FILE *out; if (argc != 3) { @@ -84,8 +86,8 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf)) { - fprintf(out, "$PURIFYERROR\n"); + if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { + fprintf(out, "$PURIFYERROR %u: %s\n", errline, errmsg); free(inbuf); fclose(out); diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index d6b9c4fa04..9dd9631a4e 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -41,6 +41,8 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + char errmsg[100] = ""; + unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; FILE *out; @@ -88,8 +90,8 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf)) { - fprintf(out, "$PURIFYERROR\n"); + if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { + fprintf(out, "$PURIFYERROR %s\n", errmsg); free(inbuf); fclose(out); diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index 4570f86217..1127dae516 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -41,6 +41,8 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char *outbuf; + char errmsg[100] = ""; + unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; @@ -89,8 +91,8 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf)) { - fprintf(out, "$PURIFYERROR\n"); + if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { + fprintf(out, "$PURIFYERROR %s\n", errmsg); free(inbuf); fclose(out); -- cgit v1.2.3 From 38a1f0b5d1062f8051ac6bb4e3c35fbbf4615163 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 13 Nov 2009 03:02:14 +0100 Subject: glsl/apps: Add GLSL compiler that translates source text into binary stream. Should be used in place of gc_to_bin utility to precompile builtin library. --- src/glsl/apps/SConscript | 7 +- src/glsl/apps/compile.c | 213 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 src/glsl/apps/compile.c (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript index 5802011bf5..4a89e3f1df 100644 --- a/src/glsl/apps/SConscript +++ b/src/glsl/apps/SConscript @@ -7,7 +7,7 @@ if env['platform'] == 'windows': 'user32', ]) -env.Prepend(LIBS = [glsl]) +env.Prepend(LIBS = [glsl, glslcl]) env.Program( target = 'purify', @@ -28,3 +28,8 @@ env.Program( target = 'process', source = ['process.c'], ) + +env.Program( + target = 'compile', + source = ['compile.c'], +) diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c new file mode 100644 index 0000000000..f99d1413b6 --- /dev/null +++ b/src/glsl/apps/compile.c @@ -0,0 +1,213 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include +#include +#include +#include +#include "../pp/sl_pp_public.h" +#include "../cl/sl_cl_parse.h" + + +int +main(int argc, + char *argv[]) +{ + FILE *in; + long size; + char *inbuf; + struct sl_pp_purify_options options; + char *outbuf; + char errmsg[100] = ""; + unsigned int errline = 0; + struct sl_pp_context *context; + struct sl_pp_token_info *tokens; + unsigned int version; + unsigned int tokens_eaten; + struct sl_pp_token_info *outtokens; + FILE *out; + unsigned int i, j; + unsigned char *outbytes; + unsigned int cboutbytes; + unsigned int shader_type; + + if (argc != 4) { + return 1; + } + + if (!strcmp(argv[1], "fragment")) { + shader_type = 1; + } else if (!strcmp(argv[1], "vertex")) { + shader_type = 2; + } else { + return 1; + } + + in = fopen(argv[2], "rb"); + if (!in) { + return 1; + } + + fseek(in, 0, SEEK_END); + size = ftell(in); + fseek(in, 0, SEEK_SET); + + out = fopen(argv[3], "w"); + if (!out) { + fclose(in); + return 1; + } + + inbuf = malloc(size + 1); + if (!inbuf) { + fprintf(out, "$OOMERROR\n"); + + fclose(out); + fclose(in); + return 1; + } + + if (fread(inbuf, 1, size, in) != size) { + fprintf(out, "$READERROR\n"); + + free(inbuf); + fclose(out); + fclose(in); + return 1; + } + inbuf[size] = '\0'; + + fclose(in); + + memset(&options, 0, sizeof(options)); + + if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { + fprintf(out, "$PURIFYERROR %s\n", errmsg); + + free(inbuf); + fclose(out); + return 1; + } + + free(inbuf); + + context = sl_pp_context_create(); + if (!context) { + fprintf(out, "$CONTEXERROR\n"); + + free(outbuf); + fclose(out); + return 1; + } + + if (sl_pp_tokenise(context, outbuf, &tokens)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + + sl_pp_context_destroy(context); + free(outbuf); + fclose(out); + return 1; + } + + free(outbuf); + + if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + + sl_pp_context_destroy(context); + free(tokens); + fclose(out); + return -1; + } + + if (sl_pp_process(context, &tokens[tokens_eaten], &outtokens)) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + + sl_pp_context_destroy(context); + free(tokens); + fclose(out); + return -1; + } + + free(tokens); + + for (i = j = 0; outtokens[i].token != SL_PP_EOF; i++) { + switch (outtokens[i].token) { + case SL_PP_NEWLINE: + case SL_PP_EXTENSION_REQUIRE: + case SL_PP_EXTENSION_ENABLE: + case SL_PP_EXTENSION_WARN: + case SL_PP_EXTENSION_DISABLE: + case SL_PP_LINE: + break; + default: + outtokens[j++] = outtokens[i]; + } + } + outtokens[j] = outtokens[i]; + + if (sl_cl_compile(context, outtokens, shader_type, &outbytes, &cboutbytes) == 0) { + unsigned int i; + unsigned int line = 0; + + fprintf(out, "\n/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED FROM THE FOLLOWING FILE: */"); + fprintf(out, "\n/* %s */", argv[2]); + fprintf(out, "\n\n"); + + for (i = 0; i < cboutbytes; i++) { + unsigned int a; + + if (outbytes[i] < 10) { + a = 1; + } else if (outbytes[i] < 100) { + a = 2; + } else { + a = 3; + } + if (i < cboutbytes - 1) { + a++; + } + if (line + a >= 100) { + fprintf (out, "\n"); + line = 0; + } + line += a; + fprintf (out, "%u", outbytes[i]); + if (i < cboutbytes - 1) { + fprintf (out, ","); + } + } + fprintf (out, "\n"); + free(outbytes); + } + + sl_pp_context_destroy(context); + free(outtokens); + fclose(out); + + return 0; +} -- cgit v1.2.3 From eaa34c2deac093fc23e2beed9c5580e57289b1e2 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Fri, 13 Nov 2009 19:51:49 +0100 Subject: glsl/apps: Report syntax parser errors. --- src/glsl/apps/compile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index f99d1413b6..edc426528b 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -170,7 +170,7 @@ main(int argc, } outtokens[j] = outtokens[i]; - if (sl_cl_compile(context, outtokens, shader_type, &outbytes, &cboutbytes) == 0) { + if (sl_cl_compile(context, outtokens, shader_type, 1, &outbytes, &cboutbytes, errmsg, sizeof(errmsg)) == 0) { unsigned int i; unsigned int line = 0; @@ -203,6 +203,9 @@ main(int argc, } fprintf (out, "\n"); free(outbytes); + } else { + fprintf(out, "$SYNTAXERROR: `%s'\n", errmsg); + return -1; } sl_pp_context_destroy(context); -- cgit v1.2.3 From 6199a0cf89034ab92ac61158a25902acc17604f4 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Sat, 21 Nov 2009 20:44:16 +0100 Subject: glsl/apps: No need to purify source text for tokeniser. --- src/glsl/apps/compile.c | 19 ++++--------------- src/glsl/apps/process.c | 19 ++++--------------- src/glsl/apps/tokenise.c | 19 ++++--------------- src/glsl/apps/version.c | 19 ++++--------------- 4 files changed, 16 insertions(+), 60 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index edc426528b..d16dac5868 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -41,7 +41,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char *outbuf; char errmsg[100] = ""; unsigned int errline = 0; struct sl_pp_context *context; @@ -105,35 +104,25 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { - fprintf(out, "$PURIFYERROR %s\n", errmsg); - - free(inbuf); - fclose(out); - return 1; - } - - free(inbuf); - context = sl_pp_context_create(); if (!context) { fprintf(out, "$CONTEXERROR\n"); - free(outbuf); + free(inbuf); fclose(out); return 1; } - if (sl_pp_tokenise(context, outbuf, &tokens)) { + if (sl_pp_tokenise(context, inbuf, &options, &tokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); - free(outbuf); + free(inbuf); fclose(out); return 1; } - free(outbuf); + free(inbuf); if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 7f392613e0..2cec9a9971 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -40,7 +40,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char *outbuf; char errmsg[100] = ""; unsigned int errline = 0; struct sl_pp_context *context; @@ -93,35 +92,25 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { - fprintf(out, "$PURIFYERROR %s\n", errmsg); - - free(inbuf); - fclose(out); - return 1; - } - - free(inbuf); - context = sl_pp_context_create(); if (!context) { fprintf(out, "$CONTEXERROR\n"); - free(outbuf); + free(inbuf); fclose(out); return 1; } - if (sl_pp_tokenise(context, outbuf, &tokens)) { + if (sl_pp_tokenise(context, inbuf, &options, &tokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); - free(outbuf); + free(inbuf); fclose(out); return 1; } - free(outbuf); + free(inbuf); if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index 9dd9631a4e..eb86e3df69 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -40,7 +40,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char *outbuf; char errmsg[100] = ""; unsigned int errline = 0; struct sl_pp_context *context; @@ -90,35 +89,25 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { - fprintf(out, "$PURIFYERROR %s\n", errmsg); - - free(inbuf); - fclose(out); - return 1; - } - - free(inbuf); - context = sl_pp_context_create(); if (!context) { fprintf(out, "$CONTEXERROR\n"); - free(outbuf); + free(inbuf); fclose(out); return 1; } - if (sl_pp_tokenise(context, outbuf, &tokens)) { + if (sl_pp_tokenise(context, inbuf, &options, &tokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); - free(outbuf); + free(inbuf); fclose(out); return 1; } - free(outbuf); + free(inbuf); for (i = 0; tokens[i].token != SL_PP_EOF; i++) { switch (tokens[i].token) { diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index 1127dae516..b1d0d6ff28 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -40,7 +40,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char *outbuf; char errmsg[100] = ""; unsigned int errline = 0; struct sl_pp_context *context; @@ -91,35 +90,25 @@ main(int argc, memset(&options, 0, sizeof(options)); - if (sl_pp_purify(inbuf, &options, &outbuf, errmsg, sizeof(errmsg), &errline)) { - fprintf(out, "$PURIFYERROR %s\n", errmsg); - - free(inbuf); - fclose(out); - return 1; - } - - free(inbuf); - context = sl_pp_context_create(); if (!context) { fprintf(out, "$CONTEXERROR\n"); - free(outbuf); + free(inbuf); fclose(out); return 1; } - if (sl_pp_tokenise(context, outbuf, &tokens)) { + if (sl_pp_tokenise(context, inbuf, &options, &tokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); - free(outbuf); + free(inbuf); fclose(out); return 1; } - free(outbuf); + free(inbuf); if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); -- cgit v1.2.3 From 3371f7e5025e5288eaba78973a2c81ec5d5b1e4d Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Wed, 25 Nov 2009 14:52:21 +0100 Subject: scons: Autogenerate GLSL builtin library *_gc.h from *.gc files. --- src/SConscript | 2 +- src/glsl/apps/SConscript | 3 ++- src/mesa/SConscript | 4 ++- src/mesa/shader/slang/library/SConscript | 44 ++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/mesa/shader/slang/library/SConscript (limited to 'src/glsl/apps') diff --git a/src/SConscript b/src/SConscript index 0fe0798b39..f7fac33790 100644 --- a/src/SConscript +++ b/src/SConscript @@ -1,9 +1,9 @@ Import('*') -SConscript('gallium/SConscript') SConscript('glsl/pp/SConscript') SConscript('glsl/cl/SConscript') SConscript('glsl/apps/SConscript') +SConscript('gallium/SConscript') if 'mesa' in env['statetrackers']: SConscript('mesa/SConscript') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript index 4a89e3f1df..4c81b3be95 100644 --- a/src/glsl/apps/SConscript +++ b/src/glsl/apps/SConscript @@ -29,7 +29,8 @@ env.Program( source = ['process.c'], ) -env.Program( +glsl_compile = env.Program( target = 'compile', source = ['compile.c'], ) +Export('glsl_compile') diff --git a/src/mesa/SConscript b/src/mesa/SConscript index dde9bb08a9..d5a9031f40 100644 --- a/src/mesa/SConscript +++ b/src/mesa/SConscript @@ -335,7 +335,9 @@ if env['platform'] != 'winddk': # Add the dir containing the generated header (somewhere inside the # build dir) to the include path env.Append(CPPPATH = [matypes[0].dir]) - + + SConscript('shader/slang/library/SConscript') + # # Libraries # diff --git a/src/mesa/shader/slang/library/SConscript b/src/mesa/shader/slang/library/SConscript new file mode 100644 index 0000000000..8b3fd03b6b --- /dev/null +++ b/src/mesa/shader/slang/library/SConscript @@ -0,0 +1,44 @@ +####################################################################### +# SConscript for GLSL builtin library + +Import('*') + +env = env.Clone() + +bld_frag = Builder( + action = glsl_compile[0].abspath + ' fragment $SOURCE $TARGET', + suffix = '.gc', + src_suffix = '_gc.h') + +bld_vert = Builder( + action = glsl_compile[0].abspath + ' vertex $SOURCE $TARGET', + suffix = '.gc', + src_suffix = '_gc.h') + +env['BUILDERS']['bld_frag'] = bld_frag +env['BUILDERS']['bld_vert'] = bld_vert + +# Generate GLSL builtin library binaries +env.bld_frag( + '#src/mesa/shader/slang/library/slang_core_gc.h', + '#src/mesa/shader/slang/library/slang_core.gc') +env.bld_frag( + '#src/mesa/shader/slang/library/slang_common_builtin_gc.h', + '#src/mesa/shader/slang/library/slang_common_builtin.gc') +env.bld_frag( + '#src/mesa/shader/slang/library/slang_fragment_builtin_gc.h', + '#src/mesa/shader/slang/library/slang_fragment_builtin.gc') +env.bld_vert( + '#src/mesa/shader/slang/library/slang_vertex_builtin_gc.h', + '#src/mesa/shader/slang/library/slang_vertex_builtin.gc') + +# Generate GLSL 1.20 builtin library binaries +env.bld_frag( + '#src/mesa/shader/slang/library/slang_120_core_gc.h', + '#src/mesa/shader/slang/library/slang_120_core.gc') +env.bld_frag( + '#src/mesa/shader/slang/library/slang_builtin_120_common_gc.h', + '#src/mesa/shader/slang/library/slang_builtin_120_common.gc') +env.bld_frag( + '#src/mesa/shader/slang/library/slang_builtin_120_fragment_gc.h', + '#src/mesa/shader/slang/library/slang_builtin_120_fragment.gc') -- cgit v1.2.3 From 77a0a3e5ca5dfa951056d9054b4147e3ea0965f3 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Wed, 25 Nov 2009 14:59:29 +0100 Subject: glsl/apps: Make compile more shell friendly. --- src/glsl/apps/compile.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index d16dac5868..03e6e58d60 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -33,6 +33,13 @@ #include "../cl/sl_cl_parse.h" +static void +usage(void) +{ + printf("Usage:\n"); + printf(" compile fragment|vertex \n"); +} + int main(int argc, char *argv[]) @@ -55,6 +62,7 @@ main(int argc, unsigned int shader_type; if (argc != 4) { + usage(); return 1; } @@ -63,11 +71,14 @@ main(int argc, } else if (!strcmp(argv[1], "vertex")) { shader_type = 2; } else { + usage(); return 1; } in = fopen(argv[2], "rb"); if (!in) { + printf("Could not open `%s' for read.\n", argv[2]); + usage(); return 1; } @@ -78,6 +89,8 @@ main(int argc, out = fopen(argv[3], "w"); if (!out) { fclose(in); + printf("Could not open `%s' for write.\n", argv[3]); + usage(); return 1; } @@ -87,7 +100,8 @@ main(int argc, fclose(out); fclose(in); - return 1; + printf("Out of memory.\n"); + return 0; } if (fread(inbuf, 1, size, in) != size) { @@ -96,7 +110,8 @@ main(int argc, free(inbuf); fclose(out); fclose(in); - return 1; + printf("Could not read from `%s'.\n", argv[2]); + return 0; } inbuf[size] = '\0'; @@ -110,16 +125,18 @@ main(int argc, free(inbuf); fclose(out); - return 1; + printf("Could not create parse context.\n"); + return 0; } if (sl_pp_tokenise(context, inbuf, &options, &tokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + printf("Error: %s.\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); free(inbuf); fclose(out); - return 1; + return 0; } free(inbuf); @@ -127,19 +144,21 @@ main(int argc, if (sl_pp_version(context, tokens, &version, &tokens_eaten)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + printf("Error: %s\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); free(tokens); fclose(out); - return -1; + return 0; } if (sl_pp_process(context, &tokens[tokens_eaten], &outtokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + printf("Error: %s\n", sl_pp_context_error_message(context)); sl_pp_context_destroy(context); free(tokens); fclose(out); - return -1; + return 0; } free(tokens); @@ -194,12 +213,12 @@ main(int argc, free(outbytes); } else { fprintf(out, "$SYNTAXERROR: `%s'\n", errmsg); - return -1; + + printf("Error: %s\n", errmsg); } sl_pp_context_destroy(context); free(outtokens); fclose(out); - return 0; } -- cgit v1.2.3 From 068596c9a7e8d330ffdff8ad8700bd6093b5bdea Mon Sep 17 00:00:00 2001 From: michal Date: Thu, 10 Dec 2009 01:03:15 +0100 Subject: Build mesa glsl with make. Still don't know how to add glsl to mesa dependencies. --- Makefile | 4 +++ configs/default | 2 +- src/glsl/Makefile | 15 ++++++++++ src/glsl/Makefile.template | 50 +++++++++++++++++++++++++++++++ src/glsl/apps/Makefile | 42 ++++++++++++++++++++++++++ src/glsl/cl/Makefile | 13 ++++++++ src/glsl/pp/Makefile | 26 ++++++++++++++++ src/mesa/Makefile | 15 +++++++--- src/mesa/shader/slang/library/Makefile | 55 +++++++++++----------------------- 9 files changed, 179 insertions(+), 43 deletions(-) create mode 100644 src/glsl/Makefile create mode 100644 src/glsl/Makefile.template create mode 100644 src/glsl/apps/Makefile create mode 100644 src/glsl/cl/Makefile create mode 100644 src/glsl/pp/Makefile (limited to 'src/glsl/apps') diff --git a/Makefile b/Makefile index ea00e811b7..0f759d86df 100644 --- a/Makefile +++ b/Makefile @@ -225,6 +225,10 @@ MAIN_FILES = \ $(DIRECTORY)/include/GL/vms_x_fix.h \ $(DIRECTORY)/include/GL/wglext.h \ $(DIRECTORY)/include/GL/wmesa.h \ + $(DIRECTORY)/src/glsl/Makefile \ + $(DIRECTORY)/src/glsl/*/Makefile \ + $(DIRECTORY)/src/glsl/*/SConscript \ + $(DIRECTORY)/src/glsl/*/*.[ch] \ $(DIRECTORY)/src/Makefile \ $(DIRECTORY)/src/mesa/Makefile* \ $(DIRECTORY)/src/mesa/sources.mak \ diff --git a/configs/default b/configs/default index cb3ca1046f..f365931204 100644 --- a/configs/default +++ b/configs/default @@ -83,7 +83,7 @@ MOTIF_CFLAGS = -I/usr/include/Motif1.2 # Directories to build LIB_DIR = lib -SRC_DIRS = mesa gallium egl gallium/winsys glu glut/glx glew glw +SRC_DIRS = glsl mesa gallium egl gallium/winsys glu glut/glx glew glw GLU_DIRS = sgi DRIVER_DIRS = x11 osmesa # Which subdirs under $(TOP)/progs/ to enter: diff --git a/src/glsl/Makefile b/src/glsl/Makefile new file mode 100644 index 0000000000..ca7f2d2ac7 --- /dev/null +++ b/src/glsl/Makefile @@ -0,0 +1,15 @@ +# src/glsl/Makefile + +TOP = ../.. + +include $(TOP)/configs/current + +SUBDIRS = pp cl apps + +default install clean: + @for dir in $(SUBDIRS) ; do \ + if [ -d $$dir ] ; then \ + (cd $$dir && $(MAKE) $@) || exit 1; \ + fi \ + done + diff --git a/src/glsl/Makefile.template b/src/glsl/Makefile.template new file mode 100644 index 0000000000..974987a0a0 --- /dev/null +++ b/src/glsl/Makefile.template @@ -0,0 +1,50 @@ +# src/glsl/Makefile.template + +# Template makefile for glsl libraries. +# +# Usage: +# The minimum that the including makefile needs to define +# is TOP, LIBNAME and one of of the *_SOURCES. +# +# Optional defines: +# LIBRARY_INCLUDES are appended to the list of includes directories. +# LIBRARY_DEFINES is not used for makedepend, but for compilation. + + +### Basic defines ### + +OBJECTS = $(C_SOURCES:.c=.o) + +INCLUDES = \ + -I. \ + $(LIBRARY_INCLUDES) + + +##### TARGETS ##### + +default: depend lib$(LIBNAME).a + +lib$(LIBNAME).a: $(OBJECTS) Makefile $(TOP)/src/glsl/Makefile.template + $(MKLIB) -o $(LIBNAME) -static $(OBJECTS) + +depend: $(C_SOURCES) + rm -f depend + touch depend + $(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(C_SOURCES) 2> /dev/null + +# Remove .o and backup files +clean: + rm -f $(OBJECTS) lib$(LIBNAME).a depend depend.bak + +# Dummy target +install: + @echo -n "" + + +##### RULES ##### + +.c.o: + $(CC) -c $(INCLUDES) $(CFLAGS) $(LIBRARY_DEFINES) $< -o $@ + +-include depend + diff --git a/src/glsl/apps/Makefile b/src/glsl/apps/Makefile new file mode 100644 index 0000000000..c80fcb9d97 --- /dev/null +++ b/src/glsl/apps/Makefile @@ -0,0 +1,42 @@ +# src/glsl/apps/Makefile + +TOP = ../../.. + +include $(TOP)/configs/current + +LIBS = \ + $(TOP)/src/glsl/pp/libglslpp.a \ + $(TOP)/src/glsl/cl/libglslcl.a + +SOURCES = \ + compile.c \ + process.c \ + purify.c \ + tokenise.c \ + version.c + +APPS = $(SOURCES:%.c=%) + +INCLUDES = -I. + + +##### RULES ##### + +.SUFFIXES: +.SUFFIXES: .c + +.c: + $(APP_CC) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $< $(LIBS) -o $@ + +.c.o: + $(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@ + + +##### TARGETS ##### + +default: $(APPS) + +clean: + -rm -f $(APPS) + -rm -f *.o + diff --git a/src/glsl/cl/Makefile b/src/glsl/cl/Makefile new file mode 100644 index 0000000000..04a52df8c3 --- /dev/null +++ b/src/glsl/cl/Makefile @@ -0,0 +1,13 @@ +#src/glsl/cl/Makefile + +TOP = ../../.. + +include $(TOP)/configs/current + +LIBNAME = glslcl + +C_SOURCES = \ + sl_cl_parse.c + +include ../Makefile.template + diff --git a/src/glsl/pp/Makefile b/src/glsl/pp/Makefile new file mode 100644 index 0000000000..819079f625 --- /dev/null +++ b/src/glsl/pp/Makefile @@ -0,0 +1,26 @@ +#src/glsl/pp/Makefile + +TOP = ../../.. + +include $(TOP)/configs/current + +LIBNAME = glslpp + +C_SOURCES = \ + sl_pp_context.c \ + sl_pp_define.c \ + sl_pp_dict.c \ + sl_pp_error.c \ + sl_pp_expression.c \ + sl_pp_extension.c \ + sl_pp_if.c \ + sl_pp_line.c \ + sl_pp_macro.c \ + sl_pp_pragma.c \ + sl_pp_process.c \ + sl_pp_purify.c \ + sl_pp_token.c \ + sl_pp_version.c + +include ../Makefile.template + diff --git a/src/mesa/Makefile b/src/mesa/Makefile index 8300b30144..67cac2d248 100644 --- a/src/mesa/Makefile +++ b/src/mesa/Makefile @@ -19,10 +19,10 @@ include sources.mak -# Default: build dependencies, then asm_subdirs, then convenience -# libs (.a) and finally the device drivers: -default: depend asm_subdirs libmesa.a libmesagallium.a libglapi.a \ - driver_subdirs +# Default: build dependencies, then asm_subdirs, GLSL built-in lib, +# then convenience libs (.a) and finally the device drivers: +default: depend asm_subdirs glsl_builtin libmesa.a libmesagallium.a \ + libglapi.a driver_subdirs @@ -63,6 +63,12 @@ asm_subdirs: fi +###################################################################### +# GLSL built-in library +glsl_builtin: + (cd shader/slang/library && $(MAKE)) || exit 1 ; + + ###################################################################### # Dependency generation @@ -156,6 +162,7 @@ clean: -rm -f depend depend.bak libmesa.a libglapi.a -rm -f drivers/*/*.o -rm -f *.pc + -rm -f shader/slang/library/*_gc.h -@cd drivers/dri && $(MAKE) clean -@cd drivers/x11 && $(MAKE) clean -@cd drivers/osmesa && $(MAKE) clean diff --git a/src/mesa/shader/slang/library/Makefile b/src/mesa/shader/slang/library/Makefile index 5033d887c5..c6964512bf 100644 --- a/src/mesa/shader/slang/library/Makefile +++ b/src/mesa/shader/slang/library/Makefile @@ -4,9 +4,7 @@ TOP = ../../../../.. include $(TOP)/configs/current -INCDIR = $(TOP)/include - -LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) +GLSL_CL = $(TOP)/src/glsl/apps/compile # # targets @@ -14,32 +12,13 @@ LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) .PHONY: default clean -default: syntax builtin +default: builtin clean: - -rm -f syn_to_c gc_to_bin *_syn.h *_gc.h - -syntax: slang_shader_syn.h + -rm -f *_gc.h builtin: builtin_110 builtin_120 -# -# executables -# - -syn_to_c: syn_to_c.c - $(CC) syn_to_c.c -o syn_to_c - -gc_to_bin: gc_to_bin.c slang_shader_syn.h - $(CC) gc_to_bin.c -o gc_to_bin - -# -# syntax scripts -# - -slang_shader_syn.h: syn_to_c slang_shader.syn - ./syn_to_c slang_shader.syn > slang_shader_syn.h - # # builtin library sources # @@ -49,24 +28,24 @@ builtin_110: slang_common_builtin_gc.h slang_core_gc.h slang_fragment_builtin_gc builtin_120: slang_120_core_gc.h slang_builtin_120_common_gc.h slang_builtin_120_fragment_gc.h -slang_120_core_gc.h: gc_to_bin slang_120_core.gc - ./gc_to_bin 1 slang_120_core.gc slang_120_core_gc.h +slang_120_core_gc.h: slang_120_core.gc + $(GLSL_CL) fragment slang_120_core.gc slang_120_core_gc.h -slang_builtin_120_common_gc.h: gc_to_bin slang_builtin_120_common.gc - ./gc_to_bin 1 slang_builtin_120_common.gc slang_builtin_120_common_gc.h +slang_builtin_120_common_gc.h: slang_builtin_120_common.gc + $(GLSL_CL) fragment slang_builtin_120_common.gc slang_builtin_120_common_gc.h -slang_builtin_120_fragment_gc.h: gc_to_bin slang_builtin_120_fragment.gc - ./gc_to_bin 1 slang_builtin_120_fragment.gc slang_builtin_120_fragment_gc.h +slang_builtin_120_fragment_gc.h: slang_builtin_120_fragment.gc + $(GLSL_CL) fragment slang_builtin_120_fragment.gc slang_builtin_120_fragment_gc.h -slang_common_builtin_gc.h: gc_to_bin slang_common_builtin.gc - ./gc_to_bin 1 slang_common_builtin.gc slang_common_builtin_gc.h +slang_common_builtin_gc.h: slang_common_builtin.gc + $(GLSL_CL) fragment slang_common_builtin.gc slang_common_builtin_gc.h -slang_core_gc.h: gc_to_bin slang_core.gc - ./gc_to_bin 1 slang_core.gc slang_core_gc.h +slang_core_gc.h: slang_core.gc + $(GLSL_CL) fragment slang_core.gc slang_core_gc.h -slang_fragment_builtin_gc.h: gc_to_bin slang_fragment_builtin.gc - ./gc_to_bin 1 slang_fragment_builtin.gc slang_fragment_builtin_gc.h +slang_fragment_builtin_gc.h: slang_fragment_builtin.gc + $(GLSL_CL) fragment slang_fragment_builtin.gc slang_fragment_builtin_gc.h -slang_vertex_builtin_gc.h: gc_to_bin slang_vertex_builtin.gc - ./gc_to_bin 2 slang_vertex_builtin.gc slang_vertex_builtin_gc.h +slang_vertex_builtin_gc.h: slang_vertex_builtin.gc + $(GLSL_CL) vertex slang_vertex_builtin.gc slang_vertex_builtin_gc.h -- cgit v1.2.3 From d1a09a9ba4a56067cc41e87d00fd7c395f0e7345 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 10 Dec 2009 12:39:37 +0100 Subject: glsl/apps: Explicitly add ARB_draw_buffers and ARB_texture_rectangle. --- src/glsl/apps/compile.c | 11 +++++++++++ src/glsl/apps/process.c | 11 +++++++++++ 2 files changed, 22 insertions(+) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index 03e6e58d60..63c2099e87 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -151,6 +151,17 @@ main(int argc, return 0; } + 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")) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + + printf("Error: %s\n", sl_pp_context_error_message(context)); + sl_pp_context_destroy(context); + free(tokens); + fclose(out); + return 0; + } + if (sl_pp_process(context, &tokens[tokens_eaten], &outtokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 2cec9a9971..6c5c7bc420 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -121,6 +121,17 @@ main(int argc, return -1; } + 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")) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + + printf("Error: %s\n", sl_pp_context_error_message(context)); + sl_pp_context_destroy(context); + free(tokens); + fclose(out); + return 0; + } + if (sl_pp_process(context, &tokens[tokens_eaten], &outtokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); -- cgit v1.2.3 From 417f36ccb062bee01aff92d6fcdf47af3ece3cb4 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Thu, 10 Dec 2009 12:58:44 +0100 Subject: glsl/apps: Predefine __GLSL_PP_PREDEFINED_MACRO_TEST for testing. --- src/glsl/apps/process.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index 6c5c7bc420..b793cc086d 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -132,6 +132,16 @@ main(int argc, return 0; } + if (sl_pp_context_add_predefined(context, "__GLSL_PP_PREDEFINED_MACRO_TEST", "1")) { + fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); + + printf("Error: %s\n", sl_pp_context_error_message(context)); + sl_pp_context_destroy(context); + free(tokens); + fclose(out); + return 0; + } + if (sl_pp_process(context, &tokens[tokens_eaten], &outtokens)) { fprintf(out, "$ERROR: `%s'\n", sl_pp_context_error_message(context)); -- cgit v1.2.3 From 05eccfe79ec74a04630bcebff4c76accf4f85e0d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 10 Dec 2009 08:25:47 -0700 Subject: glsl/apps: remove unused vars --- src/glsl/apps/compile.c | 1 - src/glsl/apps/process.c | 2 -- src/glsl/apps/tokenise.c | 2 -- src/glsl/apps/version.c | 2 -- 4 files changed, 7 deletions(-) (limited to 'src/glsl/apps') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index 63c2099e87..b1165420fb 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -49,7 +49,6 @@ main(int argc, char *inbuf; struct sl_pp_purify_options options; char errmsg[100] = ""; - unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index b793cc086d..d7bc16577e 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -40,8 +40,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char errmsg[100] = ""; - unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index eb86e3df69..91368c32a4 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -40,8 +40,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char errmsg[100] = ""; - unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; FILE *out; diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index b1d0d6ff28..6f77f230ca 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -40,8 +40,6 @@ main(int argc, long size; char *inbuf; struct sl_pp_purify_options options; - char errmsg[100] = ""; - unsigned int errline = 0; struct sl_pp_context *context; struct sl_pp_token_info *tokens; unsigned int version; -- cgit v1.2.3 From 491f384c3958067e6c4c994041f5d8d413b806bc Mon Sep 17 00:00:00 2001 From: José Fonseca Date: Thu, 10 Dec 2009 16:29:04 +0000 Subject: scons: Get GLSL code building correctly when cross compiling. This is quite messy. GLSL code has to be built twice: one for the host OS, another for the target OS. --- SConstruct | 19 +++++++++ src/SConscript | 4 +- src/gallium/winsys/gdi/SConscript | 2 +- src/glsl/SConscript | 68 ++++++++++++++++++++++++++++++++ src/glsl/apps/SConscript | 36 ----------------- src/glsl/cl/SConscript | 11 ------ src/glsl/pp/SConscript | 24 ----------- src/mesa/shader/slang/library/SConscript | 8 ++++ 8 files changed, 97 insertions(+), 75 deletions(-) create mode 100644 src/glsl/SConscript delete mode 100644 src/glsl/apps/SConscript delete mode 100644 src/glsl/cl/SConscript delete mode 100644 src/glsl/pp/SConscript (limited to 'src/glsl/apps') diff --git a/SConstruct b/SConstruct index e9baab0947..e71fcd673a 100644 --- a/SConstruct +++ b/SConstruct @@ -160,6 +160,25 @@ Export('env') # TODO: Build several variants at the same time? # http://www.scons.org/wiki/SimultaneousVariantBuilds +if env['platform'] != common.default_platform: + # GLSL code has to be built twice -- one for the host OS, another for the target OS... + + host_env = Environment( + # options are ignored + # default tool is used + toolpath = ['#scons'], + ENV = os.environ, + ) + + host_env['platform'] = common.default_platform + + SConscript( + 'src/glsl/SConscript', + variant_dir = env['build'] + '/host', + duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html + exports={'env':host_env}, + ) + SConscript( 'src/SConscript', variant_dir = env['build'], diff --git a/src/SConscript b/src/SConscript index f7fac33790..6083fcbec9 100644 --- a/src/SConscript +++ b/src/SConscript @@ -1,8 +1,6 @@ Import('*') -SConscript('glsl/pp/SConscript') -SConscript('glsl/cl/SConscript') -SConscript('glsl/apps/SConscript') +SConscript('glsl/SConscript') SConscript('gallium/SConscript') if 'mesa' in env['statetrackers']: diff --git a/src/gallium/winsys/gdi/SConscript b/src/gallium/winsys/gdi/SConscript index 5b6364a01d..9fbe9e800c 100644 --- a/src/gallium/winsys/gdi/SConscript +++ b/src/gallium/winsys/gdi/SConscript @@ -39,5 +39,5 @@ if env['platform'] == 'windows': env.SharedLibrary( target ='opengl32', source = sources, - LIBS = wgl + glapi + mesa + drivers + auxiliaries + glsl + glslcl + env['LIBS'], + LIBS = wgl + glapi + mesa + drivers + auxiliaries + glsl + env['LIBS'], ) diff --git a/src/glsl/SConscript b/src/glsl/SConscript new file mode 100644 index 0000000000..6f1f81b199 --- /dev/null +++ b/src/glsl/SConscript @@ -0,0 +1,68 @@ +import common + +Import('*') + +env = env.Clone() + +sources = [ + 'pp/sl_pp_context.c', + 'pp/sl_pp_define.c', + 'pp/sl_pp_dict.c', + 'pp/sl_pp_error.c', + 'pp/sl_pp_expression.c', + 'pp/sl_pp_extension.c', + 'pp/sl_pp_if.c', + 'pp/sl_pp_line.c', + 'pp/sl_pp_macro.c', + 'pp/sl_pp_pragma.c', + 'pp/sl_pp_process.c', + 'pp/sl_pp_purify.c', + 'pp/sl_pp_token.c', + 'pp/sl_pp_version.c', + 'cl/sl_cl_parse.c', +] + +glsl = env.StaticLibrary( + target = 'glsl', + source = sources, +) + +Export('glsl') + +env = env.Clone() + +if env['platform'] == 'windows': + env.PrependUnique(LIBS = [ + 'user32', + ]) + +env.Prepend(LIBS = [glsl]) + +env.Program( + target = 'purify', + source = ['apps/purify.c'], +) + +env.Program( + target = 'tokenise', + source = ['apps/tokenise.c'], +) + +env.Program( + target = 'version', + source = ['apps/version.c'], +) + +env.Program( + target = 'process', + source = ['apps/process.c'], +) + +glsl_compile = env.Program( + target = 'compile', + source = ['apps/compile.c'], +) + +if env['platform'] == common.default_platform: + # Only export the GLSL compiler when building for the host platform + Export('glsl_compile') diff --git a/src/glsl/apps/SConscript b/src/glsl/apps/SConscript deleted file mode 100644 index 4c81b3be95..0000000000 --- a/src/glsl/apps/SConscript +++ /dev/null @@ -1,36 +0,0 @@ -Import('*') - -env = env.Clone() - -if env['platform'] == 'windows': - env.PrependUnique(LIBS = [ - 'user32', - ]) - -env.Prepend(LIBS = [glsl, glslcl]) - -env.Program( - target = 'purify', - source = ['purify.c'], -) - -env.Program( - target = 'tokenise', - source = ['tokenise.c'], -) - -env.Program( - target = 'version', - source = ['version.c'], -) - -env.Program( - target = 'process', - source = ['process.c'], -) - -glsl_compile = env.Program( - target = 'compile', - source = ['compile.c'], -) -Export('glsl_compile') diff --git a/src/glsl/cl/SConscript b/src/glsl/cl/SConscript deleted file mode 100644 index 9a4e4c15b6..0000000000 --- a/src/glsl/cl/SConscript +++ /dev/null @@ -1,11 +0,0 @@ -Import('*') - -env = env.Clone() - -glslcl = env.StaticLibrary( - target = 'glslcl', - source = [ - 'sl_cl_parse.c', - ], -) -Export('glslcl') diff --git a/src/glsl/pp/SConscript b/src/glsl/pp/SConscript deleted file mode 100644 index 5bd615c8d7..0000000000 --- a/src/glsl/pp/SConscript +++ /dev/null @@ -1,24 +0,0 @@ -Import('*') - -env = env.Clone() - -glsl = env.StaticLibrary( - target = 'glsl', - source = [ - 'sl_pp_context.c', - 'sl_pp_define.c', - 'sl_pp_dict.c', - 'sl_pp_error.c', - 'sl_pp_expression.c', - 'sl_pp_extension.c', - 'sl_pp_if.c', - 'sl_pp_line.c', - 'sl_pp_macro.c', - 'sl_pp_pragma.c', - 'sl_pp_process.c', - 'sl_pp_purify.c', - 'sl_pp_token.c', - 'sl_pp_version.c', - ], -) -Export('glsl') diff --git a/src/mesa/shader/slang/library/SConscript b/src/mesa/shader/slang/library/SConscript index 8b3fd03b6b..ef131146be 100644 --- a/src/mesa/shader/slang/library/SConscript +++ b/src/mesa/shader/slang/library/SConscript @@ -5,13 +5,21 @@ Import('*') env = env.Clone() +# See also http://www.scons.org/wiki/UsingCodeGenerators + +def glsl_compile_emitter(target, source, env): + env.Depends(target, glsl_compile) + return (target, source) + bld_frag = Builder( action = glsl_compile[0].abspath + ' fragment $SOURCE $TARGET', + emitter = glsl_compile_emitter, suffix = '.gc', src_suffix = '_gc.h') bld_vert = Builder( action = glsl_compile[0].abspath + ' vertex $SOURCE $TARGET', + emitter = glsl_compile_emitter, suffix = '.gc', src_suffix = '_gc.h') -- cgit v1.2.3