diff options
Diffstat (limited to 'src/mesa/shader')
23 files changed, 1110 insertions, 1081 deletions
diff --git a/src/mesa/shader/hash_table.c b/src/mesa/shader/hash_table.c index 881179f9d85..e89a2564d76 100644 --- a/src/mesa/shader/hash_table.c +++ b/src/mesa/shader/hash_table.c @@ -27,10 +27,6 @@ * * \author Ian Romanick <[email protected]> */ -#include <stdlib.h> -#include <string.h> - -#include <assert.h> #include "main/imports.h" #include "main/simple_list.h" diff --git a/src/mesa/shader/lex.yy.c b/src/mesa/shader/lex.yy.c index 3c86913fdfc..5e605274aaa 100644 --- a/src/mesa/shader/lex.yy.c +++ b/src/mesa/shader/lex.yy.c @@ -53,6 +53,7 @@ typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN @@ -83,8 +84,6 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif -#endif /* ! C99 */ - #endif /* ! FLEXINT_H */ #ifdef __cplusplus @@ -158,15 +157,7 @@ typedef void* yyscan_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else #define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -1042,6 +1033,7 @@ static yyconst flex_int16_t yy_chk[1368] = * DEALINGS IN THE SOFTWARE. */ #include "main/glheader.h" +#include "main/imports.h" #include "prog_instruction.h" #include "prog_statevars.h" @@ -1065,7 +1057,8 @@ static yyconst flex_int16_t yy_chk[1368] = if (condition) { \ return token; \ } else { \ - return handle_ident(yyextra, yytext, yylval); \ + yylval->string = return_string(yyextra, yytext); \ + return IDENTIFIER; \ } \ } while (0) @@ -1089,13 +1082,53 @@ static yyconst flex_int16_t yy_chk[1368] = yylval->temp_inst.Opcode = OPCODE_ ## opcode; \ return token; \ } else { \ - return handle_ident(yyextra, yytext, yylval); \ + yylval->string = return_string(yyextra, yytext); \ + return IDENTIFIER; \ } \ } while (0) #define SWIZZLE_INVAL MAKE_SWIZZLE4(SWIZZLE_NIL, SWIZZLE_NIL, \ SWIZZLE_NIL, SWIZZLE_NIL) +/** + * Send a string to the parser using asm_parser_state::string_dumpster + * + * Sends a string to the parser using asm_parser_state::string_dumpster as a + * temporary storage buffer. Data previously stored in + * asm_parser_state::string_dumpster will be lost. If + * asm_parser_state::string_dumpster is not large enough to hold the new + * string, the buffer size will be increased. The buffer size is \b never + * decreased. + * + * \param state Assembler parser state tracking + * \param str String to be passed to the parser + * + * \return + * A pointer to asm_parser_state::string_dumpster on success or \c NULL on + * failure. Currently the only failure case is \c ENOMEM. + */ +static char * +return_string(struct asm_parser_state *state, const char *str) +{ + const size_t len = strlen(str); + + if (len >= state->dumpster_size) { + char *const dumpster = _mesa_realloc(state->string_dumpster, + state->dumpster_size, + len + 1); + if (dumpster == NULL) { + return NULL; + } + + state->string_dumpster = dumpster; + state->dumpster_size = len + 1; + } + + memcpy(state->string_dumpster, str, len + 1); + return state->string_dumpster; +} + + static unsigned mask_from_char(char c) { @@ -1160,7 +1193,7 @@ handle_ident(struct asm_parser_state *state, const char *text, YYSTYPE *lval) } while(0); #define YY_EXTRA_TYPE struct asm_parser_state * -#line 1164 "lex.yy.c" +#line 1197 "lex.yy.c" #define INITIAL 0 @@ -1297,12 +1330,7 @@ static int input (yyscan_t yyscanner ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else #define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1310,7 +1338,7 @@ static int input (yyscan_t yyscanner ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -1321,7 +1349,7 @@ static int input (yyscan_t yyscanner ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + unsigned n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -1406,10 +1434,10 @@ YY_DECL register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; -#line 156 "program_lexer.l" +#line 198 "program_lexer.l" -#line 1413 "lex.yy.c" +#line 1441 "lex.yy.c" yylval = yylval_param; @@ -1498,17 +1526,17 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 158 "program_lexer.l" +#line 200 "program_lexer.l" { return ARBvp_10; } YY_BREAK case 2: YY_RULE_SETUP -#line 159 "program_lexer.l" +#line 201 "program_lexer.l" { return ARBfp_10; } YY_BREAK case 3: YY_RULE_SETUP -#line 160 "program_lexer.l" +#line 202 "program_lexer.l" { yylval->integer = at_address; return_token_or_IDENTIFIER(require_ARB_vp, ADDRESS); @@ -1516,692 +1544,692 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 164 "program_lexer.l" +#line 206 "program_lexer.l" { return ALIAS; } YY_BREAK case 5: YY_RULE_SETUP -#line 165 "program_lexer.l" +#line 207 "program_lexer.l" { return ATTRIB; } YY_BREAK case 6: YY_RULE_SETUP -#line 166 "program_lexer.l" +#line 208 "program_lexer.l" { return END; } YY_BREAK case 7: YY_RULE_SETUP -#line 167 "program_lexer.l" +#line 209 "program_lexer.l" { return OPTION; } YY_BREAK case 8: YY_RULE_SETUP -#line 168 "program_lexer.l" +#line 210 "program_lexer.l" { return OUTPUT; } YY_BREAK case 9: YY_RULE_SETUP -#line 169 "program_lexer.l" +#line 211 "program_lexer.l" { return PARAM; } YY_BREAK case 10: YY_RULE_SETUP -#line 170 "program_lexer.l" +#line 212 "program_lexer.l" { yylval->integer = at_temp; return TEMP; } YY_BREAK case 11: YY_RULE_SETUP -#line 172 "program_lexer.l" +#line 214 "program_lexer.l" { return_opcode( 1, VECTOR_OP, ABS, 3); } YY_BREAK case 12: YY_RULE_SETUP -#line 173 "program_lexer.l" +#line 215 "program_lexer.l" { return_opcode( 1, BIN_OP, ADD, 3); } YY_BREAK case 13: YY_RULE_SETUP -#line 174 "program_lexer.l" +#line 216 "program_lexer.l" { return_opcode(require_ARB_vp, ARL, ARL, 3); } YY_BREAK case 14: YY_RULE_SETUP -#line 176 "program_lexer.l" +#line 218 "program_lexer.l" { return_opcode(require_ARB_fp, TRI_OP, CMP, 3); } YY_BREAK case 15: YY_RULE_SETUP -#line 177 "program_lexer.l" +#line 219 "program_lexer.l" { return_opcode(require_ARB_fp, SCALAR_OP, COS, 3); } YY_BREAK case 16: YY_RULE_SETUP -#line 179 "program_lexer.l" +#line 221 "program_lexer.l" { return_opcode(require_NV_fp, VECTOR_OP, DDX, 3); } YY_BREAK case 17: YY_RULE_SETUP -#line 180 "program_lexer.l" +#line 222 "program_lexer.l" { return_opcode(require_NV_fp, VECTOR_OP, DDY, 3); } YY_BREAK case 18: YY_RULE_SETUP -#line 181 "program_lexer.l" +#line 223 "program_lexer.l" { return_opcode( 1, BIN_OP, DP3, 3); } YY_BREAK case 19: YY_RULE_SETUP -#line 182 "program_lexer.l" +#line 224 "program_lexer.l" { return_opcode( 1, BIN_OP, DP4, 3); } YY_BREAK case 20: YY_RULE_SETUP -#line 183 "program_lexer.l" +#line 225 "program_lexer.l" { return_opcode( 1, BIN_OP, DPH, 3); } YY_BREAK case 21: YY_RULE_SETUP -#line 184 "program_lexer.l" +#line 226 "program_lexer.l" { return_opcode( 1, BIN_OP, DST, 3); } YY_BREAK case 22: YY_RULE_SETUP -#line 186 "program_lexer.l" +#line 228 "program_lexer.l" { return_opcode( 1, SCALAR_OP, EX2, 3); } YY_BREAK case 23: YY_RULE_SETUP -#line 187 "program_lexer.l" +#line 229 "program_lexer.l" { return_opcode(require_ARB_vp, SCALAR_OP, EXP, 3); } YY_BREAK case 24: YY_RULE_SETUP -#line 189 "program_lexer.l" +#line 231 "program_lexer.l" { return_opcode( 1, VECTOR_OP, FLR, 3); } YY_BREAK case 25: YY_RULE_SETUP -#line 190 "program_lexer.l" +#line 232 "program_lexer.l" { return_opcode( 1, VECTOR_OP, FRC, 3); } YY_BREAK case 26: YY_RULE_SETUP -#line 192 "program_lexer.l" +#line 234 "program_lexer.l" { return_opcode(require_ARB_fp, KIL, KIL, 3); } YY_BREAK case 27: YY_RULE_SETUP -#line 194 "program_lexer.l" +#line 236 "program_lexer.l" { return_opcode( 1, VECTOR_OP, LIT, 3); } YY_BREAK case 28: YY_RULE_SETUP -#line 195 "program_lexer.l" +#line 237 "program_lexer.l" { return_opcode( 1, SCALAR_OP, LG2, 3); } YY_BREAK case 29: YY_RULE_SETUP -#line 196 "program_lexer.l" +#line 238 "program_lexer.l" { return_opcode(require_ARB_vp, SCALAR_OP, LOG, 3); } YY_BREAK case 30: YY_RULE_SETUP -#line 197 "program_lexer.l" +#line 239 "program_lexer.l" { return_opcode(require_ARB_fp, TRI_OP, LRP, 3); } YY_BREAK case 31: YY_RULE_SETUP -#line 199 "program_lexer.l" +#line 241 "program_lexer.l" { return_opcode( 1, TRI_OP, MAD, 3); } YY_BREAK case 32: YY_RULE_SETUP -#line 200 "program_lexer.l" +#line 242 "program_lexer.l" { return_opcode( 1, BIN_OP, MAX, 3); } YY_BREAK case 33: YY_RULE_SETUP -#line 201 "program_lexer.l" +#line 243 "program_lexer.l" { return_opcode( 1, BIN_OP, MIN, 3); } YY_BREAK case 34: YY_RULE_SETUP -#line 202 "program_lexer.l" +#line 244 "program_lexer.l" { return_opcode( 1, VECTOR_OP, MOV, 3); } YY_BREAK case 35: YY_RULE_SETUP -#line 203 "program_lexer.l" +#line 245 "program_lexer.l" { return_opcode( 1, BIN_OP, MUL, 3); } YY_BREAK case 36: YY_RULE_SETUP -#line 205 "program_lexer.l" +#line 247 "program_lexer.l" { return_opcode(require_NV_fp, VECTOR_OP, PK2H, 4); } YY_BREAK case 37: YY_RULE_SETUP -#line 206 "program_lexer.l" +#line 248 "program_lexer.l" { return_opcode(require_NV_fp, VECTOR_OP, PK2US, 5); } YY_BREAK case 38: YY_RULE_SETUP -#line 207 "program_lexer.l" +#line 249 "program_lexer.l" { return_opcode(require_NV_fp, VECTOR_OP, PK4B, 4); } YY_BREAK case 39: YY_RULE_SETUP -#line 208 "program_lexer.l" +#line 250 "program_lexer.l" { return_opcode(require_NV_fp, VECTOR_OP, PK4UB, 5); } YY_BREAK case 40: YY_RULE_SETUP -#line 209 "program_lexer.l" +#line 251 "program_lexer.l" { return_opcode( 1, BINSC_OP, POW, 3); } YY_BREAK case 41: YY_RULE_SETUP -#line 211 "program_lexer.l" +#line 253 "program_lexer.l" { return_opcode( 1, SCALAR_OP, RCP, 3); } YY_BREAK case 42: YY_RULE_SETUP -#line 212 "program_lexer.l" +#line 254 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, RFL, 3); } YY_BREAK case 43: YY_RULE_SETUP -#line 213 "program_lexer.l" +#line 255 "program_lexer.l" { return_opcode( 1, SCALAR_OP, RSQ, 3); } YY_BREAK case 44: YY_RULE_SETUP -#line 215 "program_lexer.l" +#line 257 "program_lexer.l" { return_opcode(require_ARB_fp, SCALAR_OP, SCS, 3); } YY_BREAK case 45: YY_RULE_SETUP -#line 216 "program_lexer.l" +#line 258 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, SEQ, 3); } YY_BREAK case 46: YY_RULE_SETUP -#line 217 "program_lexer.l" +#line 259 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, SFL, 3); } YY_BREAK case 47: YY_RULE_SETUP -#line 218 "program_lexer.l" +#line 260 "program_lexer.l" { return_opcode( 1, BIN_OP, SGE, 3); } YY_BREAK case 48: YY_RULE_SETUP -#line 219 "program_lexer.l" +#line 261 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, SGT, 3); } YY_BREAK case 49: YY_RULE_SETUP -#line 220 "program_lexer.l" +#line 262 "program_lexer.l" { return_opcode(require_ARB_fp, SCALAR_OP, SIN, 3); } YY_BREAK case 50: YY_RULE_SETUP -#line 221 "program_lexer.l" +#line 263 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, SLE, 3); } YY_BREAK case 51: YY_RULE_SETUP -#line 222 "program_lexer.l" +#line 264 "program_lexer.l" { return_opcode( 1, BIN_OP, SLT, 3); } YY_BREAK case 52: YY_RULE_SETUP -#line 223 "program_lexer.l" +#line 265 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, SNE, 3); } YY_BREAK case 53: YY_RULE_SETUP -#line 224 "program_lexer.l" +#line 266 "program_lexer.l" { return_opcode(require_NV_fp, BIN_OP, STR, 3); } YY_BREAK case 54: YY_RULE_SETUP -#line 225 "program_lexer.l" +#line 267 "program_lexer.l" { return_opcode( 1, BIN_OP, SUB, 3); } YY_BREAK case 55: YY_RULE_SETUP -#line 226 "program_lexer.l" +#line 268 "program_lexer.l" { return_opcode( 1, SWZ, SWZ, 3); } YY_BREAK case 56: YY_RULE_SETUP -#line 228 "program_lexer.l" +#line 270 "program_lexer.l" { return_opcode(require_ARB_fp, SAMPLE_OP, TEX, 3); } YY_BREAK case 57: YY_RULE_SETUP -#line 229 "program_lexer.l" +#line 271 "program_lexer.l" { return_opcode(require_ARB_fp, SAMPLE_OP, TXB, 3); } YY_BREAK case 58: YY_RULE_SETUP -#line 230 "program_lexer.l" +#line 272 "program_lexer.l" { return_opcode(require_NV_fp, TXD_OP, TXD, 3); } YY_BREAK case 59: YY_RULE_SETUP -#line 231 "program_lexer.l" +#line 273 "program_lexer.l" { return_opcode(require_ARB_fp, SAMPLE_OP, TXP, 3); } YY_BREAK case 60: YY_RULE_SETUP -#line 233 "program_lexer.l" +#line 275 "program_lexer.l" { return_opcode(require_NV_fp, SCALAR_OP, UP2H, 4); } YY_BREAK case 61: YY_RULE_SETUP -#line 234 "program_lexer.l" +#line 276 "program_lexer.l" { return_opcode(require_NV_fp, SCALAR_OP, UP2US, 5); } YY_BREAK case 62: YY_RULE_SETUP -#line 235 "program_lexer.l" +#line 277 "program_lexer.l" { return_opcode(require_NV_fp, SCALAR_OP, UP4B, 4); } YY_BREAK case 63: YY_RULE_SETUP -#line 236 "program_lexer.l" +#line 278 "program_lexer.l" { return_opcode(require_NV_fp, SCALAR_OP, UP4UB, 5); } YY_BREAK case 64: YY_RULE_SETUP -#line 238 "program_lexer.l" +#line 280 "program_lexer.l" { return_opcode(require_NV_fp, TRI_OP, X2D, 3); } YY_BREAK case 65: YY_RULE_SETUP -#line 239 "program_lexer.l" +#line 281 "program_lexer.l" { return_opcode( 1, BIN_OP, XPD, 3); } YY_BREAK case 66: YY_RULE_SETUP -#line 241 "program_lexer.l" +#line 283 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_vp, VERTEX); } YY_BREAK case 67: YY_RULE_SETUP -#line 242 "program_lexer.l" +#line 284 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp, FRAGMENT); } YY_BREAK case 68: YY_RULE_SETUP -#line 243 "program_lexer.l" +#line 285 "program_lexer.l" { return PROGRAM; } YY_BREAK case 69: YY_RULE_SETUP -#line 244 "program_lexer.l" +#line 286 "program_lexer.l" { return STATE; } YY_BREAK case 70: YY_RULE_SETUP -#line 245 "program_lexer.l" +#line 287 "program_lexer.l" { return RESULT; } YY_BREAK case 71: YY_RULE_SETUP -#line 247 "program_lexer.l" +#line 289 "program_lexer.l" { return AMBIENT; } YY_BREAK case 72: YY_RULE_SETUP -#line 248 "program_lexer.l" +#line 290 "program_lexer.l" { return ATTENUATION; } YY_BREAK case 73: YY_RULE_SETUP -#line 249 "program_lexer.l" +#line 291 "program_lexer.l" { return BACK; } YY_BREAK case 74: YY_RULE_SETUP -#line 250 "program_lexer.l" +#line 292 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, CLIP); } YY_BREAK case 75: YY_RULE_SETUP -#line 251 "program_lexer.l" +#line 293 "program_lexer.l" { return COLOR; } YY_BREAK case 76: YY_RULE_SETUP -#line 252 "program_lexer.l" +#line 294 "program_lexer.l" { return_token_or_DOT(require_ARB_fp, DEPTH); } YY_BREAK case 77: YY_RULE_SETUP -#line 253 "program_lexer.l" +#line 295 "program_lexer.l" { return DIFFUSE; } YY_BREAK case 78: YY_RULE_SETUP -#line 254 "program_lexer.l" +#line 296 "program_lexer.l" { return DIRECTION; } YY_BREAK case 79: YY_RULE_SETUP -#line 255 "program_lexer.l" +#line 297 "program_lexer.l" { return EMISSION; } YY_BREAK case 80: YY_RULE_SETUP -#line 256 "program_lexer.l" +#line 298 "program_lexer.l" { return ENV; } YY_BREAK case 81: YY_RULE_SETUP -#line 257 "program_lexer.l" +#line 299 "program_lexer.l" { return EYE; } YY_BREAK case 82: YY_RULE_SETUP -#line 258 "program_lexer.l" +#line 300 "program_lexer.l" { return FOGCOORD; } YY_BREAK case 83: YY_RULE_SETUP -#line 259 "program_lexer.l" +#line 301 "program_lexer.l" { return FOG; } YY_BREAK case 84: YY_RULE_SETUP -#line 260 "program_lexer.l" +#line 302 "program_lexer.l" { return FRONT; } YY_BREAK case 85: YY_RULE_SETUP -#line 261 "program_lexer.l" +#line 303 "program_lexer.l" { return HALF; } YY_BREAK case 86: YY_RULE_SETUP -#line 262 "program_lexer.l" +#line 304 "program_lexer.l" { return INVERSE; } YY_BREAK case 87: YY_RULE_SETUP -#line 263 "program_lexer.l" +#line 305 "program_lexer.l" { return INVTRANS; } YY_BREAK case 88: YY_RULE_SETUP -#line 264 "program_lexer.l" +#line 306 "program_lexer.l" { return LIGHT; } YY_BREAK case 89: YY_RULE_SETUP -#line 265 "program_lexer.l" +#line 307 "program_lexer.l" { return LIGHTMODEL; } YY_BREAK case 90: YY_RULE_SETUP -#line 266 "program_lexer.l" +#line 308 "program_lexer.l" { return LIGHTPROD; } YY_BREAK case 91: YY_RULE_SETUP -#line 267 "program_lexer.l" +#line 309 "program_lexer.l" { return LOCAL; } YY_BREAK case 92: YY_RULE_SETUP -#line 268 "program_lexer.l" +#line 310 "program_lexer.l" { return MATERIAL; } YY_BREAK case 93: YY_RULE_SETUP -#line 269 "program_lexer.l" +#line 311 "program_lexer.l" { return MAT_PROGRAM; } YY_BREAK case 94: YY_RULE_SETUP -#line 270 "program_lexer.l" +#line 312 "program_lexer.l" { return MATRIX; } YY_BREAK case 95: YY_RULE_SETUP -#line 271 "program_lexer.l" +#line 313 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, MATRIXINDEX); } YY_BREAK case 96: YY_RULE_SETUP -#line 272 "program_lexer.l" +#line 314 "program_lexer.l" { return MODELVIEW; } YY_BREAK case 97: YY_RULE_SETUP -#line 273 "program_lexer.l" +#line 315 "program_lexer.l" { return MVP; } YY_BREAK case 98: YY_RULE_SETUP -#line 274 "program_lexer.l" +#line 316 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, NORMAL); } YY_BREAK case 99: YY_RULE_SETUP -#line 275 "program_lexer.l" +#line 317 "program_lexer.l" { return OBJECT; } YY_BREAK case 100: YY_RULE_SETUP -#line 276 "program_lexer.l" +#line 318 "program_lexer.l" { return PALETTE; } YY_BREAK case 101: YY_RULE_SETUP -#line 277 "program_lexer.l" +#line 319 "program_lexer.l" { return PARAMS; } YY_BREAK case 102: YY_RULE_SETUP -#line 278 "program_lexer.l" +#line 320 "program_lexer.l" { return PLANE; } YY_BREAK case 103: YY_RULE_SETUP -#line 279 "program_lexer.l" +#line 321 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, POINT_TOK); } YY_BREAK case 104: YY_RULE_SETUP -#line 280 "program_lexer.l" +#line 322 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, POINTSIZE); } YY_BREAK case 105: YY_RULE_SETUP -#line 281 "program_lexer.l" +#line 323 "program_lexer.l" { return POSITION; } YY_BREAK case 106: YY_RULE_SETUP -#line 282 "program_lexer.l" +#line 324 "program_lexer.l" { return PRIMARY; } YY_BREAK case 107: YY_RULE_SETUP -#line 283 "program_lexer.l" +#line 325 "program_lexer.l" { return PROJECTION; } YY_BREAK case 108: YY_RULE_SETUP -#line 284 "program_lexer.l" +#line 326 "program_lexer.l" { return_token_or_DOT(require_ARB_fp, RANGE); } YY_BREAK case 109: YY_RULE_SETUP -#line 285 "program_lexer.l" +#line 327 "program_lexer.l" { return ROW; } YY_BREAK case 110: YY_RULE_SETUP -#line 286 "program_lexer.l" +#line 328 "program_lexer.l" { return SCENECOLOR; } YY_BREAK case 111: YY_RULE_SETUP -#line 287 "program_lexer.l" +#line 329 "program_lexer.l" { return SECONDARY; } YY_BREAK case 112: YY_RULE_SETUP -#line 288 "program_lexer.l" +#line 330 "program_lexer.l" { return SHININESS; } YY_BREAK case 113: YY_RULE_SETUP -#line 289 "program_lexer.l" +#line 331 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, SIZE_TOK); } YY_BREAK case 114: YY_RULE_SETUP -#line 290 "program_lexer.l" +#line 332 "program_lexer.l" { return SPECULAR; } YY_BREAK case 115: YY_RULE_SETUP -#line 291 "program_lexer.l" +#line 333 "program_lexer.l" { return SPOT; } YY_BREAK case 116: YY_RULE_SETUP -#line 292 "program_lexer.l" +#line 334 "program_lexer.l" { return TEXCOORD; } YY_BREAK case 117: YY_RULE_SETUP -#line 293 "program_lexer.l" +#line 335 "program_lexer.l" { return_token_or_DOT(require_ARB_fp, TEXENV); } YY_BREAK case 118: YY_RULE_SETUP -#line 294 "program_lexer.l" +#line 336 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, TEXGEN); } YY_BREAK case 119: YY_RULE_SETUP -#line 295 "program_lexer.l" +#line 337 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, TEXGEN_Q); } YY_BREAK case 120: YY_RULE_SETUP -#line 296 "program_lexer.l" +#line 338 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, TEXGEN_S); } YY_BREAK case 121: YY_RULE_SETUP -#line 297 "program_lexer.l" +#line 339 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, TEXGEN_T); } YY_BREAK case 122: YY_RULE_SETUP -#line 298 "program_lexer.l" +#line 340 "program_lexer.l" { return TEXTURE; } YY_BREAK case 123: YY_RULE_SETUP -#line 299 "program_lexer.l" +#line 341 "program_lexer.l" { return TRANSPOSE; } YY_BREAK case 124: YY_RULE_SETUP -#line 300 "program_lexer.l" +#line 342 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, VTXATTRIB); } YY_BREAK case 125: YY_RULE_SETUP -#line 301 "program_lexer.l" +#line 343 "program_lexer.l" { return_token_or_DOT(require_ARB_vp, WEIGHT); } YY_BREAK case 126: YY_RULE_SETUP -#line 303 "program_lexer.l" +#line 345 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp, TEXTURE_UNIT); } YY_BREAK case 127: YY_RULE_SETUP -#line 304 "program_lexer.l" +#line 346 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp, TEX_1D); } YY_BREAK case 128: YY_RULE_SETUP -#line 305 "program_lexer.l" +#line 347 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp, TEX_2D); } YY_BREAK case 129: YY_RULE_SETUP -#line 306 "program_lexer.l" +#line 348 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp, TEX_3D); } YY_BREAK case 130: YY_RULE_SETUP -#line 307 "program_lexer.l" +#line 349 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp, TEX_CUBE); } YY_BREAK case 131: YY_RULE_SETUP -#line 308 "program_lexer.l" +#line 350 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_rect, TEX_RECT); } YY_BREAK case 132: YY_RULE_SETUP -#line 309 "program_lexer.l" +#line 351 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW1D); } YY_BREAK case 133: YY_RULE_SETUP -#line 310 "program_lexer.l" +#line 352 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow, TEX_SHADOW2D); } YY_BREAK case 134: YY_RULE_SETUP -#line 311 "program_lexer.l" +#line 353 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_rect, TEX_SHADOWRECT); } YY_BREAK case 135: YY_RULE_SETUP -#line 312 "program_lexer.l" +#line 354 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY1D); } YY_BREAK case 136: YY_RULE_SETUP -#line 313 "program_lexer.l" +#line 355 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_texarray, TEX_ARRAY2D); } YY_BREAK case 137: YY_RULE_SETUP -#line 314 "program_lexer.l" +#line 356 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW1D); } YY_BREAK case 138: YY_RULE_SETUP -#line 315 "program_lexer.l" +#line 357 "program_lexer.l" { return_token_or_IDENTIFIER(require_ARB_fp && require_shadow && require_texarray, TEX_ARRAYSHADOW2D); } YY_BREAK case 139: YY_RULE_SETUP -#line 317 "program_lexer.l" +#line 359 "program_lexer.l" { return handle_ident(yyextra, yytext, yylval); } YY_BREAK case 140: YY_RULE_SETUP -#line 319 "program_lexer.l" +#line 361 "program_lexer.l" { return DOT_DOT; } YY_BREAK case 141: YY_RULE_SETUP -#line 321 "program_lexer.l" +#line 363 "program_lexer.l" { yylval->integer = strtol(yytext, NULL, 10); return INTEGER; @@ -2209,9 +2237,9 @@ YY_RULE_SETUP YY_BREAK case 142: YY_RULE_SETUP -#line 325 "program_lexer.l" +#line 367 "program_lexer.l" { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } YY_BREAK @@ -2221,31 +2249,31 @@ case 143: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 329 "program_lexer.l" +#line 371 "program_lexer.l" { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } YY_BREAK case 144: YY_RULE_SETUP -#line 333 "program_lexer.l" +#line 375 "program_lexer.l" { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } YY_BREAK case 145: YY_RULE_SETUP -#line 337 "program_lexer.l" +#line 379 "program_lexer.l" { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } YY_BREAK case 146: YY_RULE_SETUP -#line 342 "program_lexer.l" +#line 384 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_NOOP; yylval->swiz_mask.mask = WRITEMASK_XYZW; @@ -2254,7 +2282,7 @@ YY_RULE_SETUP YY_BREAK case 147: YY_RULE_SETUP -#line 348 "program_lexer.l" +#line 390 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_XY @@ -2264,7 +2292,7 @@ YY_RULE_SETUP YY_BREAK case 148: YY_RULE_SETUP -#line 354 "program_lexer.l" +#line 396 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_XZW; @@ -2273,7 +2301,7 @@ YY_RULE_SETUP YY_BREAK case 149: YY_RULE_SETUP -#line 359 "program_lexer.l" +#line 401 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_YZW; @@ -2282,7 +2310,7 @@ YY_RULE_SETUP YY_BREAK case 150: YY_RULE_SETUP -#line 365 "program_lexer.l" +#line 407 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_X @@ -2292,7 +2320,7 @@ YY_RULE_SETUP YY_BREAK case 151: YY_RULE_SETUP -#line 371 "program_lexer.l" +#line 413 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_Y @@ -2302,7 +2330,7 @@ YY_RULE_SETUP YY_BREAK case 152: YY_RULE_SETUP -#line 377 "program_lexer.l" +#line 419 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_ZW; @@ -2311,7 +2339,7 @@ YY_RULE_SETUP YY_BREAK case 153: YY_RULE_SETUP -#line 383 "program_lexer.l" +#line 425 "program_lexer.l" { const unsigned s = swiz_from_char(yytext[1]); yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s); @@ -2321,7 +2349,7 @@ YY_RULE_SETUP YY_BREAK case 154: YY_RULE_SETUP -#line 390 "program_lexer.l" +#line 432 "program_lexer.l" { yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]), swiz_from_char(yytext[2]), @@ -2333,7 +2361,7 @@ YY_RULE_SETUP YY_BREAK case 155: YY_RULE_SETUP -#line 399 "program_lexer.l" +#line 441 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_NOOP; yylval->swiz_mask.mask = WRITEMASK_XYZW; @@ -2342,7 +2370,7 @@ YY_RULE_SETUP YY_BREAK case 156: YY_RULE_SETUP -#line 405 "program_lexer.l" +#line 447 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_XY @@ -2352,7 +2380,7 @@ YY_RULE_SETUP YY_BREAK case 157: YY_RULE_SETUP -#line 411 "program_lexer.l" +#line 453 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_XZW; @@ -2361,7 +2389,7 @@ YY_RULE_SETUP YY_BREAK case 158: YY_RULE_SETUP -#line 416 "program_lexer.l" +#line 458 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_YZW; @@ -2370,7 +2398,7 @@ YY_RULE_SETUP YY_BREAK case 159: YY_RULE_SETUP -#line 422 "program_lexer.l" +#line 464 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_X @@ -2380,7 +2408,7 @@ YY_RULE_SETUP YY_BREAK case 160: YY_RULE_SETUP -#line 428 "program_lexer.l" +#line 470 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_Y @@ -2390,7 +2418,7 @@ YY_RULE_SETUP YY_BREAK case 161: YY_RULE_SETUP -#line 434 "program_lexer.l" +#line 476 "program_lexer.l" { yylval->swiz_mask.swizzle = SWIZZLE_INVAL; yylval->swiz_mask.mask = WRITEMASK_ZW; @@ -2399,7 +2427,7 @@ YY_RULE_SETUP YY_BREAK case 162: YY_RULE_SETUP -#line 440 "program_lexer.l" +#line 482 "program_lexer.l" { const unsigned s = swiz_from_char(yytext[1]); yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(s, s, s, s); @@ -2409,7 +2437,7 @@ YY_RULE_SETUP YY_BREAK case 163: YY_RULE_SETUP -#line 448 "program_lexer.l" +#line 490 "program_lexer.l" { if (require_ARB_vp) { return TEXGEN_R; @@ -2423,7 +2451,7 @@ YY_RULE_SETUP YY_BREAK case 164: YY_RULE_SETUP -#line 459 "program_lexer.l" +#line 501 "program_lexer.l" { yylval->swiz_mask.swizzle = MAKE_SWIZZLE4(swiz_from_char(yytext[1]), swiz_from_char(yytext[2]), @@ -2435,13 +2463,13 @@ YY_RULE_SETUP YY_BREAK case 165: YY_RULE_SETUP -#line 468 "program_lexer.l" +#line 510 "program_lexer.l" { return DOT; } YY_BREAK case 166: /* rule 166 can match eol */ YY_RULE_SETUP -#line 470 "program_lexer.l" +#line 512 "program_lexer.l" { yylloc->first_line++; yylloc->first_column = 1; @@ -2452,7 +2480,7 @@ YY_RULE_SETUP YY_BREAK case 167: YY_RULE_SETUP -#line 477 "program_lexer.l" +#line 519 "program_lexer.l" /* eat whitespace */ ; YY_BREAK case 168: @@ -2460,20 +2488,20 @@ case 168: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 478 "program_lexer.l" +#line 520 "program_lexer.l" /* eat comments */ ; YY_BREAK case 169: YY_RULE_SETUP -#line 479 "program_lexer.l" +#line 521 "program_lexer.l" { return yytext[0]; } YY_BREAK case 170: YY_RULE_SETUP -#line 480 "program_lexer.l" +#line 522 "program_lexer.l" ECHO; YY_BREAK -#line 2477 "lex.yy.c" +#line 2505 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -3241,8 +3269,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ @@ -3648,7 +3676,7 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 480 "program_lexer.l" +#line 522 "program_lexer.l" diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c index 69b81e724a2..192d39aed1e 100644 --- a/src/mesa/shader/prog_execute.c +++ b/src/mesa/shader/prog_execute.c @@ -939,7 +939,7 @@ _mesa_execute_program(GLcontext * ctx, /* The fast LOG2 macro doesn't meet the precision requirements. */ if (a[0] == 0.0F) { - val = 0.0F; + val = -FLT_MAX; } else { val = log(a[0]) * 1.442695F; diff --git a/src/mesa/shader/prog_optimize.c b/src/mesa/shader/prog_optimize.c index be903106a08..9d937488e37 100644 --- a/src/mesa/shader/prog_optimize.c +++ b/src/mesa/shader/prog_optimize.c @@ -217,6 +217,7 @@ _mesa_remove_dead_code(struct gl_program *prog) if (inst->SrcReg[j].RelAddr) { if (dbg) _mesa_printf("abort remove dead code (indirect temp)\n"); + _mesa_free(removeInst); return; } @@ -232,6 +233,7 @@ _mesa_remove_dead_code(struct gl_program *prog) if (inst->DstReg.RelAddr) { if (dbg) _mesa_printf("abort remove dead code (indirect temp)\n"); + _mesa_free(removeInst); return; } @@ -422,6 +424,8 @@ _mesa_remove_extra_moves(struct gl_program *prog) /* now remove the instructions which aren't needed */ rem = remove_instructions(prog, removeInst); + _mesa_free(removeInst); + if (dbg) { _mesa_printf("Optimize: End remove extra moves. %u instructions removed\n", rem); /*_mesa_print_program(prog);*/ diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h index d1fcf47e61b..699cb0c7356 100644 --- a/src/mesa/shader/prog_parameter.h +++ b/src/mesa/shader/prog_parameter.h @@ -56,7 +56,13 @@ struct gl_program_parameter const char *Name; /**< Null-terminated string */ gl_register_file Type; /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */ GLenum DataType; /**< GL_FLOAT, GL_FLOAT_VEC2, etc */ - GLuint Size; /**< Number of components (1..4) */ + /** + * Number of components (1..4), or more. + * If the number of components is greater than 4, + * this parameter is part of a larger uniform like a GLSL matrix or array. + * The next program parameter's Size will be Size-4 of this parameter. + */ + GLuint Size; GLboolean Used; /**< Helper flag for GLSL uniform tracking */ GLboolean Initialized; /**< Has the ParameterValue[] been set? */ GLbitfield Flags; /**< Bitmask of PROG_PARAM_*_BIT */ diff --git a/src/mesa/shader/prog_print.c b/src/mesa/shader/prog_print.c index b71735aa80e..ba4d39452f4 100644 --- a/src/mesa/shader/prog_print.c +++ b/src/mesa/shader/prog_print.c @@ -788,7 +788,7 @@ _mesa_fprint_program_opt(FILE *f, else if (mode == PROG_PRINT_NV) _mesa_fprintf(f, "!!VP1.0\n"); else - _mesa_fprintf(f, "# Vertex Program/Shader\n"); + _mesa_fprintf(f, "# Vertex Program/Shader %u\n", prog->Id); break; case GL_FRAGMENT_PROGRAM_ARB: case GL_FRAGMENT_PROGRAM_NV: @@ -797,7 +797,7 @@ _mesa_fprint_program_opt(FILE *f, else if (mode == PROG_PRINT_NV) _mesa_fprintf(f, "!!FP1.0\n"); else - _mesa_fprintf(f, "# Fragment Program/Shader\n"); + _mesa_fprintf(f, "# Fragment Program/Shader %u\n", prog->Id); break; } @@ -906,7 +906,8 @@ _mesa_fprint_parameter_list(FILE *f, if (!list) return; - _mesa_fprintf(f, "param list %p\n", (void *) list); + if (0) + _mesa_fprintf(f, "param list %p\n", (void *) list); _mesa_fprintf(f, "dirty state flags: 0x%x\n", list->StateFlags); for (i = 0; i < list->NumParameters; i++){ struct gl_program_parameter *param = list->Parameters + i; diff --git a/src/mesa/shader/program_lexer.l b/src/mesa/shader/program_lexer.l index 8498c3d8fc0..b50fb3c7dc2 100644 --- a/src/mesa/shader/program_lexer.l +++ b/src/mesa/shader/program_lexer.l @@ -22,6 +22,7 @@ * DEALINGS IN THE SOFTWARE. */ #include "main/glheader.h" +#include "main/imports.h" #include "prog_instruction.h" #include "prog_statevars.h" @@ -45,7 +46,8 @@ if (condition) { \ return token; \ } else { \ - return handle_ident(yyextra, yytext, yylval); \ + yylval->string = return_string(yyextra, yytext); \ + return IDENTIFIER; \ } \ } while (0) @@ -69,13 +71,53 @@ yylval->temp_inst.Opcode = OPCODE_ ## opcode; \ return token; \ } else { \ - return handle_ident(yyextra, yytext, yylval); \ + yylval->string = return_string(yyextra, yytext); \ + return IDENTIFIER; \ } \ } while (0) #define SWIZZLE_INVAL MAKE_SWIZZLE4(SWIZZLE_NIL, SWIZZLE_NIL, \ SWIZZLE_NIL, SWIZZLE_NIL) +/** + * Send a string to the parser using asm_parser_state::string_dumpster + * + * Sends a string to the parser using asm_parser_state::string_dumpster as a + * temporary storage buffer. Data previously stored in + * asm_parser_state::string_dumpster will be lost. If + * asm_parser_state::string_dumpster is not large enough to hold the new + * string, the buffer size will be increased. The buffer size is \b never + * decreased. + * + * \param state Assembler parser state tracking + * \param str String to be passed to the parser + * + * \return + * A pointer to asm_parser_state::string_dumpster on success or \c NULL on + * failure. Currently the only failure case is \c ENOMEM. + */ +static char * +return_string(struct asm_parser_state *state, const char *str) +{ + const size_t len = strlen(str); + + if (len >= state->dumpster_size) { + char *const dumpster = _mesa_realloc(state->string_dumpster, + state->dumpster_size, + len + 1); + if (dumpster == NULL) { + return NULL; + } + + state->string_dumpster = dumpster; + state->dumpster_size = len + 1; + } + + memcpy(state->string_dumpster, str, len + 1); + return state->string_dumpster; +} + + static unsigned mask_from_char(char c) { @@ -323,19 +365,19 @@ ARRAYSHADOW2D { return_token_or_IDENTIFIER(require_ARB_fp && require return INTEGER; } {num}?{frac}{exp}? { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } {num}"."/[^.] { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } {num}{exp} { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } {num}"."{exp} { - yylval->real = strtod(yytext, NULL); + yylval->real = _mesa_strtod(yytext, NULL); return REAL; } diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c index c0f50147bd9..6e4095eca63 100644 --- a/src/mesa/shader/program_parse.tab.c +++ b/src/mesa/shader/program_parse.tab.c @@ -1,23 +1,24 @@ - -/* A Bison parser, made by GNU Bison 2.4.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - + the Free Software Foundation; either version 2, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -28,7 +29,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -46,7 +47,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.4.1" +#define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -54,20 +55,235 @@ /* Pure parsers. */ #define YYPURE 1 -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - /* Using locations. */ #define YYLSP_NEEDED 1 -/* Copy the first part of user declarations. */ +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ARBvp_10 = 258, + ARBfp_10 = 259, + ADDRESS = 260, + ALIAS = 261, + ATTRIB = 262, + OPTION = 263, + OUTPUT = 264, + PARAM = 265, + TEMP = 266, + END = 267, + BIN_OP = 268, + BINSC_OP = 269, + SAMPLE_OP = 270, + SCALAR_OP = 271, + TRI_OP = 272, + VECTOR_OP = 273, + ARL = 274, + KIL = 275, + SWZ = 276, + TXD_OP = 277, + INTEGER = 278, + REAL = 279, + AMBIENT = 280, + ATTENUATION = 281, + BACK = 282, + CLIP = 283, + COLOR = 284, + DEPTH = 285, + DIFFUSE = 286, + DIRECTION = 287, + EMISSION = 288, + ENV = 289, + EYE = 290, + FOG = 291, + FOGCOORD = 292, + FRAGMENT = 293, + FRONT = 294, + HALF = 295, + INVERSE = 296, + INVTRANS = 297, + LIGHT = 298, + LIGHTMODEL = 299, + LIGHTPROD = 300, + LOCAL = 301, + MATERIAL = 302, + MAT_PROGRAM = 303, + MATRIX = 304, + MATRIXINDEX = 305, + MODELVIEW = 306, + MVP = 307, + NORMAL = 308, + OBJECT = 309, + PALETTE = 310, + PARAMS = 311, + PLANE = 312, + POINT_TOK = 313, + POINTSIZE = 314, + POSITION = 315, + PRIMARY = 316, + PROGRAM = 317, + PROJECTION = 318, + RANGE = 319, + RESULT = 320, + ROW = 321, + SCENECOLOR = 322, + SECONDARY = 323, + SHININESS = 324, + SIZE_TOK = 325, + SPECULAR = 326, + SPOT = 327, + STATE = 328, + TEXCOORD = 329, + TEXENV = 330, + TEXGEN = 331, + TEXGEN_Q = 332, + TEXGEN_R = 333, + TEXGEN_S = 334, + TEXGEN_T = 335, + TEXTURE = 336, + TRANSPOSE = 337, + TEXTURE_UNIT = 338, + TEX_1D = 339, + TEX_2D = 340, + TEX_3D = 341, + TEX_CUBE = 342, + TEX_RECT = 343, + TEX_SHADOW1D = 344, + TEX_SHADOW2D = 345, + TEX_SHADOWRECT = 346, + TEX_ARRAY1D = 347, + TEX_ARRAY2D = 348, + TEX_ARRAYSHADOW1D = 349, + TEX_ARRAYSHADOW2D = 350, + VERTEX = 351, + VTXATTRIB = 352, + WEIGHT = 353, + IDENTIFIER = 354, + USED_IDENTIFIER = 355, + MASK4 = 356, + MASK3 = 357, + MASK2 = 358, + MASK1 = 359, + SWIZZLE = 360, + DOT_DOT = 361, + DOT = 362 + }; +#endif +/* Tokens. */ +#define ARBvp_10 258 +#define ARBfp_10 259 +#define ADDRESS 260 +#define ALIAS 261 +#define ATTRIB 262 +#define OPTION 263 +#define OUTPUT 264 +#define PARAM 265 +#define TEMP 266 +#define END 267 +#define BIN_OP 268 +#define BINSC_OP 269 +#define SAMPLE_OP 270 +#define SCALAR_OP 271 +#define TRI_OP 272 +#define VECTOR_OP 273 +#define ARL 274 +#define KIL 275 +#define SWZ 276 +#define TXD_OP 277 +#define INTEGER 278 +#define REAL 279 +#define AMBIENT 280 +#define ATTENUATION 281 +#define BACK 282 +#define CLIP 283 +#define COLOR 284 +#define DEPTH 285 +#define DIFFUSE 286 +#define DIRECTION 287 +#define EMISSION 288 +#define ENV 289 +#define EYE 290 +#define FOG 291 +#define FOGCOORD 292 +#define FRAGMENT 293 +#define FRONT 294 +#define HALF 295 +#define INVERSE 296 +#define INVTRANS 297 +#define LIGHT 298 +#define LIGHTMODEL 299 +#define LIGHTPROD 300 +#define LOCAL 301 +#define MATERIAL 302 +#define MAT_PROGRAM 303 +#define MATRIX 304 +#define MATRIXINDEX 305 +#define MODELVIEW 306 +#define MVP 307 +#define NORMAL 308 +#define OBJECT 309 +#define PALETTE 310 +#define PARAMS 311 +#define PLANE 312 +#define POINT_TOK 313 +#define POINTSIZE 314 +#define POSITION 315 +#define PRIMARY 316 +#define PROGRAM 317 +#define PROJECTION 318 +#define RANGE 319 +#define RESULT 320 +#define ROW 321 +#define SCENECOLOR 322 +#define SECONDARY 323 +#define SHININESS 324 +#define SIZE_TOK 325 +#define SPECULAR 326 +#define SPOT 327 +#define STATE 328 +#define TEXCOORD 329 +#define TEXENV 330 +#define TEXGEN 331 +#define TEXGEN_Q 332 +#define TEXGEN_R 333 +#define TEXGEN_S 334 +#define TEXGEN_T 335 +#define TEXTURE 336 +#define TRANSPOSE 337 +#define TEXTURE_UNIT 338 +#define TEX_1D 339 +#define TEX_2D 340 +#define TEX_3D 341 +#define TEX_CUBE 342 +#define TEX_RECT 343 +#define TEX_SHADOW1D 344 +#define TEX_SHADOW2D 345 +#define TEX_SHADOWRECT 346 +#define TEX_ARRAY1D 347 +#define TEX_ARRAY2D 348 +#define TEX_ARRAYSHADOW1D 349 +#define TEX_ARRAYSHADOW2D 350 +#define VERTEX 351 +#define VTXATTRIB 352 +#define WEIGHT 353 +#define IDENTIFIER 354 +#define USED_IDENTIFIER 355 +#define MASK4 356 +#define MASK3 357 +#define MASK2 358 +#define MASK1 359 +#define SWIZZLE 360 +#define DOT_DOT 361 +#define DOT 362 + + + -/* Line 189 of yacc.c */ +/* Copy the first part of user declarations. */ #line 1 "program_parse.y" /* @@ -178,9 +394,6 @@ static struct asm_instruction *asm_instruction_copy_ctor( #define YYLEX_PARAM state->scanner -/* Line 189 of yacc.c */ -#line 183 "program_parse.tab.c" - /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -199,130 +412,10 @@ static struct asm_instruction *asm_instruction_copy_ctor( # define YYTOKEN_TABLE 0 #endif - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - ARBvp_10 = 258, - ARBfp_10 = 259, - ADDRESS = 260, - ALIAS = 261, - ATTRIB = 262, - OPTION = 263, - OUTPUT = 264, - PARAM = 265, - TEMP = 266, - END = 267, - BIN_OP = 268, - BINSC_OP = 269, - SAMPLE_OP = 270, - SCALAR_OP = 271, - TRI_OP = 272, - VECTOR_OP = 273, - ARL = 274, - KIL = 275, - SWZ = 276, - TXD_OP = 277, - INTEGER = 278, - REAL = 279, - AMBIENT = 280, - ATTENUATION = 281, - BACK = 282, - CLIP = 283, - COLOR = 284, - DEPTH = 285, - DIFFUSE = 286, - DIRECTION = 287, - EMISSION = 288, - ENV = 289, - EYE = 290, - FOG = 291, - FOGCOORD = 292, - FRAGMENT = 293, - FRONT = 294, - HALF = 295, - INVERSE = 296, - INVTRANS = 297, - LIGHT = 298, - LIGHTMODEL = 299, - LIGHTPROD = 300, - LOCAL = 301, - MATERIAL = 302, - MAT_PROGRAM = 303, - MATRIX = 304, - MATRIXINDEX = 305, - MODELVIEW = 306, - MVP = 307, - NORMAL = 308, - OBJECT = 309, - PALETTE = 310, - PARAMS = 311, - PLANE = 312, - POINT_TOK = 313, - POINTSIZE = 314, - POSITION = 315, - PRIMARY = 316, - PROGRAM = 317, - PROJECTION = 318, - RANGE = 319, - RESULT = 320, - ROW = 321, - SCENECOLOR = 322, - SECONDARY = 323, - SHININESS = 324, - SIZE_TOK = 325, - SPECULAR = 326, - SPOT = 327, - STATE = 328, - TEXCOORD = 329, - TEXENV = 330, - TEXGEN = 331, - TEXGEN_Q = 332, - TEXGEN_R = 333, - TEXGEN_S = 334, - TEXGEN_T = 335, - TEXTURE = 336, - TRANSPOSE = 337, - TEXTURE_UNIT = 338, - TEX_1D = 339, - TEX_2D = 340, - TEX_3D = 341, - TEX_CUBE = 342, - TEX_RECT = 343, - TEX_SHADOW1D = 344, - TEX_SHADOW2D = 345, - TEX_SHADOWRECT = 346, - TEX_ARRAY1D = 347, - TEX_ARRAY2D = 348, - TEX_ARRAYSHADOW1D = 349, - TEX_ARRAYSHADOW2D = 350, - VERTEX = 351, - VTXATTRIB = 352, - WEIGHT = 353, - IDENTIFIER = 354, - USED_IDENTIFIER = 355, - MASK4 = 356, - MASK3 = 357, - MASK2 = 358, - MASK1 = 359, - SWIZZLE = 360, - DOT_DOT = 361, - DOT = 362 - }; -#endif - - - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -{ - -/* Line 214 of yacc.c */ #line 116 "program_parse.y" - +{ struct asm_instruction *inst; struct asm_symbol *sym; struct asm_symbol temp_sym; @@ -346,15 +439,13 @@ typedef union YYSTYPE unsigned xyzw_valid:1; unsigned negate:1; } ext_swizzle; - - - -/* Line 214 of yacc.c */ -#line 354 "program_parse.tab.c" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 +} +/* Line 187 of yacc.c. */ +#line 445 "program_parse.tab.c" + YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED @@ -372,16 +463,14 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ - -/* Line 264 of yacc.c */ #line 261 "program_parse.y" extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, void *yyscanner); -/* Line 264 of yacc.c */ -#line 385 "program_parse.tab.c" +/* Line 216 of yacc.c. */ +#line 474 "program_parse.tab.c" #ifdef short # undef short @@ -456,14 +545,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int yyi) +YYID (int i) #else static int -YYID (yyi) - int yyi; +YYID (i) + int i; #endif { - return yyi; + return i; } #endif @@ -545,9 +634,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; - YYLTYPE yyls_alloc; + yytype_int16 yyss; + YYSTYPE yyvs; + YYLTYPE yyls; }; /* The size of the maximum gap between one aligned stack and the next. */ @@ -582,12 +671,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ +# define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -1458,20 +1547,17 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, state) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } @@ -1507,11 +1593,11 @@ yy_reduce_print (yyvsp, yylsp, yyrule, state) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - YYFPRINTF (stderr, " $%d = ", yyi + 1); + fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) , state); - YYFPRINTF (stderr, "\n"); + fprintf (stderr, "\n"); } } @@ -1795,8 +1881,10 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp, state) break; } } + /* Prevent warnings from -Wmissing-prototypes. */ + #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -1815,9 +1903,10 @@ int yyparse (); -/*-------------------------. -| yyparse or yypush_parse. | -`-------------------------*/ + +/*----------. +| yyparse. | +`----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1841,97 +1930,88 @@ yyparse (state) #endif #endif { -/* The lookahead symbol. */ + /* The look-ahead symbol. */ int yychar; -/* The semantic value of the lookahead symbol. */ +/* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; -/* Location data for the lookahead symbol. */ +/* Number of syntax errors so far. */ +int yynerrs; +/* Location data for the look-ahead symbol. */ YYLTYPE yylloc; - /* Number of syntax errors so far. */ - int yynerrs; - - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif - /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. - `yyls': related to locations. + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls; - YYLTYPE *yylsp; + /* The location stack. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[2]; - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - YYSIZE_T yystacksize; + YYSIZE_T yystacksize = YYINITDEPTH; - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; - yyls = yylsa; - yystacksize = YYINITDEPTH; - YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ + yyssp = yyss; yyvsp = yyvs; yylsp = yyls; - #if YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; - yylloc.first_column = yylloc.last_column = 1; + yylloc.first_column = yylloc.last_column = 0; #endif goto yysetstate; @@ -1970,7 +2050,6 @@ YYLTYPE yylloc; &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); - yyls = yyls1; yyss = yyss1; yyvs = yyvs1; @@ -1992,9 +2071,9 @@ YYLTYPE yylloc; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + YYSTACK_RELOCATE (yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -2015,9 +2094,6 @@ YYLTYPE yylloc; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - if (yystate == YYFINAL) - YYACCEPT; - goto yybackup; /*-----------. @@ -2026,16 +2102,16 @@ YYLTYPE yylloc; yybackup: /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ + look-ahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to lookahead token. */ + /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a lookahead token if don't already have one. */ + /* Not known => get a look-ahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -2067,16 +2143,20 @@ yybackup: goto yyreduce; } + if (yyn == YYFINAL) + YYACCEPT; + /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the lookahead token. */ + /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token. */ - yychar = YYEMPTY; + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -2117,8 +2197,6 @@ yyreduce: switch (yyn) { case 3: - -/* Line 1455 of yacc.c */ #line 272 "program_parse.y" { if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) { @@ -2130,8 +2208,6 @@ yyreduce: break; case 4: - -/* Line 1455 of yacc.c */ #line 280 "program_parse.y" { if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) { @@ -2145,8 +2221,6 @@ yyreduce: break; case 7: - -/* Line 1455 of yacc.c */ #line 296 "program_parse.y" { int valid = 0; @@ -2170,8 +2244,6 @@ yyreduce: break; case 10: - -/* Line 1455 of yacc.c */ #line 322 "program_parse.y" { if ((yyvsp[(1) - (2)].inst) != NULL) { @@ -2190,8 +2262,6 @@ yyreduce: break; case 12: - -/* Line 1455 of yacc.c */ #line 340 "program_parse.y" { (yyval.inst) = (yyvsp[(1) - (1)].inst); @@ -2200,8 +2270,6 @@ yyreduce: break; case 13: - -/* Line 1455 of yacc.c */ #line 345 "program_parse.y" { (yyval.inst) = (yyvsp[(1) - (1)].inst); @@ -2210,8 +2278,6 @@ yyreduce: break; case 24: - -/* Line 1455 of yacc.c */ #line 366 "program_parse.y" { (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL); @@ -2219,8 +2285,6 @@ yyreduce: break; case 25: - -/* Line 1455 of yacc.c */ #line 372 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL); @@ -2228,8 +2292,6 @@ yyreduce: break; case 26: - -/* Line 1455 of yacc.c */ #line 378 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (4)].temp_inst), & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL); @@ -2237,8 +2299,6 @@ yyreduce: break; case 27: - -/* Line 1455 of yacc.c */ #line 384 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL); @@ -2246,8 +2306,6 @@ yyreduce: break; case 28: - -/* Line 1455 of yacc.c */ #line 391 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (6)].temp_inst), & (yyvsp[(2) - (6)].dst_reg), & (yyvsp[(4) - (6)].src_reg), & (yyvsp[(6) - (6)].src_reg), NULL); @@ -2255,8 +2313,6 @@ yyreduce: break; case 29: - -/* Line 1455 of yacc.c */ #line 398 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), & (yyvsp[(6) - (8)].src_reg), & (yyvsp[(8) - (8)].src_reg)); @@ -2264,8 +2320,6 @@ yyreduce: break; case 30: - -/* Line 1455 of yacc.c */ #line 404 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (8)].temp_inst), & (yyvsp[(2) - (8)].dst_reg), & (yyvsp[(4) - (8)].src_reg), NULL, NULL); @@ -2311,8 +2365,6 @@ yyreduce: break; case 31: - -/* Line 1455 of yacc.c */ #line 448 "program_parse.y" { (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL); @@ -2321,8 +2373,6 @@ yyreduce: break; case 32: - -/* Line 1455 of yacc.c */ #line 453 "program_parse.y" { (yyval.inst) = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL); @@ -2334,8 +2384,6 @@ yyreduce: break; case 33: - -/* Line 1455 of yacc.c */ #line 463 "program_parse.y" { (yyval.inst) = asm_instruction_copy_ctor(& (yyvsp[(1) - (12)].temp_inst), & (yyvsp[(2) - (12)].dst_reg), & (yyvsp[(4) - (12)].src_reg), & (yyvsp[(6) - (12)].src_reg), & (yyvsp[(8) - (12)].src_reg)); @@ -2381,8 +2429,6 @@ yyreduce: break; case 34: - -/* Line 1455 of yacc.c */ #line 507 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); @@ -2390,92 +2436,66 @@ yyreduce: break; case 35: - -/* Line 1455 of yacc.c */ #line 512 "program_parse.y" { (yyval.integer) = TEXTURE_1D_INDEX; ;} break; case 36: - -/* Line 1455 of yacc.c */ #line 513 "program_parse.y" { (yyval.integer) = TEXTURE_2D_INDEX; ;} break; case 37: - -/* Line 1455 of yacc.c */ #line 514 "program_parse.y" { (yyval.integer) = TEXTURE_3D_INDEX; ;} break; case 38: - -/* Line 1455 of yacc.c */ #line 515 "program_parse.y" { (yyval.integer) = TEXTURE_CUBE_INDEX; ;} break; case 39: - -/* Line 1455 of yacc.c */ #line 516 "program_parse.y" { (yyval.integer) = TEXTURE_RECT_INDEX; ;} break; case 40: - -/* Line 1455 of yacc.c */ #line 517 "program_parse.y" { (yyval.integer) = -TEXTURE_1D_INDEX; ;} break; case 41: - -/* Line 1455 of yacc.c */ #line 518 "program_parse.y" { (yyval.integer) = -TEXTURE_2D_INDEX; ;} break; case 42: - -/* Line 1455 of yacc.c */ #line 519 "program_parse.y" { (yyval.integer) = -TEXTURE_RECT_INDEX; ;} break; case 43: - -/* Line 1455 of yacc.c */ #line 520 "program_parse.y" { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;} break; case 44: - -/* Line 1455 of yacc.c */ #line 521 "program_parse.y" { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;} break; case 45: - -/* Line 1455 of yacc.c */ #line 522 "program_parse.y" { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;} break; case 46: - -/* Line 1455 of yacc.c */ #line 523 "program_parse.y" { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;} break; case 47: - -/* Line 1455 of yacc.c */ #line 527 "program_parse.y" { /* FIXME: Is this correct? Should the extenedSwizzle be applied @@ -2489,8 +2509,6 @@ yyreduce: break; case 48: - -/* Line 1455 of yacc.c */ #line 539 "program_parse.y" { (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg); @@ -2502,8 +2520,6 @@ yyreduce: break; case 49: - -/* Line 1455 of yacc.c */ #line 547 "program_parse.y" { (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg); @@ -2522,8 +2538,6 @@ yyreduce: break; case 50: - -/* Line 1455 of yacc.c */ #line 564 "program_parse.y" { (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg); @@ -2534,8 +2548,6 @@ yyreduce: break; case 51: - -/* Line 1455 of yacc.c */ #line 571 "program_parse.y" { struct asm_symbol temp_sym; @@ -2556,8 +2568,6 @@ yyreduce: break; case 52: - -/* Line 1455 of yacc.c */ #line 590 "program_parse.y" { (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg); @@ -2572,8 +2582,6 @@ yyreduce: break; case 53: - -/* Line 1455 of yacc.c */ #line 601 "program_parse.y" { (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg); @@ -2594,8 +2602,6 @@ yyreduce: break; case 54: - -/* Line 1455 of yacc.c */ #line 621 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(1) - (3)].dst_reg); @@ -2622,8 +2628,6 @@ yyreduce: break; case 55: - -/* Line 1455 of yacc.c */ #line 646 "program_parse.y" { init_dst_reg(& (yyval.dst_reg)); @@ -2634,8 +2638,6 @@ yyreduce: break; case 56: - -/* Line 1455 of yacc.c */ #line 655 "program_parse.y" { const unsigned xyzw_valid = @@ -2670,8 +2672,6 @@ yyreduce: break; case 57: - -/* Line 1455 of yacc.c */ #line 688 "program_parse.y" { (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle); @@ -2680,8 +2680,6 @@ yyreduce: break; case 58: - -/* Line 1455 of yacc.c */ #line 695 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) { @@ -2700,8 +2698,6 @@ yyreduce: break; case 59: - -/* Line 1455 of yacc.c */ #line 710 "program_parse.y" { if (strlen((yyvsp[(1) - (1)].string)) > 1) { @@ -2753,8 +2749,6 @@ yyreduce: break; case 60: - -/* Line 1455 of yacc.c */ #line 760 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) @@ -2800,8 +2794,6 @@ yyreduce: break; case 61: - -/* Line 1455 of yacc.c */ #line 802 "program_parse.y" { init_src_reg(& (yyval.src_reg)); @@ -2816,8 +2808,6 @@ yyreduce: break; case 62: - -/* Line 1455 of yacc.c */ #line 813 "program_parse.y" { if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr @@ -2842,8 +2832,6 @@ yyreduce: break; case 63: - -/* Line 1455 of yacc.c */ #line 834 "program_parse.y" { init_src_reg(& (yyval.src_reg)); @@ -2855,8 +2843,6 @@ yyreduce: break; case 64: - -/* Line 1455 of yacc.c */ #line 844 "program_parse.y" { init_dst_reg(& (yyval.dst_reg)); @@ -2866,8 +2852,6 @@ yyreduce: break; case 65: - -/* Line 1455 of yacc.c */ #line 850 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) @@ -2900,8 +2884,6 @@ yyreduce: break; case 66: - -/* Line 1455 of yacc.c */ #line 881 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) @@ -2920,8 +2902,6 @@ yyreduce: break; case 69: - -/* Line 1455 of yacc.c */ #line 900 "program_parse.y" { init_src_reg(& (yyval.src_reg)); @@ -2930,8 +2910,6 @@ yyreduce: break; case 70: - -/* Line 1455 of yacc.c */ #line 907 "program_parse.y" { /* FINISHME: Add support for multiple address registers. @@ -2945,29 +2923,21 @@ yyreduce: break; case 71: - -/* Line 1455 of yacc.c */ #line 918 "program_parse.y" { (yyval.integer) = 0; ;} break; case 72: - -/* Line 1455 of yacc.c */ #line 919 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} break; case 73: - -/* Line 1455 of yacc.c */ #line 920 "program_parse.y" { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;} break; case 74: - -/* Line 1455 of yacc.c */ #line 924 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) { @@ -2983,8 +2953,6 @@ yyreduce: break; case 75: - -/* Line 1455 of yacc.c */ #line 938 "program_parse.y" { if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) { @@ -3000,8 +2968,6 @@ yyreduce: break; case 76: - -/* Line 1455 of yacc.c */ #line 952 "program_parse.y" { struct asm_symbol *const s = (struct asm_symbol *) @@ -3021,8 +2987,6 @@ yyreduce: break; case 77: - -/* Line 1455 of yacc.c */ #line 970 "program_parse.y" { if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) { @@ -3035,8 +2999,6 @@ yyreduce: break; case 78: - -/* Line 1455 of yacc.c */ #line 981 "program_parse.y" { if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) { @@ -3050,22 +3012,16 @@ yyreduce: break; case 83: - -/* Line 1455 of yacc.c */ #line 997 "program_parse.y" { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;} break; case 88: - -/* Line 1455 of yacc.c */ #line 1001 "program_parse.y" { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;} break; case 89: - -/* Line 1455 of yacc.c */ #line 1005 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg); @@ -3073,8 +3029,6 @@ yyreduce: break; case 90: - -/* Line 1455 of yacc.c */ #line 1009 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg); @@ -3082,8 +3036,6 @@ yyreduce: break; case 91: - -/* Line 1455 of yacc.c */ #line 1013 "program_parse.y" { (yyval.dst_reg).CondMask = COND_TR; @@ -3093,8 +3045,6 @@ yyreduce: break; case 92: - -/* Line 1455 of yacc.c */ #line 1021 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg); @@ -3103,8 +3053,6 @@ yyreduce: break; case 93: - -/* Line 1455 of yacc.c */ #line 1028 "program_parse.y" { (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg); @@ -3113,8 +3061,6 @@ yyreduce: break; case 94: - -/* Line 1455 of yacc.c */ #line 1035 "program_parse.y" { const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string)); @@ -3139,8 +3085,6 @@ yyreduce: break; case 95: - -/* Line 1455 of yacc.c */ #line 1058 "program_parse.y" { const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string)); @@ -3165,8 +3109,6 @@ yyreduce: break; case 102: - -/* Line 1455 of yacc.c */ #line 1089 "program_parse.y" { struct asm_symbol *const s = @@ -3186,8 +3128,6 @@ yyreduce: break; case 103: - -/* Line 1455 of yacc.c */ #line 1107 "program_parse.y" { (yyval.attrib) = (yyvsp[(2) - (2)].attrib); @@ -3195,8 +3135,6 @@ yyreduce: break; case 104: - -/* Line 1455 of yacc.c */ #line 1111 "program_parse.y" { (yyval.attrib) = (yyvsp[(2) - (2)].attrib); @@ -3204,8 +3142,6 @@ yyreduce: break; case 105: - -/* Line 1455 of yacc.c */ #line 1117 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_POS; @@ -3213,8 +3149,6 @@ yyreduce: break; case 106: - -/* Line 1455 of yacc.c */ #line 1121 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_WEIGHT; @@ -3222,8 +3156,6 @@ yyreduce: break; case 107: - -/* Line 1455 of yacc.c */ #line 1125 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_NORMAL; @@ -3231,8 +3163,6 @@ yyreduce: break; case 108: - -/* Line 1455 of yacc.c */ #line 1129 "program_parse.y" { if (!state->ctx->Extensions.EXT_secondary_color) { @@ -3245,8 +3175,6 @@ yyreduce: break; case 109: - -/* Line 1455 of yacc.c */ #line 1138 "program_parse.y" { if (!state->ctx->Extensions.EXT_fog_coord) { @@ -3259,8 +3187,6 @@ yyreduce: break; case 110: - -/* Line 1455 of yacc.c */ #line 1147 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer); @@ -3268,8 +3194,6 @@ yyreduce: break; case 111: - -/* Line 1455 of yacc.c */ #line 1151 "program_parse.y" { yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported"); @@ -3278,8 +3202,6 @@ yyreduce: break; case 112: - -/* Line 1455 of yacc.c */ #line 1156 "program_parse.y" { (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer); @@ -3287,8 +3209,6 @@ yyreduce: break; case 113: - -/* Line 1455 of yacc.c */ #line 1162 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) { @@ -3301,8 +3221,6 @@ yyreduce: break; case 117: - -/* Line 1455 of yacc.c */ #line 1176 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_WPOS; @@ -3310,8 +3228,6 @@ yyreduce: break; case 118: - -/* Line 1455 of yacc.c */ #line 1180 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer); @@ -3319,8 +3235,6 @@ yyreduce: break; case 119: - -/* Line 1455 of yacc.c */ #line 1184 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_FOGC; @@ -3328,8 +3242,6 @@ yyreduce: break; case 120: - -/* Line 1455 of yacc.c */ #line 1188 "program_parse.y" { (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer); @@ -3337,8 +3249,6 @@ yyreduce: break; case 123: - -/* Line 1455 of yacc.c */ #line 1196 "program_parse.y" { struct asm_symbol *const s = @@ -3356,8 +3266,6 @@ yyreduce: break; case 124: - -/* Line 1455 of yacc.c */ #line 1212 "program_parse.y" { if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) { @@ -3381,8 +3289,6 @@ yyreduce: break; case 125: - -/* Line 1455 of yacc.c */ #line 1234 "program_parse.y" { (yyval.integer) = 0; @@ -3390,11 +3296,9 @@ yyreduce: break; case 126: - -/* Line 1455 of yacc.c */ #line 1238 "program_parse.y" { - if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxParameters)) { + if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) { yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size"); YYERROR; } else { @@ -3404,8 +3308,6 @@ yyreduce: break; case 127: - -/* Line 1455 of yacc.c */ #line 1249 "program_parse.y" { (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym); @@ -3413,8 +3315,6 @@ yyreduce: break; case 128: - -/* Line 1455 of yacc.c */ #line 1255 "program_parse.y" { (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym); @@ -3422,8 +3322,6 @@ yyreduce: break; case 130: - -/* Line 1455 of yacc.c */ #line 1262 "program_parse.y" { (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length; @@ -3432,8 +3330,6 @@ yyreduce: break; case 131: - -/* Line 1455 of yacc.c */ #line 1269 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3443,8 +3339,6 @@ yyreduce: break; case 132: - -/* Line 1455 of yacc.c */ #line 1275 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3454,8 +3348,6 @@ yyreduce: break; case 133: - -/* Line 1455 of yacc.c */ #line 1281 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3465,8 +3357,6 @@ yyreduce: break; case 134: - -/* Line 1455 of yacc.c */ #line 1289 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3476,8 +3366,6 @@ yyreduce: break; case 135: - -/* Line 1455 of yacc.c */ #line 1295 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3487,8 +3375,6 @@ yyreduce: break; case 136: - -/* Line 1455 of yacc.c */ #line 1301 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3498,8 +3384,6 @@ yyreduce: break; case 137: - -/* Line 1455 of yacc.c */ #line 1309 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3509,8 +3393,6 @@ yyreduce: break; case 138: - -/* Line 1455 of yacc.c */ #line 1315 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3520,8 +3402,6 @@ yyreduce: break; case 139: - -/* Line 1455 of yacc.c */ #line 1321 "program_parse.y" { memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym))); @@ -3531,99 +3411,71 @@ yyreduce: break; case 140: - -/* Line 1455 of yacc.c */ #line 1328 "program_parse.y" { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;} break; case 141: - -/* Line 1455 of yacc.c */ #line 1329 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 142: - -/* Line 1455 of yacc.c */ #line 1332 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 143: - -/* Line 1455 of yacc.c */ #line 1333 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 144: - -/* Line 1455 of yacc.c */ #line 1334 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 145: - -/* Line 1455 of yacc.c */ #line 1335 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 146: - -/* Line 1455 of yacc.c */ #line 1336 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 147: - -/* Line 1455 of yacc.c */ #line 1337 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 148: - -/* Line 1455 of yacc.c */ #line 1338 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 149: - -/* Line 1455 of yacc.c */ #line 1339 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 150: - -/* Line 1455 of yacc.c */ #line 1340 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 151: - -/* Line 1455 of yacc.c */ #line 1341 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 152: - -/* Line 1455 of yacc.c */ #line 1342 "program_parse.y" { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;} break; case 153: - -/* Line 1455 of yacc.c */ #line 1346 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3634,8 +3486,6 @@ yyreduce: break; case 154: - -/* Line 1455 of yacc.c */ #line 1355 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); @@ -3643,8 +3493,6 @@ yyreduce: break; case 155: - -/* Line 1455 of yacc.c */ #line 1359 "program_parse.y" { (yyval.integer) = STATE_EMISSION; @@ -3652,8 +3500,6 @@ yyreduce: break; case 156: - -/* Line 1455 of yacc.c */ #line 1363 "program_parse.y" { (yyval.integer) = STATE_SHININESS; @@ -3661,8 +3507,6 @@ yyreduce: break; case 157: - -/* Line 1455 of yacc.c */ #line 1369 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3673,8 +3517,6 @@ yyreduce: break; case 158: - -/* Line 1455 of yacc.c */ #line 1378 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); @@ -3682,8 +3524,6 @@ yyreduce: break; case 159: - -/* Line 1455 of yacc.c */ #line 1382 "program_parse.y" { (yyval.integer) = STATE_POSITION; @@ -3691,8 +3531,6 @@ yyreduce: break; case 160: - -/* Line 1455 of yacc.c */ #line 1386 "program_parse.y" { if (!state->ctx->Extensions.EXT_point_parameters) { @@ -3705,8 +3543,6 @@ yyreduce: break; case 161: - -/* Line 1455 of yacc.c */ #line 1395 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); @@ -3714,8 +3550,6 @@ yyreduce: break; case 162: - -/* Line 1455 of yacc.c */ #line 1399 "program_parse.y" { (yyval.integer) = STATE_HALF_VECTOR; @@ -3723,8 +3557,6 @@ yyreduce: break; case 163: - -/* Line 1455 of yacc.c */ #line 1405 "program_parse.y" { (yyval.integer) = STATE_SPOT_DIRECTION; @@ -3732,8 +3564,6 @@ yyreduce: break; case 164: - -/* Line 1455 of yacc.c */ #line 1411 "program_parse.y" { (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0]; @@ -3742,8 +3572,6 @@ yyreduce: break; case 165: - -/* Line 1455 of yacc.c */ #line 1418 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3752,8 +3580,6 @@ yyreduce: break; case 166: - -/* Line 1455 of yacc.c */ #line 1423 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3763,8 +3589,6 @@ yyreduce: break; case 167: - -/* Line 1455 of yacc.c */ #line 1431 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3776,8 +3600,6 @@ yyreduce: break; case 169: - -/* Line 1455 of yacc.c */ #line 1443 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3787,8 +3609,6 @@ yyreduce: break; case 170: - -/* Line 1455 of yacc.c */ #line 1451 "program_parse.y" { (yyval.integer) = STATE_TEXENV_COLOR; @@ -3796,8 +3616,6 @@ yyreduce: break; case 171: - -/* Line 1455 of yacc.c */ #line 1457 "program_parse.y" { (yyval.integer) = STATE_AMBIENT; @@ -3805,8 +3623,6 @@ yyreduce: break; case 172: - -/* Line 1455 of yacc.c */ #line 1461 "program_parse.y" { (yyval.integer) = STATE_DIFFUSE; @@ -3814,8 +3630,6 @@ yyreduce: break; case 173: - -/* Line 1455 of yacc.c */ #line 1465 "program_parse.y" { (yyval.integer) = STATE_SPECULAR; @@ -3823,8 +3637,6 @@ yyreduce: break; case 174: - -/* Line 1455 of yacc.c */ #line 1471 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) { @@ -3837,8 +3649,6 @@ yyreduce: break; case 175: - -/* Line 1455 of yacc.c */ #line 1482 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3849,8 +3659,6 @@ yyreduce: break; case 176: - -/* Line 1455 of yacc.c */ #line 1491 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_S; @@ -3858,8 +3666,6 @@ yyreduce: break; case 177: - -/* Line 1455 of yacc.c */ #line 1495 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_OBJECT_S; @@ -3867,8 +3673,6 @@ yyreduce: break; case 178: - -/* Line 1455 of yacc.c */ #line 1500 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S; @@ -3876,8 +3680,6 @@ yyreduce: break; case 179: - -/* Line 1455 of yacc.c */ #line 1504 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S; @@ -3885,8 +3687,6 @@ yyreduce: break; case 180: - -/* Line 1455 of yacc.c */ #line 1508 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S; @@ -3894,8 +3694,6 @@ yyreduce: break; case 181: - -/* Line 1455 of yacc.c */ #line 1512 "program_parse.y" { (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S; @@ -3903,8 +3701,6 @@ yyreduce: break; case 182: - -/* Line 1455 of yacc.c */ #line 1518 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3913,8 +3709,6 @@ yyreduce: break; case 183: - -/* Line 1455 of yacc.c */ #line 1525 "program_parse.y" { (yyval.integer) = STATE_FOG_COLOR; @@ -3922,8 +3716,6 @@ yyreduce: break; case 184: - -/* Line 1455 of yacc.c */ #line 1529 "program_parse.y" { (yyval.integer) = STATE_FOG_PARAMS; @@ -3931,8 +3723,6 @@ yyreduce: break; case 185: - -/* Line 1455 of yacc.c */ #line 1535 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3942,8 +3732,6 @@ yyreduce: break; case 186: - -/* Line 1455 of yacc.c */ #line 1543 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) { @@ -3956,8 +3744,6 @@ yyreduce: break; case 187: - -/* Line 1455 of yacc.c */ #line 1554 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -3966,8 +3752,6 @@ yyreduce: break; case 188: - -/* Line 1455 of yacc.c */ #line 1561 "program_parse.y" { (yyval.integer) = STATE_POINT_SIZE; @@ -3975,8 +3759,6 @@ yyreduce: break; case 189: - -/* Line 1455 of yacc.c */ #line 1565 "program_parse.y" { (yyval.integer) = STATE_POINT_ATTENUATION; @@ -3984,8 +3766,6 @@ yyreduce: break; case 190: - -/* Line 1455 of yacc.c */ #line 1571 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0]; @@ -3997,8 +3777,6 @@ yyreduce: break; case 191: - -/* Line 1455 of yacc.c */ #line 1581 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0]; @@ -4010,8 +3788,6 @@ yyreduce: break; case 192: - -/* Line 1455 of yacc.c */ #line 1591 "program_parse.y" { (yyval.state)[2] = 0; @@ -4020,8 +3796,6 @@ yyreduce: break; case 193: - -/* Line 1455 of yacc.c */ #line 1596 "program_parse.y" { /* It seems logical that the matrix row range specifier would have @@ -4041,8 +3815,6 @@ yyreduce: break; case 194: - -/* Line 1455 of yacc.c */ #line 1614 "program_parse.y" { (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0]; @@ -4052,8 +3824,6 @@ yyreduce: break; case 195: - -/* Line 1455 of yacc.c */ #line 1622 "program_parse.y" { (yyval.integer) = 0; @@ -4061,8 +3831,6 @@ yyreduce: break; case 196: - -/* Line 1455 of yacc.c */ #line 1626 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); @@ -4070,8 +3838,6 @@ yyreduce: break; case 197: - -/* Line 1455 of yacc.c */ #line 1632 "program_parse.y" { (yyval.integer) = STATE_MATRIX_INVERSE; @@ -4079,8 +3845,6 @@ yyreduce: break; case 198: - -/* Line 1455 of yacc.c */ #line 1636 "program_parse.y" { (yyval.integer) = STATE_MATRIX_TRANSPOSE; @@ -4088,8 +3852,6 @@ yyreduce: break; case 199: - -/* Line 1455 of yacc.c */ #line 1640 "program_parse.y" { (yyval.integer) = STATE_MATRIX_INVTRANS; @@ -4097,8 +3859,6 @@ yyreduce: break; case 200: - -/* Line 1455 of yacc.c */ #line 1646 "program_parse.y" { if ((yyvsp[(1) - (1)].integer) > 3) { @@ -4111,8 +3871,6 @@ yyreduce: break; case 201: - -/* Line 1455 of yacc.c */ #line 1657 "program_parse.y" { (yyval.state)[0] = STATE_MODELVIEW_MATRIX; @@ -4121,8 +3879,6 @@ yyreduce: break; case 202: - -/* Line 1455 of yacc.c */ #line 1662 "program_parse.y" { (yyval.state)[0] = STATE_PROJECTION_MATRIX; @@ -4131,8 +3887,6 @@ yyreduce: break; case 203: - -/* Line 1455 of yacc.c */ #line 1667 "program_parse.y" { (yyval.state)[0] = STATE_MVP_MATRIX; @@ -4141,8 +3895,6 @@ yyreduce: break; case 204: - -/* Line 1455 of yacc.c */ #line 1672 "program_parse.y" { (yyval.state)[0] = STATE_TEXTURE_MATRIX; @@ -4151,8 +3903,6 @@ yyreduce: break; case 205: - -/* Line 1455 of yacc.c */ #line 1677 "program_parse.y" { yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported"); @@ -4161,8 +3911,6 @@ yyreduce: break; case 206: - -/* Line 1455 of yacc.c */ #line 1682 "program_parse.y" { (yyval.state)[0] = STATE_PROGRAM_MATRIX; @@ -4171,8 +3919,6 @@ yyreduce: break; case 207: - -/* Line 1455 of yacc.c */ #line 1689 "program_parse.y" { (yyval.integer) = 0; @@ -4180,8 +3926,6 @@ yyreduce: break; case 208: - -/* Line 1455 of yacc.c */ #line 1693 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); @@ -4189,8 +3933,6 @@ yyreduce: break; case 209: - -/* Line 1455 of yacc.c */ #line 1698 "program_parse.y" { /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix @@ -4206,8 +3948,6 @@ yyreduce: break; case 210: - -/* Line 1455 of yacc.c */ #line 1711 "program_parse.y" { /* Since GL_ARB_matrix_palette isn't supported, just let any value @@ -4218,8 +3958,6 @@ yyreduce: break; case 211: - -/* Line 1455 of yacc.c */ #line 1719 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) { @@ -4232,8 +3970,6 @@ yyreduce: break; case 212: - -/* Line 1455 of yacc.c */ #line 1730 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -4242,8 +3978,6 @@ yyreduce: break; case 217: - -/* Line 1455 of yacc.c */ #line 1742 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -4255,8 +3989,6 @@ yyreduce: break; case 218: - -/* Line 1455 of yacc.c */ #line 1752 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (1)].integer); @@ -4265,8 +3997,6 @@ yyreduce: break; case 219: - -/* Line 1455 of yacc.c */ #line 1757 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (3)].integer); @@ -4275,8 +4005,6 @@ yyreduce: break; case 220: - -/* Line 1455 of yacc.c */ #line 1764 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -4288,8 +4016,6 @@ yyreduce: break; case 221: - -/* Line 1455 of yacc.c */ #line 1774 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -4301,8 +4027,6 @@ yyreduce: break; case 222: - -/* Line 1455 of yacc.c */ #line 1783 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (1)].integer); @@ -4311,8 +4035,6 @@ yyreduce: break; case 223: - -/* Line 1455 of yacc.c */ #line 1788 "program_parse.y" { (yyval.state)[0] = (yyvsp[(1) - (3)].integer); @@ -4321,8 +4043,6 @@ yyreduce: break; case 224: - -/* Line 1455 of yacc.c */ #line 1795 "program_parse.y" { memset((yyval.state), 0, sizeof((yyval.state))); @@ -4334,8 +4054,6 @@ yyreduce: break; case 225: - -/* Line 1455 of yacc.c */ #line 1805 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) { @@ -4347,8 +4065,6 @@ yyreduce: break; case 226: - -/* Line 1455 of yacc.c */ #line 1815 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) { @@ -4360,8 +4076,6 @@ yyreduce: break; case 231: - -/* Line 1455 of yacc.c */ #line 1830 "program_parse.y" { (yyval.vector).count = 4; @@ -4373,8 +4087,6 @@ yyreduce: break; case 232: - -/* Line 1455 of yacc.c */ #line 1840 "program_parse.y" { (yyval.vector).count = 1; @@ -4386,8 +4098,6 @@ yyreduce: break; case 233: - -/* Line 1455 of yacc.c */ #line 1848 "program_parse.y" { (yyval.vector).count = 1; @@ -4399,8 +4109,6 @@ yyreduce: break; case 234: - -/* Line 1455 of yacc.c */ #line 1858 "program_parse.y" { (yyval.vector).count = 4; @@ -4412,8 +4120,6 @@ yyreduce: break; case 235: - -/* Line 1455 of yacc.c */ #line 1866 "program_parse.y" { (yyval.vector).count = 4; @@ -4425,8 +4131,6 @@ yyreduce: break; case 236: - -/* Line 1455 of yacc.c */ #line 1875 "program_parse.y" { (yyval.vector).count = 4; @@ -4438,8 +4142,6 @@ yyreduce: break; case 237: - -/* Line 1455 of yacc.c */ #line 1884 "program_parse.y" { (yyval.vector).count = 4; @@ -4451,8 +4153,6 @@ yyreduce: break; case 238: - -/* Line 1455 of yacc.c */ #line 1894 "program_parse.y" { (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real); @@ -4460,8 +4160,6 @@ yyreduce: break; case 239: - -/* Line 1455 of yacc.c */ #line 1898 "program_parse.y" { (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer)); @@ -4469,36 +4167,26 @@ yyreduce: break; case 240: - -/* Line 1455 of yacc.c */ #line 1903 "program_parse.y" { (yyval.negate) = FALSE; ;} break; case 241: - -/* Line 1455 of yacc.c */ #line 1904 "program_parse.y" { (yyval.negate) = TRUE; ;} break; case 242: - -/* Line 1455 of yacc.c */ #line 1905 "program_parse.y" { (yyval.negate) = FALSE; ;} break; case 243: - -/* Line 1455 of yacc.c */ #line 1908 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;} break; case 245: - -/* Line 1455 of yacc.c */ #line 1912 "program_parse.y" { /* NV_fragment_program_option defines the size qualifiers in a @@ -4536,23 +4224,17 @@ yyreduce: break; case 246: - -/* Line 1455 of yacc.c */ #line 1946 "program_parse.y" { ;} break; case 247: - -/* Line 1455 of yacc.c */ #line 1950 "program_parse.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} break; case 249: - -/* Line 1455 of yacc.c */ #line 1954 "program_parse.y" { if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) { @@ -4562,8 +4244,6 @@ yyreduce: break; case 250: - -/* Line 1455 of yacc.c */ #line 1960 "program_parse.y" { if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) { @@ -4573,8 +4253,6 @@ yyreduce: break; case 251: - -/* Line 1455 of yacc.c */ #line 1968 "program_parse.y" { struct asm_symbol *const s = @@ -4589,8 +4267,6 @@ yyreduce: break; case 252: - -/* Line 1455 of yacc.c */ #line 1981 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4603,8 +4279,6 @@ yyreduce: break; case 253: - -/* Line 1455 of yacc.c */ #line 1990 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4617,8 +4291,6 @@ yyreduce: break; case 254: - -/* Line 1455 of yacc.c */ #line 1999 "program_parse.y" { (yyval.result) = (yyvsp[(2) - (2)].result); @@ -4626,8 +4298,6 @@ yyreduce: break; case 255: - -/* Line 1455 of yacc.c */ #line 2003 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4640,8 +4310,6 @@ yyreduce: break; case 256: - -/* Line 1455 of yacc.c */ #line 2012 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4654,8 +4322,6 @@ yyreduce: break; case 257: - -/* Line 1455 of yacc.c */ #line 2021 "program_parse.y" { if (state->mode == ARB_fragment) { @@ -4668,8 +4334,6 @@ yyreduce: break; case 258: - -/* Line 1455 of yacc.c */ #line 2032 "program_parse.y" { (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer); @@ -4677,8 +4341,6 @@ yyreduce: break; case 259: - -/* Line 1455 of yacc.c */ #line 2038 "program_parse.y" { (yyval.integer) = (state->mode == ARB_vertex) @@ -4688,8 +4350,6 @@ yyreduce: break; case 260: - -/* Line 1455 of yacc.c */ #line 2044 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4702,8 +4362,6 @@ yyreduce: break; case 261: - -/* Line 1455 of yacc.c */ #line 2053 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4716,8 +4374,6 @@ yyreduce: break; case 262: - -/* Line 1455 of yacc.c */ #line 2064 "program_parse.y" { (yyval.integer) = 0; @@ -4725,8 +4381,6 @@ yyreduce: break; case 263: - -/* Line 1455 of yacc.c */ #line 2068 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4739,8 +4393,6 @@ yyreduce: break; case 264: - -/* Line 1455 of yacc.c */ #line 2077 "program_parse.y" { if (state->mode == ARB_vertex) { @@ -4753,92 +4405,66 @@ yyreduce: break; case 265: - -/* Line 1455 of yacc.c */ #line 2087 "program_parse.y" { (yyval.integer) = 0; ;} break; case 266: - -/* Line 1455 of yacc.c */ #line 2088 "program_parse.y" { (yyval.integer) = 0; ;} break; case 267: - -/* Line 1455 of yacc.c */ #line 2089 "program_parse.y" { (yyval.integer) = 1; ;} break; case 268: - -/* Line 1455 of yacc.c */ #line 2092 "program_parse.y" { (yyval.integer) = 0; ;} break; case 269: - -/* Line 1455 of yacc.c */ #line 2093 "program_parse.y" { (yyval.integer) = 0; ;} break; case 270: - -/* Line 1455 of yacc.c */ #line 2094 "program_parse.y" { (yyval.integer) = 1; ;} break; case 271: - -/* Line 1455 of yacc.c */ #line 2097 "program_parse.y" { (yyval.integer) = 0; ;} break; case 272: - -/* Line 1455 of yacc.c */ #line 2098 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} break; case 273: - -/* Line 1455 of yacc.c */ #line 2101 "program_parse.y" { (yyval.integer) = 0; ;} break; case 274: - -/* Line 1455 of yacc.c */ #line 2102 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} break; case 275: - -/* Line 1455 of yacc.c */ #line 2105 "program_parse.y" { (yyval.integer) = 0; ;} break; case 276: - -/* Line 1455 of yacc.c */ #line 2106 "program_parse.y" { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;} break; case 277: - -/* Line 1455 of yacc.c */ #line 2110 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) { @@ -4851,8 +4477,6 @@ yyreduce: break; case 278: - -/* Line 1455 of yacc.c */ #line 2121 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) { @@ -4865,8 +4489,6 @@ yyreduce: break; case 279: - -/* Line 1455 of yacc.c */ #line 2132 "program_parse.y" { if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) { @@ -4879,8 +4501,6 @@ yyreduce: break; case 280: - -/* Line 1455 of yacc.c */ #line 2143 "program_parse.y" { struct asm_symbol *exist = (struct asm_symbol *) @@ -4897,15 +4517,14 @@ yyreduce: "undefined variable binding in ALIAS statement"); YYERROR; } else { - _mesa_symbol_table_add_symbol(state->st, 0, (yyvsp[(2) - (4)].string), target); + _mesa_symbol_table_add_symbol(state->st, 0, strdup((yyvsp[(2) - (4)].string)), target); } ;} break; - -/* Line 1455 of yacc.c */ -#line 4909 "program_parse.tab.c" +/* Line 1267 of yacc.c. */ +#line 4528 "program_parse.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4981,7 +4600,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse lookahead token after an + /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -4998,7 +4617,7 @@ yyerrlab: } } - /* Else will try to reuse lookahead token after shifting the error + /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; @@ -5056,11 +4675,14 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } + if (yyn == YYFINAL) + YYACCEPT; + *++yyvsp = yylval; yyerror_range[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of - the lookahead. YYLOC is available though. */ + the look-ahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); *++yylsp = yyloc; @@ -5085,7 +4707,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -5096,7 +4718,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEMPTY) + if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, state); /* Do not reclaim the symbols of the rule which action triggered @@ -5122,8 +4744,6 @@ yyreturn: } - -/* Line 1675 of yacc.c */ #line 2167 "program_parse.y" @@ -5270,10 +4890,14 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t, if (exist != NULL) { yyerror(locp, state, "redeclared identifier"); } else { - s = calloc(1, sizeof(struct asm_symbol)); - s->name = name; + const size_t name_len = strlen(name); + + s = calloc(1, sizeof(struct asm_symbol) + name_len + 1); + s->name = (char *)(s + 1); s->type = t; + memcpy((char *) s->name, name, name_len + 1); + switch (t) { case at_temp: if (state->prog->NumTemporaries >= state->limits->MaxTemps) { @@ -5521,6 +5145,11 @@ _mesa_parse_arb_program(GLcontext *ctx, GLenum target, const GLubyte *str, _mesa_memcpy (strz, str, len); strz[len] = '\0'; + if (state->prog->String != NULL) { + _mesa_free(state->prog->String); + state->prog->String = NULL; + } + state->prog->String = strz; state->st = _mesa_symbol_table_ctor(); @@ -5610,7 +5239,6 @@ error: for (sym = state->sym; sym != NULL; sym = temp) { temp = sym->next; - _mesa_free((void *) sym->name); _mesa_free(sym); } state->sym = NULL; @@ -5618,6 +5246,11 @@ error: _mesa_symbol_table_dtor(state->st); state->st = NULL; + if (state->string_dumpster != NULL) { + _mesa_free(state->string_dumpster); + state->dumpster_size = 0; + } + return result; } diff --git a/src/mesa/shader/program_parse.tab.h b/src/mesa/shader/program_parse.tab.h index 860b6f886e9..ae6dd8c34e2 100644 --- a/src/mesa/shader/program_parse.tab.h +++ b/src/mesa/shader/program_parse.tab.h @@ -1,23 +1,24 @@ - -/* A Bison parser, made by GNU Bison 2.4.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - + the Free Software Foundation; either version 2, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -28,11 +29,10 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ - /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -146,16 +146,120 @@ DOT = 362 }; #endif +/* Tokens. */ +#define ARBvp_10 258 +#define ARBfp_10 259 +#define ADDRESS 260 +#define ALIAS 261 +#define ATTRIB 262 +#define OPTION 263 +#define OUTPUT 264 +#define PARAM 265 +#define TEMP 266 +#define END 267 +#define BIN_OP 268 +#define BINSC_OP 269 +#define SAMPLE_OP 270 +#define SCALAR_OP 271 +#define TRI_OP 272 +#define VECTOR_OP 273 +#define ARL 274 +#define KIL 275 +#define SWZ 276 +#define TXD_OP 277 +#define INTEGER 278 +#define REAL 279 +#define AMBIENT 280 +#define ATTENUATION 281 +#define BACK 282 +#define CLIP 283 +#define COLOR 284 +#define DEPTH 285 +#define DIFFUSE 286 +#define DIRECTION 287 +#define EMISSION 288 +#define ENV 289 +#define EYE 290 +#define FOG 291 +#define FOGCOORD 292 +#define FRAGMENT 293 +#define FRONT 294 +#define HALF 295 +#define INVERSE 296 +#define INVTRANS 297 +#define LIGHT 298 +#define LIGHTMODEL 299 +#define LIGHTPROD 300 +#define LOCAL 301 +#define MATERIAL 302 +#define MAT_PROGRAM 303 +#define MATRIX 304 +#define MATRIXINDEX 305 +#define MODELVIEW 306 +#define MVP 307 +#define NORMAL 308 +#define OBJECT 309 +#define PALETTE 310 +#define PARAMS 311 +#define PLANE 312 +#define POINT_TOK 313 +#define POINTSIZE 314 +#define POSITION 315 +#define PRIMARY 316 +#define PROGRAM 317 +#define PROJECTION 318 +#define RANGE 319 +#define RESULT 320 +#define ROW 321 +#define SCENECOLOR 322 +#define SECONDARY 323 +#define SHININESS 324 +#define SIZE_TOK 325 +#define SPECULAR 326 +#define SPOT 327 +#define STATE 328 +#define TEXCOORD 329 +#define TEXENV 330 +#define TEXGEN 331 +#define TEXGEN_Q 332 +#define TEXGEN_R 333 +#define TEXGEN_S 334 +#define TEXGEN_T 335 +#define TEXTURE 336 +#define TRANSPOSE 337 +#define TEXTURE_UNIT 338 +#define TEX_1D 339 +#define TEX_2D 340 +#define TEX_3D 341 +#define TEX_CUBE 342 +#define TEX_RECT 343 +#define TEX_SHADOW1D 344 +#define TEX_SHADOW2D 345 +#define TEX_SHADOWRECT 346 +#define TEX_ARRAY1D 347 +#define TEX_ARRAY2D 348 +#define TEX_ARRAYSHADOW1D 349 +#define TEX_ARRAYSHADOW2D 350 +#define VERTEX 351 +#define VTXATTRIB 352 +#define WEIGHT 353 +#define IDENTIFIER 354 +#define USED_IDENTIFIER 355 +#define MASK4 356 +#define MASK3 357 +#define MASK2 358 +#define MASK1 359 +#define SWIZZLE 360 +#define DOT_DOT 361 +#define DOT 362 + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -{ - -/* Line 1676 of yacc.c */ #line 116 "program_parse.y" - +{ struct asm_instruction *inst; struct asm_symbol *sym; struct asm_symbol temp_sym; @@ -179,15 +283,13 @@ typedef union YYSTYPE unsigned xyzw_valid:1; unsigned negate:1; } ext_swizzle; - - - -/* Line 1676 of yacc.c */ -#line 187 "program_parse.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 +} +/* Line 1489 of yacc.c. */ +#line 289 "program_parse.tab.h" + YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif @@ -206,4 +308,3 @@ typedef struct YYLTYPE #endif - diff --git a/src/mesa/shader/program_parse.y b/src/mesa/shader/program_parse.y index 9703e8e670f..20bde83af72 100644 --- a/src/mesa/shader/program_parse.y +++ b/src/mesa/shader/program_parse.y @@ -1236,7 +1236,7 @@ optArraySize: } | INTEGER { - if (($1 < 1) || ((unsigned) $1 >= state->limits->MaxParameters)) { + if (($1 < 1) || ((unsigned) $1 > state->limits->MaxParameters)) { yyerror(& @1, state, "invalid parameter array size"); YYERROR; } else { @@ -2155,7 +2155,7 @@ ALIAS_statement: ALIAS IDENTIFIER '=' USED_IDENTIFIER "undefined variable binding in ALIAS statement"); YYERROR; } else { - _mesa_symbol_table_add_symbol(state->st, 0, $2, target); + _mesa_symbol_table_add_symbol(state->st, 0, strdup($2), target); } } ; @@ -2309,10 +2309,14 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t, if (exist != NULL) { yyerror(locp, state, "redeclared identifier"); } else { - s = calloc(1, sizeof(struct asm_symbol)); - s->name = name; + const size_t name_len = strlen(name); + + s = calloc(1, sizeof(struct asm_symbol) + name_len + 1); + s->name = (char *)(s + 1); s->type = t; + memcpy((char *) s->name, name, name_len + 1); + switch (t) { case at_temp: if (state->prog->NumTemporaries >= state->limits->MaxTemps) { @@ -2560,6 +2564,11 @@ _mesa_parse_arb_program(GLcontext *ctx, GLenum target, const GLubyte *str, _mesa_memcpy (strz, str, len); strz[len] = '\0'; + if (state->prog->String != NULL) { + _mesa_free(state->prog->String); + state->prog->String = NULL; + } + state->prog->String = strz; state->st = _mesa_symbol_table_ctor(); @@ -2649,7 +2658,6 @@ error: for (sym = state->sym; sym != NULL; sym = temp) { temp = sym->next; - _mesa_free((void *) sym->name); _mesa_free(sym); } state->sym = NULL; @@ -2657,5 +2665,10 @@ error: _mesa_symbol_table_dtor(state->st); state->st = NULL; + if (state->string_dumpster != NULL) { + _mesa_free(state->string_dumpster); + state->dumpster_size = 0; + } + return result; } diff --git a/src/mesa/shader/program_parser.h b/src/mesa/shader/program_parser.h index bce6041381f..25b413918aa 100644 --- a/src/mesa/shader/program_parser.h +++ b/src/mesa/shader/program_parser.h @@ -38,6 +38,13 @@ enum asm_type { at_output, }; +/** + * \note + * Objects of this type are allocated as the object plus the name of the + * symbol. That is, malloc(sizeof(struct asm_symbol) + strlen(name) + 1). + * Alternately, asm_symbol::name could be moved to the bottom of the structure + * and declared as 'char name[0];'. + */ struct asm_symbol { struct asm_symbol *next; /**< List linkage for freeing. */ const char *name; @@ -158,6 +165,15 @@ struct asm_parser_state { /** + * Buffer to hold strings transfered from the lexer to the parser + */ + /*@{*/ + char *string_dumpster; /**< String data transfered. */ + size_t dumpster_size; /**< Total size, in bytes, of the buffer. */ + /*@}*/ + + + /** * Selected limits copied from gl_constants * * These are limits from the GL context, but various bits in the program diff --git a/src/mesa/shader/programopt.c b/src/mesa/shader/programopt.c index f70c75cec8e..3b8529592dd 100644 --- a/src/mesa/shader/programopt.c +++ b/src/mesa/shader/programopt.c @@ -573,3 +573,94 @@ _mesa_remove_output_reads(struct gl_program *prog, gl_register_file type) } } } + + +/** + * Make the given fragment program into a "no-op" shader. + * Actually, just copy the incoming fragment color (or texcoord) + * to the output color. + * This is for debug/test purposes. + */ +void +_mesa_nop_fragment_program(GLcontext *ctx, struct gl_fragment_program *prog) +{ + struct prog_instruction *inst; + GLuint inputAttr; + + inst = _mesa_alloc_instructions(2); + if (!inst) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "_mesa_nop_fragment_program"); + return; + } + + _mesa_init_instructions(inst, 2); + + inst[0].Opcode = OPCODE_MOV; + inst[0].DstReg.File = PROGRAM_OUTPUT; + inst[0].DstReg.Index = FRAG_RESULT_COLOR; + inst[0].SrcReg[0].File = PROGRAM_INPUT; + if (prog->Base.InputsRead & FRAG_BIT_COL0) + inputAttr = FRAG_ATTRIB_COL0; + else + inputAttr = FRAG_ATTRIB_TEX0; + inst[0].SrcReg[0].Index = inputAttr; + + inst[1].Opcode = OPCODE_END; + + _mesa_free_instructions(prog->Base.Instructions, + prog->Base.NumInstructions); + + prog->Base.Instructions = inst; + prog->Base.NumInstructions = 2; + prog->Base.InputsRead = 1 << inputAttr; + prog->Base.OutputsWritten = 1 << FRAG_RESULT_COLOR; +} + + +/** + * \sa _mesa_nop_fragment_program + * Replace the given vertex program with a "no-op" program that just + * transforms vertex position and emits color. + */ +void +_mesa_nop_vertex_program(GLcontext *ctx, struct gl_vertex_program *prog) +{ + struct prog_instruction *inst; + GLuint inputAttr; + + /* + * Start with a simple vertex program that emits color. + */ + inst = _mesa_alloc_instructions(2); + if (!inst) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "_mesa_nop_vertex_program"); + return; + } + + _mesa_init_instructions(inst, 2); + + inst[0].Opcode = OPCODE_MOV; + inst[0].DstReg.File = PROGRAM_OUTPUT; + inst[0].DstReg.Index = VERT_RESULT_COL0; + inst[0].SrcReg[0].File = PROGRAM_INPUT; + if (prog->Base.InputsRead & VERT_BIT_COLOR0) + inputAttr = VERT_ATTRIB_COLOR0; + else + inputAttr = VERT_ATTRIB_TEX0; + inst[0].SrcReg[0].Index = inputAttr; + + inst[1].Opcode = OPCODE_END; + + _mesa_free_instructions(prog->Base.Instructions, + prog->Base.NumInstructions); + + prog->Base.Instructions = inst; + prog->Base.NumInstructions = 2; + prog->Base.InputsRead = 1 << inputAttr; + prog->Base.OutputsWritten = 1 << VERT_RESULT_COL0; + + /* + * Now insert code to do standard modelview/projection transformation. + */ + _mesa_insert_mvp_code(ctx, prog); +} diff --git a/src/mesa/shader/programopt.h b/src/mesa/shader/programopt.h index 96acaf9566c..21fac07849a 100644 --- a/src/mesa/shader/programopt.h +++ b/src/mesa/shader/programopt.h @@ -42,4 +42,11 @@ _mesa_count_texture_instructions(struct gl_program *prog); extern void _mesa_remove_output_reads(struct gl_program *prog, gl_register_file type); +extern void +_mesa_nop_fragment_program(GLcontext *ctx, struct gl_fragment_program *prog); + +extern void +_mesa_nop_vertex_program(GLcontext *ctx, struct gl_vertex_program *prog); + + #endif /* PROGRAMOPT_H */ diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 178b7d0dbaf..453cd3964af 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -380,12 +380,18 @@ get_shader_flags(void) flags |= GLSL_DUMP; if (_mesa_strstr(env, "log")) flags |= GLSL_LOG; + if (_mesa_strstr(env, "nopvert")) + flags |= GLSL_NOP_VERT; + if (_mesa_strstr(env, "nopfrag")) + flags |= GLSL_NOP_FRAG; if (_mesa_strstr(env, "nopt")) flags |= GLSL_NO_OPT; else if (_mesa_strstr(env, "opt")) flags |= GLSL_OPT; if (_mesa_strstr(env, "uniform")) flags |= GLSL_UNIFORMS; + if (_mesa_strstr(env, "useprog")) + flags |= GLSL_USE_PROG; } return flags; @@ -1493,6 +1499,41 @@ _mesa_link_program(GLcontext *ctx, GLuint program) /** + * Print basic shader info (for debug). + */ +static void +print_shader_info(const struct gl_shader_program *shProg) +{ + GLuint i; + + _mesa_printf("Mesa: glUseProgram(%u)\n", shProg->Name); + for (i = 0; i < shProg->NumShaders; i++) { + const char *s; + switch (shProg->Shaders[i]->Type) { + case GL_VERTEX_SHADER: + s = "vertex"; + break; + case GL_FRAGMENT_SHADER: + s = "fragment"; + break; + case GL_GEOMETRY_SHADER: + s = "geometry"; + break; + default: + s = ""; + } + _mesa_printf(" %s shader %u, checksum %u\n", s, + shProg->Shaders[i]->Name, + shProg->Shaders[i]->SourceChecksum); + } + if (shProg->VertexProgram) + _mesa_printf(" vert prog %u\n", shProg->VertexProgram->Base.Id); + if (shProg->FragmentProgram) + _mesa_printf(" frag prog %u\n", shProg->FragmentProgram->Base.Id); +} + + +/** * Called via ctx->Driver.UseProgram() */ void @@ -1506,8 +1547,6 @@ _mesa_use_program(GLcontext *ctx, GLuint program) return; } - FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS); - if (program) { shProg = _mesa_lookup_shader_program_err(ctx, program, "glUseProgram"); if (!shProg) { @@ -1520,26 +1559,18 @@ _mesa_use_program(GLcontext *ctx, GLuint program) } /* debug code */ - if (0) { - GLuint i; - _mesa_printf("Use Shader %u\n", shProg->Name); - for (i = 0; i < shProg->NumShaders; i++) { - _mesa_printf(" shader %u, type 0x%x, checksum %u\n", - shProg->Shaders[i]->Name, - shProg->Shaders[i]->Type, - shProg->Shaders[i]->SourceChecksum); - } - if (shProg->VertexProgram) - printf(" vert prog %u\n", shProg->VertexProgram->Base.Id); - if (shProg->FragmentProgram) - printf(" frag prog %u\n", shProg->FragmentProgram->Base.Id); + if (ctx->Shader.Flags & GLSL_USE_PROG) { + print_shader_info(shProg); } } else { shProg = NULL; } - _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram, shProg); + if (ctx->Shader.CurrentProgram != shProg) { + FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS); + _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram, shProg); + } } @@ -1702,8 +1733,8 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, /* we'll ignore extra data below */ } else { - /* non-array: count must be one */ - if (count != 1) { + /* non-array: count must be at most one; count == 0 is handled by the loop below */ + if (count > 1) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniform(uniform is not an array)"); return; @@ -1880,20 +1911,27 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program, GLboolean transpose, const GLfloat *values) { GLuint mat, row, col; - GLuint dst = index + offset, src = 0; + GLuint src = 0; + const struct gl_program_parameter * param = &program->Parameters->Parameters[index]; + const GLint slots = (param->Size + 3) / 4; + const GLint typeSize = sizeof_glsl_type(param->DataType); GLint nr, nc; /* check that the number of rows, columns is correct */ - get_matrix_dims(program->Parameters->Parameters[index].DataType, &nr, &nc); + get_matrix_dims(param->DataType, &nr, &nc); if (rows != nr || cols != nc) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniformMatrix(matrix size mismatch)"); return; } - if (index + offset > program->Parameters->Size) { - /* out of bounds! */ - return; + if (param->Size <= typeSize) { + /* non-array: count must be at most one; count == 0 is handled by the loop below */ + if (count > 1) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glUniformMatrix(uniform is not an array)"); + return; + } } /* @@ -1907,7 +1945,12 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program, /* each matrix: */ for (col = 0; col < cols; col++) { - GLfloat *v = program->Parameters->ParameterValues[dst]; + GLfloat *v; + if (offset >= slots) { + /* Ignore writes beyond the end of (the used part of) an array */ + return; + } + v = program->Parameters->ParameterValues[index + offset]; for (row = 0; row < rows; row++) { if (transpose) { v[row] = values[src + row * cols + col]; @@ -1916,7 +1959,8 @@ set_program_uniform_matrix(GLcontext *ctx, struct gl_program *program, v[row] = values[src + col * rows + row]; } } - dst++; + + offset++; } src += rows * cols; /* next matrix */ diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc index 9764fc25b09..56de47ee8d7 100644 --- a/src/mesa/shader/slang/library/slang_common_builtin.gc +++ b/src/mesa/shader/slang/library/slang_common_builtin.gc @@ -602,42 +602,50 @@ vec4 exp2(const vec4 a) float sqrt(const float x) { + const float nx = -x; float r; __asm float_rsq r, x; - __asm float_rcp __retVal, r; -} - -vec2 sqrt(const vec2 v) -{ - float r; - __asm float_rsq r, v.x; - __asm float_rcp __retVal.x, r; - __asm float_rsq r, v.y; - __asm float_rcp __retVal.y, r; -} - -vec3 sqrt(const vec3 v) -{ - float r; - __asm float_rsq r, v.x; - __asm float_rcp __retVal.x, r; - __asm float_rsq r, v.y; - __asm float_rcp __retVal.y, r; - __asm float_rsq r, v.z; - __asm float_rcp __retVal.z, r; -} - -vec4 sqrt(const vec4 v) -{ - float r; - __asm float_rsq r, v.x; - __asm float_rcp __retVal.x, r; - __asm float_rsq r, v.y; - __asm float_rcp __retVal.y, r; - __asm float_rsq r, v.z; - __asm float_rcp __retVal.z, r; - __asm float_rsq r, v.w; - __asm float_rcp __retVal.w, r; + __asm float_rcp r, r; + __asm vec4_cmp __retVal, nx, r, 0.0; +} + +vec2 sqrt(const vec2 x) +{ + const vec2 nx = -x, zero = vec2(0.0); + vec2 r; + __asm float_rsq r.x, x.x; + __asm float_rsq r.y, x.y; + __asm float_rcp r.x, r.x; + __asm float_rcp r.y, r.y; + __asm vec4_cmp __retVal, nx, r, zero; +} + +vec3 sqrt(const vec3 x) +{ + const vec3 nx = -x, zero = vec3(0.0); + vec3 r; + __asm float_rsq r.x, x.x; + __asm float_rsq r.y, x.y; + __asm float_rsq r.z, x.z; + __asm float_rcp r.x, r.x; + __asm float_rcp r.y, r.y; + __asm float_rcp r.z, r.z; + __asm vec4_cmp __retVal, nx, r, zero; +} + +vec4 sqrt(const vec4 x) +{ + const vec4 nx = -x, zero = vec4(0.0); + vec4 r; + __asm float_rsq r.x, x.x; + __asm float_rsq r.y, x.y; + __asm float_rsq r.z, x.z; + __asm float_rsq r.w, x.w; + __asm float_rcp r.x, r.x; + __asm float_rcp r.y, r.y; + __asm float_rcp r.z, r.z; + __asm float_rcp r.w, r.w; + __asm vec4_cmp __retVal, nx, r, zero; } diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h index 78a7b83ec18..3c3666e4ea2 100644 --- a/src/mesa/shader/slang/library/slang_common_builtin_gc.h +++ b/src/mesa/shader/slang/library/slang_common_builtin_gc.h @@ -307,55 +307,63 @@ 0,0,18,97,0,59,121,0,0,0,4,102,108,111,97,116,95,101,120,112,50,0,18,95,95,114,101,116,86,97,108,0, 59,122,0,0,18,97,0,59,122,0,0,0,4,102,108,111,97,116,95,101,120,112,50,0,18,95,95,114,101,116,86, 97,108,0,59,119,0,0,18,97,0,59,119,0,0,0,0,1,90,95,0,0,9,0,0,115,113,114,116,0,1,1,0,0,9,0,120,0,0, -0,1,3,2,90,95,0,0,9,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,120,0,0,0,4, -102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,0,18,114,0,0,0,0,1,90,95,0,0, -10,0,0,115,113,114,116,0,1,1,0,0,10,0,118,0,0,0,1,3,2,90,95,0,0,9,0,1,114,0,0,0,4,102,108,111,97, -116,95,114,115,113,0,18,114,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95, -95,114,101,116,86,97,108,0,59,120,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0, -0,18,118,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59, -121,0,0,18,114,0,0,0,0,1,90,95,0,0,11,0,0,115,113,114,116,0,1,1,0,0,11,0,118,0,0,0,1,3,2,90,95,0,0, -9,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,120,0,0,0,4,102,108, -111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,114,0,0,0,4,102,108,111, -97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18, -95,95,114,101,116,86,97,108,0,59,121,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114, -0,0,18,118,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59, -122,0,0,18,114,0,0,0,0,1,90,95,0,0,12,0,0,115,113,114,116,0,1,1,0,0,12,0,118,0,0,0,1,3,2,90,95,0,0, -9,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,120,0,0,0,4,102,108, -111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,114,0,0,0,4,102,108,111, -97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,121,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18, -95,95,114,101,116,86,97,108,0,59,121,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114, -0,0,18,118,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59, -122,0,0,18,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,0,18,118,0,59,119,0,0,0,4,102, -108,111,97,116,95,114,99,112,0,18,95,95,114,101,116,86,97,108,0,59,119,0,0,18,114,0,0,0,0,1,90,95, -0,0,9,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,9,0,120,0,0,0,1,4,102,108,111,97, -116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,120,0,0,0,0,1,90,95,0,0,10,0,0, -105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,10,0,118,0,0,0,1,4,102,108,111,97,116,95,114, -115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,116, -95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,0,1,90,95,0,0, -11,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,11,0,118,0,0,0,1,4,102,108,111,97,116, -95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111, -97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,4,102, -108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,59,122,0,0,0, -0,1,90,95,0,0,12,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,12,0,118,0,0,0,1,4,102, -108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0, -4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121, -0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0, -59,122,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,119,0,0,18, -118,0,59,119,0,0,0,0,1,90,95,0,0,9,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,9,0,120,0,0,0, -1,9,18,95,95,114,101,116,86,97,108,0,17,49,0,48,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,114,109,97, -108,105,122,101,0,1,1,0,0,10,0,118,0,0,0,1,3,2,90,95,1,0,9,0,1,115,0,2,58,105,110,118,101,114,115, -101,115,113,114,116,0,0,58,100,111,116,0,0,18,118,0,0,18,118,0,0,0,0,0,0,0,4,118,101,99,52,95,109, -117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,115,0, -0,0,0,1,90,95,0,0,11,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,11,0,118,0,0,0,1,3,2,90,95,0, -0,9,0,1,116,109,112,0,0,0,4,118,101,99,51,95,100,111,116,0,18,116,109,112,0,0,18,118,0,0,18,118,0, -0,0,4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,0,0,4,118,101,99,52, -95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0, -0,18,116,109,112,0,0,0,0,1,90,95,0,0,12,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,12,0,118, -0,0,0,1,3,2,90,95,0,0,9,0,1,116,109,112,0,0,0,4,118,101,99,52,95,100,111,116,0,18,116,109,112,0,0, -18,118,0,0,18,118,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0, -0,0,4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120, -121,122,0,0,18,118,0,0,18,116,109,112,0,0,0,0,1,90,95,0,0,9,0,0,97,98,115,0,1,1,0,0,9,0,97,0,0,0,1, -4,118,101,99,52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,0,0,0,1,90,95,0,0,10,0,0, +0,1,3,2,90,95,1,0,9,0,1,110,120,0,2,18,120,0,54,0,0,3,2,90,95,0,0,9,0,1,114,0,0,0,4,102,108,111,97, +116,95,114,115,113,0,18,114,0,0,18,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,0,18, +114,0,0,0,4,118,101,99,52,95,99,109,112,0,18,95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114, +0,0,17,48,0,48,0,0,0,0,0,1,90,95,0,0,10,0,0,115,113,114,116,0,1,1,0,0,10,0,120,0,0,0,1,3,2,90,95,1, +0,10,0,1,110,120,0,2,18,120,0,54,0,1,1,122,101,114,111,0,2,58,118,101,99,50,0,0,17,48,0,48,0,0,0,0, +0,0,3,2,90,95,0,0,10,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,59,120,0,0,18, +120,0,59,120,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,59,121,0,0,18,120,0,59,121,0,0,0, +4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,120,0,0,18,114,0,59,120,0,0,0,4,102,108,111,97, +116,95,114,99,112,0,18,114,0,59,121,0,0,18,114,0,59,121,0,0,0,4,118,101,99,52,95,99,109,112,0,18, +95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,0,0,18,122,101,114,111,0,0,0,0,1,90,95,0,0, +11,0,0,115,113,114,116,0,1,1,0,0,11,0,120,0,0,0,1,3,2,90,95,1,0,11,0,1,110,120,0,2,18,120,0,54,0,1, +1,122,101,114,111,0,2,58,118,101,99,51,0,0,17,48,0,48,0,0,0,0,0,0,3,2,90,95,0,0,11,0,1,114,0,0,0,4, +102,108,111,97,116,95,114,115,113,0,18,114,0,59,120,0,0,18,120,0,59,120,0,0,0,4,102,108,111,97,116, +95,114,115,113,0,18,114,0,59,121,0,0,18,120,0,59,121,0,0,0,4,102,108,111,97,116,95,114,115,113,0, +18,114,0,59,122,0,0,18,120,0,59,122,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,120,0,0, +18,114,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,121,0,0,18,114,0,59,121,0,0, +0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,122,0,0,18,114,0,59,122,0,0,0,4,118,101,99,52, +95,99,109,112,0,18,95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,0,0,18,122,101,114,111,0, +0,0,0,1,90,95,0,0,12,0,0,115,113,114,116,0,1,1,0,0,12,0,120,0,0,0,1,3,2,90,95,1,0,12,0,1,110,120,0, +2,18,120,0,54,0,1,1,122,101,114,111,0,2,58,118,101,99,52,0,0,17,48,0,48,0,0,0,0,0,0,3,2,90,95,0,0, +12,0,1,114,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,114,0,59,120,0,0,18,120,0,59,120,0,0,0,4, +102,108,111,97,116,95,114,115,113,0,18,114,0,59,121,0,0,18,120,0,59,121,0,0,0,4,102,108,111,97,116, +95,114,115,113,0,18,114,0,59,122,0,0,18,120,0,59,122,0,0,0,4,102,108,111,97,116,95,114,115,113,0, +18,114,0,59,119,0,0,18,120,0,59,119,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,120,0,0, +18,114,0,59,120,0,0,0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,121,0,0,18,114,0,59,121,0,0, +0,4,102,108,111,97,116,95,114,99,112,0,18,114,0,59,122,0,0,18,114,0,59,122,0,0,0,4,102,108,111,97, +116,95,114,99,112,0,18,114,0,59,119,0,0,18,114,0,59,119,0,0,0,4,118,101,99,52,95,99,109,112,0,18, +95,95,114,101,116,86,97,108,0,0,18,110,120,0,0,18,114,0,0,18,122,101,114,111,0,0,0,0,1,90,95,0,0,9, +0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,9,0,120,0,0,0,1,4,102,108,111,97,116,95, +114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,120,0,0,0,0,1,90,95,0,0,10,0,0,105, +110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,10,0,118,0,0,0,1,4,102,108,111,97,116,95,114,115, +113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97,116,95, +114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,0,1,90,95,0,0,11,0, +0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,11,0,118,0,0,0,1,4,102,108,111,97,116,95, +114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4,102,108,111,97, +116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0,0,0,4,102,108, +111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,59,122,0,0,0,0,1, +90,95,0,0,12,0,0,105,110,118,101,114,115,101,115,113,114,116,0,1,1,0,0,12,0,118,0,0,0,1,4,102,108, +111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,118,0,59,120,0,0,0,4, +102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,121,0,0,18,118,0,59,121,0, +0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,122,0,0,18,118,0,59, +122,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,95,95,114,101,116,86,97,108,0,59,119,0,0,18,118, +0,59,119,0,0,0,0,1,90,95,0,0,9,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,9,0,120,0,0,0,1,9, +18,95,95,114,101,116,86,97,108,0,17,49,0,48,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,114,109,97,108, +105,122,101,0,1,1,0,0,10,0,118,0,0,0,1,3,2,90,95,1,0,9,0,1,115,0,2,58,105,110,118,101,114,115,101, +115,113,114,116,0,0,58,100,111,116,0,0,18,118,0,0,18,118,0,0,0,0,0,0,0,4,118,101,99,52,95,109,117, +108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,118,0,0,18,115,0,0,0, +0,1,90,95,0,0,11,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,11,0,118,0,0,0,1,3,2,90,95,0,0,9, +0,1,116,109,112,0,0,0,4,118,101,99,51,95,100,111,116,0,18,116,109,112,0,0,18,118,0,0,18,118,0,0,0, +4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,0,0,4,118,101,99,52,95, +109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,118,0,0, +18,116,109,112,0,0,0,0,1,90,95,0,0,12,0,0,110,111,114,109,97,108,105,122,101,0,1,1,0,0,12,0,118,0, +0,0,1,3,2,90,95,0,0,9,0,1,116,109,112,0,0,0,4,118,101,99,52,95,100,111,116,0,18,116,109,112,0,0,18, +118,0,0,18,118,0,0,0,4,102,108,111,97,116,95,114,115,113,0,18,116,109,112,0,0,18,116,109,112,0,0,0, +4,118,101,99,52,95,109,117,108,116,105,112,108,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121, +122,0,0,18,118,0,0,18,116,109,112,0,0,0,0,1,90,95,0,0,9,0,0,97,98,115,0,1,1,0,0,9,0,97,0,0,0,1,4, +118,101,99,52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,0,0,18,97,0,0,0,0,1,90,95,0,0,10,0,0, 97,98,115,0,1,1,0,0,10,0,97,0,0,0,1,4,118,101,99,52,95,97,98,115,0,18,95,95,114,101,116,86,97,108, 0,59,120,121,0,0,18,97,0,0,0,0,1,90,95,0,0,11,0,0,97,98,115,0,1,1,0,0,11,0,97,0,0,0,1,4,118,101,99, 52,95,97,98,115,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,97,0,0,0,0,1,90,95,0,0,12, diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 703af9f8740..344dfdc6804 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -422,6 +422,7 @@ static slang_asm_info AsmInfo[] = { { "vec4_lrp", IR_LRP, 1, 3 }, { "vec4_min", IR_MIN, 1, 2 }, { "vec4_max", IR_MAX, 1, 2 }, + { "vec4_cmp", IR_CMP, 1, 3 }, { "vec4_clamp", IR_CLAMP, 1, 3 }, { "vec4_seq", IR_SEQUAL, 1, 2 }, { "vec4_sne", IR_SNEQUAL, 1, 2 }, diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c index c1b97c7cb70..a2708884437 100644 --- a/src/mesa/shader/slang/slang_compile.c +++ b/src/mesa/shader/slang/slang_compile.c @@ -2814,6 +2814,16 @@ _slang_compile(GLcontext *ctx, struct gl_shader *shader) (ctx->Shader.Flags & GLSL_NO_OPT) == 0) { _mesa_optimize_program(ctx, shader->Program); } + if ((ctx->Shader.Flags & GLSL_NOP_VERT) && + shader->Program->Target == GL_VERTEX_PROGRAM_ARB) { + _mesa_nop_vertex_program(ctx, + (struct gl_vertex_program *) shader->Program); + } + if ((ctx->Shader.Flags & GLSL_NOP_FRAG) && + shader->Program->Target == GL_FRAGMENT_PROGRAM_ARB) { + _mesa_nop_fragment_program(ctx, + (struct gl_fragment_program *) shader->Program); + } } if (ctx->Shader.Flags & GLSL_LOG) { diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index 3f455e0640b..3af301eacdf 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -2287,6 +2287,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) case IR_POW: /* trinary operators */ case IR_LRP: + case IR_CMP: return emit_arith(emitInfo, n); case IR_EQUAL: diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c index 1c7f7474e71..62603503dd9 100644 --- a/src/mesa/shader/slang/slang_ir.c +++ b/src/mesa/shader/slang/slang_ir.c @@ -80,6 +80,7 @@ static const slang_ir_info IrInfo[] = { { IR_NOISE4, "IR_NOISE4", OPCODE_NOISE4, 1, 1 }, /* other */ + { IR_CMP, "IR_CMP", OPCODE_CMP, 4, 3 }, /* compare/select */ { IR_SEQ, "IR_SEQ", OPCODE_NOP, 0, 0 }, { IR_SCOPE, "IR_SCOPE", OPCODE_NOP, 0, 0 }, { IR_LABEL, "IR_LABEL", OPCODE_NOP, 0, 0 }, diff --git a/src/mesa/shader/slang/slang_ir.h b/src/mesa/shader/slang/slang_ir.h index e796693ed58..166b4e80436 100644 --- a/src/mesa/shader/slang/slang_ir.h +++ b/src/mesa/shader/slang/slang_ir.h @@ -91,6 +91,7 @@ typedef enum IR_CLAMP, IR_MIN, IR_MAX, + IR_CMP, /* = (op0 < 0) ? op1 : op2 */ IR_SEQUAL, /* Set if args are equal (vector) */ IR_SNEQUAL, /* Set if args are not equal (vector) */ IR_SGE, /* Set if greater or equal (vector) */ diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c index 8f2b40d5dfb..144c1265251 100644 --- a/src/mesa/shader/slang/slang_link.c +++ b/src/mesa/shader/slang/slang_link.c @@ -104,7 +104,7 @@ link_varying_vars(GLcontext *ctx, GLuint *map, i, firstVarying, newFile; GLbitfield *inOutFlags; - map = (GLuint *) malloc(prog->Varying->NumParameters * sizeof(GLuint)); + map = (GLuint *) _mesa_malloc(prog->Varying->NumParameters * sizeof(GLuint)); if (!map) return GL_FALSE; @@ -135,6 +135,7 @@ link_varying_vars(GLcontext *ctx, &shProg->Varying->Parameters[j]; if (var->Size != v->Size) { link_error(shProg, "mismatched varying variable types"); + _mesa_free(map); return GL_FALSE; } if (!bits_agree(var->Flags, v->Flags, PROG_PARAM_BIT_CENTROID)) { @@ -142,6 +143,7 @@ link_varying_vars(GLcontext *ctx, _mesa_snprintf(msg, sizeof(msg), "centroid modifier mismatch for '%s'", var->Name); link_error(shProg, msg); + _mesa_free(map); return GL_FALSE; } if (!bits_agree(var->Flags, v->Flags, PROG_PARAM_BIT_INVARIANT)) { @@ -149,6 +151,7 @@ link_varying_vars(GLcontext *ctx, _mesa_snprintf(msg, sizeof(msg), "invariant modifier mismatch for '%s'", var->Name); link_error(shProg, msg); + _mesa_free(map); return GL_FALSE; } } @@ -160,6 +163,7 @@ link_varying_vars(GLcontext *ctx, if (shProg->Varying->NumParameters > ctx->Const.MaxVarying) { link_error(shProg, "Too many varying variables"); + _mesa_free(map); return GL_FALSE; } @@ -199,7 +203,7 @@ link_varying_vars(GLcontext *ctx, } } - free(map); + _mesa_free(map); /* these will get recomputed before linking is completed */ prog->InputsRead = 0x0; @@ -670,6 +674,7 @@ get_main_shader(GLcontext *ctx, !shader->Main || shader->UnresolvedRefs) { link_error(shProg, "Unresolved symbols"); + _mesa_free_shader(ctx, shader); return NULL; } } diff --git a/src/mesa/shader/symbol_table.c b/src/mesa/shader/symbol_table.c index 7a9aa7b8f65..1f6d9b844d6 100644 --- a/src/mesa/shader/symbol_table.c +++ b/src/mesa/shader/symbol_table.c @@ -20,12 +20,8 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <assert.h> +#include "main/imports.h" #include "symbol_table.h" #include "hash_table.h" @@ -73,6 +69,9 @@ struct symbol { /** */ struct symbol_header { + /** Linkage in list of all headers in a given symbol table. */ + struct symbol_header *next; + /** Symbol name. */ const char *name; @@ -102,6 +101,9 @@ struct _mesa_symbol_table { /** Top of scope stack. */ struct scope_level *current_scope; + + /** List of all symbol headers in the table. */ + struct symbol_header *hdr; }; @@ -301,6 +303,8 @@ _mesa_symbol_table_add_symbol(struct _mesa_symbol_table *table, hdr->name = name; hash_table_insert(table->ht, hdr, name); + hdr->next = table->hdr; + table->hdr = hdr; } check_symbol_table(table); @@ -341,10 +345,18 @@ _mesa_symbol_table_ctor(void) void _mesa_symbol_table_dtor(struct _mesa_symbol_table *table) { + struct symbol_header *hdr; + struct symbol_header *next; + while (table->current_scope != NULL) { _mesa_symbol_table_pop_scope(table); } + for (hdr = table->hdr; hdr != NULL; hdr = next) { + next = hdr->next; + _mesa_free(hdr); + } + hash_table_dtor(table->ht); free(table); } |