diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/drivers/dri/tdfx/tdfx_texstate.c | 2 | ||||
| -rw-r--r-- | src/mesa/shader/prog_parameter.c | 8 | ||||
| -rw-r--r-- | src/mesa/shader/prog_parameter_layout.c | 16 | ||||
| -rw-r--r-- | src/mesa/shader/program_parse.tab.c | 565 | ||||
| -rw-r--r-- | src/mesa/shader/program_parse.tab.h | 2 | ||||
| -rw-r--r-- | src/mesa/shader/program_parse.y | 29 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_mesa_to_tgsi.c | 21 | 
7 files changed, 337 insertions, 306 deletions
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c index bbd2c8cfee..3f737878ed 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_texstate.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_texstate.c @@ -1314,7 +1314,7 @@ SetupDoubleTexEnvVoodoo3(GLcontext *ctx, int tmu0,        fxMesa->TexCombine[0].InvertRGB = FXFALSE;        fxMesa->TexCombine[0].InvertAlpha = FXFALSE; -      if ((baseFormat0 == GL_RGB) && (baseFormat0 == GL_LUMINANCE)) { +      if ((baseFormat0 == GL_RGB) || (baseFormat0 == GL_LUMINANCE)) {           fxMesa->AlphaCombine.Function = GR_COMBINE_FUNCTION_LOCAL;           fxMesa->AlphaCombine.Factor = GR_COMBINE_FACTOR_NONE;           fxMesa->AlphaCombine.Local = locala; diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c index f22492e029..5822510701 100644 --- a/src/mesa/shader/prog_parameter.c +++ b/src/mesa/shader/prog_parameter.c @@ -230,9 +230,8 @@ _mesa_add_named_constant(struct gl_program_parameter_list *paramList,   * Add a new unnamed constant to the parameter list.  This will be used   * when a fragment/vertex program contains something like this:   *    MOV r, { 0, 1, 2, 3 }; - * We'll search the parameter list for an existing instance of the - * constant.  If swizzleOut is non-null, we'll try swizzling when - * looking for a match. + * If swizzleOut is non-null we'll search the parameter list for an + * existing instance of the constant which matches with a swizzle.   *   * \param paramList  the parameter list   * \param values  four float values @@ -248,7 +247,8 @@ _mesa_add_unnamed_constant(struct gl_program_parameter_list *paramList,     ASSERT(size >= 1);     ASSERT(size <= 4); -   if (_mesa_lookup_parameter_constant(paramList, values, +   if (swizzleOut && +       _mesa_lookup_parameter_constant(paramList, values,                                         size, &pos, swizzleOut)) {        return pos;     } diff --git a/src/mesa/shader/prog_parameter_layout.c b/src/mesa/shader/prog_parameter_layout.c index 1c37b3a7a5..a888573832 100644 --- a/src/mesa/shader/prog_parameter_layout.c +++ b/src/mesa/shader/prog_parameter_layout.c @@ -72,14 +72,11 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src,  			     unsigned first, unsigned count)  {     const int base = dst->NumParameters; -   unsigned i; -   unsigned j; - +   unsigned i, j;     for (i = first; i < (first + count); i++) {        struct gl_program_parameter *curr = & src->Parameters[i]; -        if (curr->Type == PROGRAM_CONSTANT) {  	 j = dst->NumParameters;        } else { @@ -93,10 +90,15 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src,        assert(j == dst->NumParameters); +      /* copy src parameter [i] to dest parameter [j] */        memcpy(& dst->Parameters[j], curr,  	     sizeof(dst->Parameters[j]));        memcpy(dst->ParameterValues[j], src->ParameterValues[i],  	     sizeof(GLfloat) * 4); + +      /* Pointer to the string name was copied.  Null-out src param name +       * to prevent double free later. +       */        curr->Name = NULL;        dst->NumParameters++; @@ -117,11 +119,9 @@ _mesa_layout_parameters(struct asm_parser_state *state)     struct asm_instruction *inst;     unsigned i; -     layout =        _mesa_new_parameter_list_sized(state->prog->Parameters->NumParameters); -     /* PASS 1:  Move any parameters that are accessed indirectly from the      * original parameter list to the new parameter list.      */ @@ -155,7 +155,6 @@ _mesa_layout_parameters(struct asm_parser_state *state)        }     } -     /* PASS 2:  Move any parameters that are not accessed indirectly from the      * original parameter list to the new parameter list.      */ @@ -165,7 +164,6 @@ _mesa_layout_parameters(struct asm_parser_state *state)  	 const int idx = inst->SrcReg[i].Base.Index;  	 unsigned swizzle = SWIZZLE_NOOP; -  	 /* All relative addressed operands were processed on the first  	  * pass.  Just skip them here.  	  */ @@ -173,7 +171,6 @@ _mesa_layout_parameters(struct asm_parser_state *state)  	    continue;  	 } -  	 if ((inst->SrcReg[i].Base.File <= PROGRAM_VARYING )  	     || (inst->SrcReg[i].Base.File >= PROGRAM_WRITE_ONLY)) {  	    continue; @@ -209,7 +206,6 @@ _mesa_layout_parameters(struct asm_parser_state *state)        }     } -     _mesa_free_parameter_list(state->prog->Parameters);     state->prog->Parameters = layout; diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c index a1e69b8450..b12dcee9df 100644 --- a/src/mesa/shader/program_parse.tab.c +++ b/src/mesa/shader/program_parse.tab.c @@ -123,7 +123,8 @@ static int initialize_symbol_from_param(struct gl_program *prog,      struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);  static int initialize_symbol_from_const(struct gl_program *prog, -    struct asm_symbol *param_var, const struct asm_vector *vec); +    struct asm_symbol *param_var, const struct asm_vector *vec, +    GLboolean allowSwizzle);  static int yyparse(struct asm_parser_state *state); @@ -188,7 +189,7 @@ static struct asm_instruction *asm_instruction_copy_ctor(  /* Line 189 of yacc.c  */ -#line 192 "program_parse.tab.c" +#line 193 "program_parse.tab.c"  /* Enabling traces.  */  #ifndef YYDEBUG @@ -330,7 +331,7 @@ typedef union YYSTYPE  {  /* Line 214 of yacc.c  */ -#line 125 "program_parse.y" +#line 126 "program_parse.y"     struct asm_instruction *inst;     struct asm_symbol *sym; @@ -359,7 +360,7 @@ typedef union YYSTYPE  /* Line 214 of yacc.c  */ -#line 363 "program_parse.tab.c" +#line 364 "program_parse.tab.c"  } YYSTYPE;  # define YYSTYPE_IS_TRIVIAL 1  # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -383,14 +384,14 @@ typedef struct YYLTYPE  /* Copy the second part of user declarations.  */  /* Line 264 of yacc.c  */ -#line 270 "program_parse.y" +#line 271 "program_parse.y"  extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param,      void *yyscanner);  /* Line 264 of yacc.c  */ -#line 394 "program_parse.tab.c" +#line 395 "program_parse.tab.c"  #ifdef short  # undef short @@ -791,35 +792,35 @@ static const yytype_int16 yyrhs[] =  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */  static const yytype_uint16 yyrline[] =  { -       0,   277,   277,   280,   288,   300,   301,   304,   328,   329, -     332,   347,   350,   355,   362,   363,   364,   365,   366,   367, -     368,   371,   372,   373,   376,   382,   388,   394,   401,   407, -     414,   458,   463,   473,   517,   523,   524,   525,   526,   527, -     528,   529,   530,   531,   532,   533,   534,   537,   549,   557, -     574,   581,   600,   611,   631,   656,   663,   696,   703,   718, -     773,   816,   825,   846,   856,   860,   889,   908,   908,   910, -     917,   929,   930,   931,   934,   948,   962,   982,   993,  1005, -    1007,  1008,  1009,  1010,  1013,  1013,  1013,  1013,  1014,  1017, -    1021,  1026,  1033,  1040,  1047,  1070,  1093,  1094,  1095,  1096, -    1097,  1098,  1101,  1120,  1124,  1130,  1134,  1138,  1142,  1151, -    1160,  1164,  1169,  1175,  1186,  1186,  1187,  1189,  1193,  1197, -    1201,  1207,  1207,  1209,  1227,  1253,  1256,  1267,  1273,  1279, -    1280,  1287,  1293,  1299,  1307,  1313,  1319,  1327,  1333,  1339, -    1347,  1348,  1351,  1352,  1353,  1354,  1355,  1356,  1357,  1358, -    1359,  1360,  1361,  1364,  1373,  1377,  1381,  1387,  1396,  1400, -    1404,  1413,  1417,  1423,  1429,  1436,  1441,  1449,  1459,  1461, -    1469,  1475,  1479,  1483,  1489,  1500,  1509,  1513,  1518,  1522, -    1526,  1530,  1536,  1543,  1547,  1553,  1561,  1572,  1579,  1583, -    1589,  1599,  1610,  1614,  1632,  1641,  1644,  1650,  1654,  1658, -    1664,  1675,  1680,  1685,  1690,  1695,  1700,  1708,  1711,  1716, -    1729,  1737,  1748,  1756,  1756,  1758,  1758,  1760,  1770,  1775, -    1782,  1792,  1801,  1806,  1813,  1823,  1833,  1845,  1845,  1846, -    1846,  1848,  1858,  1866,  1876,  1884,  1892,  1901,  1912,  1916, -    1922,  1923,  1924,  1927,  1927,  1930,  1965,  1969,  1969,  1972, -    1979,  1988,  2002,  2011,  2020,  2024,  2033,  2042,  2053,  2060, -    2065,  2074,  2086,  2089,  2098,  2109,  2110,  2111,  2114,  2115, -    2116,  2119,  2120,  2123,  2124,  2127,  2128,  2131,  2142,  2153, -    2164,  2190,  2191 +       0,   278,   278,   281,   289,   301,   302,   305,   329,   330, +     333,   348,   351,   356,   363,   364,   365,   366,   367,   368, +     369,   372,   373,   374,   377,   383,   389,   395,   402,   408, +     415,   459,   464,   474,   518,   524,   525,   526,   527,   528, +     529,   530,   531,   532,   533,   534,   535,   538,   550,   558, +     575,   582,   601,   612,   632,   657,   664,   697,   704,   719, +     774,   817,   826,   847,   857,   861,   890,   909,   909,   911, +     918,   930,   931,   932,   935,   949,   963,   983,   994,  1006, +    1008,  1009,  1010,  1011,  1014,  1014,  1014,  1014,  1015,  1018, +    1022,  1027,  1034,  1041,  1048,  1071,  1094,  1095,  1096,  1097, +    1098,  1099,  1102,  1121,  1125,  1131,  1135,  1139,  1143,  1152, +    1161,  1165,  1170,  1176,  1187,  1187,  1188,  1190,  1194,  1198, +    1202,  1208,  1208,  1210,  1228,  1254,  1257,  1268,  1274,  1280, +    1281,  1288,  1294,  1300,  1308,  1314,  1320,  1328,  1334,  1340, +    1348,  1349,  1352,  1353,  1354,  1355,  1356,  1357,  1358,  1359, +    1360,  1361,  1362,  1365,  1374,  1378,  1382,  1388,  1397,  1401, +    1405,  1414,  1418,  1424,  1430,  1437,  1442,  1450,  1460,  1462, +    1470,  1476,  1480,  1484,  1490,  1501,  1510,  1514,  1519,  1523, +    1527,  1531,  1537,  1544,  1548,  1554,  1562,  1573,  1580,  1584, +    1590,  1600,  1611,  1615,  1633,  1642,  1645,  1651,  1655,  1659, +    1665,  1676,  1681,  1686,  1691,  1696,  1701,  1709,  1712,  1717, +    1730,  1738,  1749,  1757,  1757,  1759,  1759,  1761,  1771,  1776, +    1783,  1793,  1802,  1807,  1814,  1824,  1834,  1846,  1846,  1847, +    1847,  1849,  1859,  1867,  1877,  1885,  1893,  1902,  1913,  1917, +    1923,  1924,  1925,  1928,  1928,  1931,  1966,  1970,  1970,  1973, +    1980,  1989,  2003,  2012,  2021,  2025,  2034,  2043,  2054,  2061, +    2066,  2075,  2087,  2090,  2099,  2110,  2111,  2112,  2115,  2116, +    2117,  2120,  2121,  2124,  2125,  2128,  2129,  2132,  2143,  2154, +    2165,  2191,  2192  };  #endif @@ -2128,7 +2129,7 @@ yyreduce:          case 3:  /* Line 1455 of yacc.c  */ -#line 281 "program_parse.y" +#line 282 "program_parse.y"      {  	   if (state->prog->Target != GL_VERTEX_PROGRAM_ARB) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid fragment program header"); @@ -2141,7 +2142,7 @@ yyreduce:    case 4:  /* Line 1455 of yacc.c  */ -#line 289 "program_parse.y" +#line 290 "program_parse.y"      {  	   if (state->prog->Target != GL_FRAGMENT_PROGRAM_ARB) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex program header"); @@ -2156,7 +2157,7 @@ yyreduce:    case 7:  /* Line 1455 of yacc.c  */ -#line 305 "program_parse.y" +#line 306 "program_parse.y"      {  	   int valid = 0; @@ -2183,7 +2184,7 @@ yyreduce:    case 10:  /* Line 1455 of yacc.c  */ -#line 333 "program_parse.y" +#line 334 "program_parse.y"      {  	   if ((yyvsp[(1) - (2)].inst) != NULL) {  	      if (state->inst_tail == NULL) { @@ -2203,7 +2204,7 @@ yyreduce:    case 12:  /* Line 1455 of yacc.c  */ -#line 351 "program_parse.y" +#line 352 "program_parse.y"      {  	   (yyval.inst) = (yyvsp[(1) - (1)].inst);  	   state->prog->NumAluInstructions++; @@ -2213,7 +2214,7 @@ yyreduce:    case 13:  /* Line 1455 of yacc.c  */ -#line 356 "program_parse.y" +#line 357 "program_parse.y"      {  	   (yyval.inst) = (yyvsp[(1) - (1)].inst);  	   state->prog->NumTexInstructions++; @@ -2223,7 +2224,7 @@ yyreduce:    case 24:  /* Line 1455 of yacc.c  */ -#line 377 "program_parse.y" +#line 378 "program_parse.y"      {  	   (yyval.inst) = asm_instruction_ctor(OPCODE_ARL, & (yyvsp[(2) - (4)].dst_reg), & (yyvsp[(4) - (4)].src_reg), NULL, NULL);  	;} @@ -2232,7 +2233,7 @@ yyreduce:    case 25:  /* Line 1455 of yacc.c  */ -#line 383 "program_parse.y" +#line 384 "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);  	;} @@ -2241,7 +2242,7 @@ yyreduce:    case 26:  /* Line 1455 of yacc.c  */ -#line 389 "program_parse.y" +#line 390 "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);  	;} @@ -2250,7 +2251,7 @@ yyreduce:    case 27:  /* Line 1455 of yacc.c  */ -#line 395 "program_parse.y" +#line 396 "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);  	;} @@ -2259,7 +2260,7 @@ yyreduce:    case 28:  /* Line 1455 of yacc.c  */ -#line 402 "program_parse.y" +#line 403 "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);  	;} @@ -2268,7 +2269,7 @@ yyreduce:    case 29:  /* Line 1455 of yacc.c  */ -#line 409 "program_parse.y" +#line 410 "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));  	;} @@ -2277,7 +2278,7 @@ yyreduce:    case 30:  /* Line 1455 of yacc.c  */ -#line 415 "program_parse.y" +#line 416 "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);  	   if ((yyval.inst) != NULL) { @@ -2324,7 +2325,7 @@ yyreduce:    case 31:  /* Line 1455 of yacc.c  */ -#line 459 "program_parse.y" +#line 460 "program_parse.y"      {  	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL, NULL, & (yyvsp[(2) - (2)].src_reg), NULL, NULL);  	   state->fragment.UsesKill = 1; @@ -2334,7 +2335,7 @@ yyreduce:    case 32:  /* Line 1455 of yacc.c  */ -#line 464 "program_parse.y" +#line 465 "program_parse.y"      {  	   (yyval.inst) = asm_instruction_ctor(OPCODE_KIL_NV, NULL, NULL, NULL, NULL);  	   (yyval.inst)->Base.DstReg.CondMask = (yyvsp[(2) - (2)].dst_reg).CondMask; @@ -2347,7 +2348,7 @@ yyreduce:    case 33:  /* Line 1455 of yacc.c  */ -#line 474 "program_parse.y" +#line 475 "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));  	   if ((yyval.inst) != NULL) { @@ -2394,7 +2395,7 @@ yyreduce:    case 34:  /* Line 1455 of yacc.c  */ -#line 518 "program_parse.y" +#line 519 "program_parse.y"      {  	   (yyval.integer) = (yyvsp[(2) - (2)].integer);  	;} @@ -2403,91 +2404,91 @@ yyreduce:    case 35:  /* Line 1455 of yacc.c  */ -#line 523 "program_parse.y" +#line 524 "program_parse.y"      { (yyval.integer) = TEXTURE_1D_INDEX; ;}      break;    case 36:  /* Line 1455 of yacc.c  */ -#line 524 "program_parse.y" +#line 525 "program_parse.y"      { (yyval.integer) = TEXTURE_2D_INDEX; ;}      break;    case 37:  /* Line 1455 of yacc.c  */ -#line 525 "program_parse.y" +#line 526 "program_parse.y"      { (yyval.integer) = TEXTURE_3D_INDEX; ;}      break;    case 38:  /* Line 1455 of yacc.c  */ -#line 526 "program_parse.y" +#line 527 "program_parse.y"      { (yyval.integer) = TEXTURE_CUBE_INDEX; ;}      break;    case 39:  /* Line 1455 of yacc.c  */ -#line 527 "program_parse.y" +#line 528 "program_parse.y"      { (yyval.integer) = TEXTURE_RECT_INDEX; ;}      break;    case 40:  /* Line 1455 of yacc.c  */ -#line 528 "program_parse.y" +#line 529 "program_parse.y"      { (yyval.integer) = -TEXTURE_1D_INDEX; ;}      break;    case 41:  /* Line 1455 of yacc.c  */ -#line 529 "program_parse.y" +#line 530 "program_parse.y"      { (yyval.integer) = -TEXTURE_2D_INDEX; ;}      break;    case 42:  /* Line 1455 of yacc.c  */ -#line 530 "program_parse.y" +#line 531 "program_parse.y"      { (yyval.integer) = -TEXTURE_RECT_INDEX; ;}      break;    case 43:  /* Line 1455 of yacc.c  */ -#line 531 "program_parse.y" +#line 532 "program_parse.y"      { (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}      break;    case 44:  /* Line 1455 of yacc.c  */ -#line 532 "program_parse.y" +#line 533 "program_parse.y"      { (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}      break;    case 45:  /* Line 1455 of yacc.c  */ -#line 533 "program_parse.y" +#line 534 "program_parse.y"      { (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}      break;    case 46:  /* Line 1455 of yacc.c  */ -#line 534 "program_parse.y" +#line 535 "program_parse.y"      { (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}      break;    case 47:  /* Line 1455 of yacc.c  */ -#line 538 "program_parse.y" +#line 539 "program_parse.y"      {  	   /* FIXME: Is this correct?  Should the extenedSwizzle be applied  	    * FIXME: to the existing swizzle? @@ -2502,7 +2503,7 @@ yyreduce:    case 48:  /* Line 1455 of yacc.c  */ -#line 550 "program_parse.y" +#line 551 "program_parse.y"      {  	   (yyval.src_reg) = (yyvsp[(2) - (2)].src_reg); @@ -2515,7 +2516,7 @@ yyreduce:    case 49:  /* Line 1455 of yacc.c  */ -#line 558 "program_parse.y" +#line 559 "program_parse.y"      {  	   (yyval.src_reg) = (yyvsp[(3) - (4)].src_reg); @@ -2535,7 +2536,7 @@ yyreduce:    case 50:  /* Line 1455 of yacc.c  */ -#line 575 "program_parse.y" +#line 576 "program_parse.y"      {  	   (yyval.src_reg) = (yyvsp[(1) - (2)].src_reg); @@ -2547,7 +2548,7 @@ yyreduce:    case 51:  /* Line 1455 of yacc.c  */ -#line 582 "program_parse.y" +#line 583 "program_parse.y"      {  	   struct asm_symbol temp_sym; @@ -2558,7 +2559,7 @@ yyreduce:  	   memset(& temp_sym, 0, sizeof(temp_sym));  	   temp_sym.param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector)); +	   initialize_symbol_from_const(state->prog, & temp_sym, & (yyvsp[(1) - (1)].vector), GL_TRUE);  	   set_src_reg_swz(& (yyval.src_reg), PROGRAM_CONSTANT,                             temp_sym.param_binding_begin, @@ -2569,7 +2570,7 @@ yyreduce:    case 52:  /* Line 1455 of yacc.c  */ -#line 601 "program_parse.y" +#line 602 "program_parse.y"      {  	   (yyval.src_reg) = (yyvsp[(2) - (3)].src_reg); @@ -2585,7 +2586,7 @@ yyreduce:    case 53:  /* Line 1455 of yacc.c  */ -#line 612 "program_parse.y" +#line 613 "program_parse.y"      {  	   (yyval.src_reg) = (yyvsp[(3) - (5)].src_reg); @@ -2607,7 +2608,7 @@ yyreduce:    case 54:  /* Line 1455 of yacc.c  */ -#line 632 "program_parse.y" +#line 633 "program_parse.y"      {  	   (yyval.dst_reg) = (yyvsp[(1) - (3)].dst_reg);  	   (yyval.dst_reg).WriteMask = (yyvsp[(2) - (3)].swiz_mask).mask; @@ -2635,7 +2636,7 @@ yyreduce:    case 55:  /* Line 1455 of yacc.c  */ -#line 657 "program_parse.y" +#line 658 "program_parse.y"      {  	   set_dst_reg(& (yyval.dst_reg), PROGRAM_ADDRESS, 0);  	   (yyval.dst_reg).WriteMask = (yyvsp[(2) - (2)].swiz_mask).mask; @@ -2645,7 +2646,7 @@ yyreduce:    case 56:  /* Line 1455 of yacc.c  */ -#line 664 "program_parse.y" +#line 665 "program_parse.y"      {  	   const unsigned xyzw_valid =  	      ((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0) @@ -2681,7 +2682,7 @@ yyreduce:    case 57:  /* Line 1455 of yacc.c  */ -#line 697 "program_parse.y" +#line 698 "program_parse.y"      {  	   (yyval.ext_swizzle) = (yyvsp[(2) - (2)].ext_swizzle);  	   (yyval.ext_swizzle).negate = ((yyvsp[(1) - (2)].negate)) ? 1 : 0; @@ -2691,7 +2692,7 @@ yyreduce:    case 58:  /* Line 1455 of yacc.c  */ -#line 704 "program_parse.y" +#line 705 "program_parse.y"      {  	   if (((yyvsp[(1) - (1)].integer) != 0) && ((yyvsp[(1) - (1)].integer) != 1)) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector"); @@ -2711,7 +2712,7 @@ yyreduce:    case 59:  /* Line 1455 of yacc.c  */ -#line 719 "program_parse.y" +#line 720 "program_parse.y"      {  	   char s; @@ -2769,7 +2770,7 @@ yyreduce:    case 60:  /* Line 1455 of yacc.c  */ -#line 774 "program_parse.y" +#line 775 "program_parse.y"      {  	   struct asm_symbol *const s = (struct asm_symbol *)  	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -2817,7 +2818,7 @@ yyreduce:    case 61:  /* Line 1455 of yacc.c  */ -#line 817 "program_parse.y" +#line 818 "program_parse.y"      {  	   set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, (yyvsp[(1) - (1)].attrib));  	   state->prog->InputsRead |= (1U << (yyval.src_reg).Base.Index); @@ -2831,7 +2832,7 @@ yyreduce:    case 62:  /* Line 1455 of yacc.c  */ -#line 826 "program_parse.y" +#line 827 "program_parse.y"      {  	   if (! (yyvsp[(3) - (4)].src_reg).Base.RelAddr  	       && ((unsigned) (yyvsp[(3) - (4)].src_reg).Base.Index >= (yyvsp[(1) - (4)].sym)->param_binding_length)) { @@ -2857,7 +2858,7 @@ yyreduce:    case 63:  /* Line 1455 of yacc.c  */ -#line 847 "program_parse.y" +#line 848 "program_parse.y"      {             gl_register_file file = ((yyvsp[(1) - (1)].temp_sym).name != NULL)   	      ? (yyvsp[(1) - (1)].temp_sym).param_binding_type @@ -2870,7 +2871,7 @@ yyreduce:    case 64:  /* Line 1455 of yacc.c  */ -#line 857 "program_parse.y" +#line 858 "program_parse.y"      {  	   set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, (yyvsp[(1) - (1)].result));  	;} @@ -2879,7 +2880,7 @@ yyreduce:    case 65:  /* Line 1455 of yacc.c  */ -#line 861 "program_parse.y" +#line 862 "program_parse.y"      {  	   struct asm_symbol *const s = (struct asm_symbol *)  	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -2911,7 +2912,7 @@ yyreduce:    case 66:  /* Line 1455 of yacc.c  */ -#line 890 "program_parse.y" +#line 891 "program_parse.y"      {  	   struct asm_symbol *const s = (struct asm_symbol *)  	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -2933,7 +2934,7 @@ yyreduce:    case 69:  /* Line 1455 of yacc.c  */ -#line 911 "program_parse.y" +#line 912 "program_parse.y"      {  	   init_src_reg(& (yyval.src_reg));  	   (yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer); @@ -2943,7 +2944,7 @@ yyreduce:    case 70:  /* Line 1455 of yacc.c  */ -#line 918 "program_parse.y" +#line 919 "program_parse.y"      {  	   /* FINISHME: Add support for multiple address registers.  	    */ @@ -2958,28 +2959,28 @@ yyreduce:    case 71:  /* Line 1455 of yacc.c  */ -#line 929 "program_parse.y" +#line 930 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 72:  /* Line 1455 of yacc.c  */ -#line 930 "program_parse.y" +#line 931 "program_parse.y"      { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}      break;    case 73:  /* Line 1455 of yacc.c  */ -#line 931 "program_parse.y" +#line 932 "program_parse.y"      { (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}      break;    case 74:  /* Line 1455 of yacc.c  */ -#line 935 "program_parse.y" +#line 936 "program_parse.y"      {  	   if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {                char s[100]; @@ -2996,7 +2997,7 @@ yyreduce:    case 75:  /* Line 1455 of yacc.c  */ -#line 949 "program_parse.y" +#line 950 "program_parse.y"      {  	   if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {                char s[100]; @@ -3013,7 +3014,7 @@ yyreduce:    case 76:  /* Line 1455 of yacc.c  */ -#line 963 "program_parse.y" +#line 964 "program_parse.y"      {  	   struct asm_symbol *const s = (struct asm_symbol *)  	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(1) - (1)].string)); @@ -3036,7 +3037,7 @@ yyreduce:    case 77:  /* Line 1455 of yacc.c  */ -#line 983 "program_parse.y" +#line 984 "program_parse.y"      {  	   if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid address component selector"); @@ -3050,7 +3051,7 @@ yyreduce:    case 78:  /* Line 1455 of yacc.c  */ -#line 994 "program_parse.y" +#line 995 "program_parse.y"      {  	   if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {  	      yyerror(& (yylsp[(1) - (1)]), state, @@ -3065,21 +3066,21 @@ yyreduce:    case 83:  /* Line 1455 of yacc.c  */ -#line 1010 "program_parse.y" +#line 1011 "program_parse.y"      { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}      break;    case 88:  /* Line 1455 of yacc.c  */ -#line 1014 "program_parse.y" +#line 1015 "program_parse.y"      { (yyval.swiz_mask).swizzle = SWIZZLE_NOOP; (yyval.swiz_mask).mask = WRITEMASK_XYZW; ;}      break;    case 89:  /* Line 1455 of yacc.c  */ -#line 1018 "program_parse.y" +#line 1019 "program_parse.y"      {  	   (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);  	;} @@ -3088,7 +3089,7 @@ yyreduce:    case 90:  /* Line 1455 of yacc.c  */ -#line 1022 "program_parse.y" +#line 1023 "program_parse.y"      {  	   (yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);  	;} @@ -3097,7 +3098,7 @@ yyreduce:    case 91:  /* Line 1455 of yacc.c  */ -#line 1026 "program_parse.y" +#line 1027 "program_parse.y"      {  	   (yyval.dst_reg).CondMask = COND_TR;  	   (yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP; @@ -3108,7 +3109,7 @@ yyreduce:    case 92:  /* Line 1455 of yacc.c  */ -#line 1034 "program_parse.y" +#line 1035 "program_parse.y"      {  	   (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);  	   (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle; @@ -3118,7 +3119,7 @@ yyreduce:    case 93:  /* Line 1455 of yacc.c  */ -#line 1041 "program_parse.y" +#line 1042 "program_parse.y"      {  	   (yyval.dst_reg) = (yyvsp[(1) - (2)].dst_reg);  	   (yyval.dst_reg).CondSwizzle = (yyvsp[(2) - (2)].swiz_mask).swizzle; @@ -3128,7 +3129,7 @@ yyreduce:    case 94:  /* Line 1455 of yacc.c  */ -#line 1048 "program_parse.y" +#line 1049 "program_parse.y"      {  	   const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));  	   if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) { @@ -3154,7 +3155,7 @@ yyreduce:    case 95:  /* Line 1455 of yacc.c  */ -#line 1071 "program_parse.y" +#line 1072 "program_parse.y"      {  	   const int cond = _mesa_parse_cc((yyvsp[(1) - (1)].string));  	   if ((cond == 0) || ((yyvsp[(1) - (1)].string)[2] != '\0')) { @@ -3180,7 +3181,7 @@ yyreduce:    case 102:  /* Line 1455 of yacc.c  */ -#line 1102 "program_parse.y" +#line 1103 "program_parse.y"      {  	   struct asm_symbol *const s =  	      declare_variable(state, (yyvsp[(2) - (4)].string), at_attrib, & (yylsp[(2) - (4)])); @@ -3202,7 +3203,7 @@ yyreduce:    case 103:  /* Line 1455 of yacc.c  */ -#line 1121 "program_parse.y" +#line 1122 "program_parse.y"      {  	   (yyval.attrib) = (yyvsp[(2) - (2)].attrib);  	;} @@ -3211,7 +3212,7 @@ yyreduce:    case 104:  /* Line 1455 of yacc.c  */ -#line 1125 "program_parse.y" +#line 1126 "program_parse.y"      {  	   (yyval.attrib) = (yyvsp[(2) - (2)].attrib);  	;} @@ -3220,7 +3221,7 @@ yyreduce:    case 105:  /* Line 1455 of yacc.c  */ -#line 1131 "program_parse.y" +#line 1132 "program_parse.y"      {  	   (yyval.attrib) = VERT_ATTRIB_POS;  	;} @@ -3229,7 +3230,7 @@ yyreduce:    case 106:  /* Line 1455 of yacc.c  */ -#line 1135 "program_parse.y" +#line 1136 "program_parse.y"      {  	   (yyval.attrib) = VERT_ATTRIB_WEIGHT;  	;} @@ -3238,7 +3239,7 @@ yyreduce:    case 107:  /* Line 1455 of yacc.c  */ -#line 1139 "program_parse.y" +#line 1140 "program_parse.y"      {  	   (yyval.attrib) = VERT_ATTRIB_NORMAL;  	;} @@ -3247,7 +3248,7 @@ yyreduce:    case 108:  /* Line 1455 of yacc.c  */ -#line 1143 "program_parse.y" +#line 1144 "program_parse.y"      {  	   if (!state->ctx->Extensions.EXT_secondary_color) {  	      yyerror(& (yylsp[(2) - (2)]), state, "GL_EXT_secondary_color not supported"); @@ -3261,7 +3262,7 @@ yyreduce:    case 109:  /* Line 1455 of yacc.c  */ -#line 1152 "program_parse.y" +#line 1153 "program_parse.y"      {  	   if (!state->ctx->Extensions.EXT_fog_coord) {  	      yyerror(& (yylsp[(1) - (1)]), state, "GL_EXT_fog_coord not supported"); @@ -3275,7 +3276,7 @@ yyreduce:    case 110:  /* Line 1455 of yacc.c  */ -#line 1161 "program_parse.y" +#line 1162 "program_parse.y"      {  	   (yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);  	;} @@ -3284,7 +3285,7 @@ yyreduce:    case 111:  /* Line 1455 of yacc.c  */ -#line 1165 "program_parse.y" +#line 1166 "program_parse.y"      {  	   yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");  	   YYERROR; @@ -3294,7 +3295,7 @@ yyreduce:    case 112:  /* Line 1455 of yacc.c  */ -#line 1170 "program_parse.y" +#line 1171 "program_parse.y"      {  	   (yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);  	;} @@ -3303,7 +3304,7 @@ yyreduce:    case 113:  /* Line 1455 of yacc.c  */ -#line 1176 "program_parse.y" +#line 1177 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxAttribs) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid vertex attribute reference"); @@ -3317,7 +3318,7 @@ yyreduce:    case 117:  /* Line 1455 of yacc.c  */ -#line 1190 "program_parse.y" +#line 1191 "program_parse.y"      {  	   (yyval.attrib) = FRAG_ATTRIB_WPOS;  	;} @@ -3326,7 +3327,7 @@ yyreduce:    case 118:  /* Line 1455 of yacc.c  */ -#line 1194 "program_parse.y" +#line 1195 "program_parse.y"      {  	   (yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);  	;} @@ -3335,7 +3336,7 @@ yyreduce:    case 119:  /* Line 1455 of yacc.c  */ -#line 1198 "program_parse.y" +#line 1199 "program_parse.y"      {  	   (yyval.attrib) = FRAG_ATTRIB_FOGC;  	;} @@ -3344,7 +3345,7 @@ yyreduce:    case 120:  /* Line 1455 of yacc.c  */ -#line 1202 "program_parse.y" +#line 1203 "program_parse.y"      {  	   (yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);  	;} @@ -3353,7 +3354,7 @@ yyreduce:    case 123:  /* Line 1455 of yacc.c  */ -#line 1210 "program_parse.y" +#line 1211 "program_parse.y"      {  	   struct asm_symbol *const s =  	      declare_variable(state, (yyvsp[(2) - (3)].string), at_param, & (yylsp[(2) - (3)])); @@ -3374,7 +3375,7 @@ yyreduce:    case 124:  /* Line 1455 of yacc.c  */ -#line 1228 "program_parse.y" +#line 1229 "program_parse.y"      {  	   if (((yyvsp[(4) - (6)].integer) != 0) && ((unsigned) (yyvsp[(4) - (6)].integer) != (yyvsp[(6) - (6)].temp_sym).param_binding_length)) {  	      free((yyvsp[(2) - (6)].string)); @@ -3402,7 +3403,7 @@ yyreduce:    case 125:  /* Line 1455 of yacc.c  */ -#line 1253 "program_parse.y" +#line 1254 "program_parse.y"      {  	   (yyval.integer) = 0;  	;} @@ -3411,7 +3412,7 @@ yyreduce:    case 126:  /* Line 1455 of yacc.c  */ -#line 1257 "program_parse.y" +#line 1258 "program_parse.y"      {  	   if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size"); @@ -3425,7 +3426,7 @@ yyreduce:    case 127:  /* Line 1455 of yacc.c  */ -#line 1268 "program_parse.y" +#line 1269 "program_parse.y"      {  	   (yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);  	;} @@ -3434,7 +3435,7 @@ yyreduce:    case 128:  /* Line 1455 of yacc.c  */ -#line 1274 "program_parse.y" +#line 1275 "program_parse.y"      {  	   (yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);  	;} @@ -3443,7 +3444,7 @@ yyreduce:    case 130:  /* Line 1455 of yacc.c  */ -#line 1281 "program_parse.y" +#line 1282 "program_parse.y"      {  	   (yyvsp[(1) - (3)].temp_sym).param_binding_length += (yyvsp[(3) - (3)].temp_sym).param_binding_length;  	   (yyval.temp_sym) = (yyvsp[(1) - (3)].temp_sym); @@ -3453,7 +3454,7 @@ yyreduce:    case 131:  /* Line 1455 of yacc.c  */ -#line 1288 "program_parse.y" +#line 1289 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; @@ -3464,7 +3465,7 @@ yyreduce:    case 132:  /* Line 1455 of yacc.c  */ -#line 1294 "program_parse.y" +#line 1295 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; @@ -3475,18 +3476,18 @@ yyreduce:    case 133:  /* Line 1455 of yacc.c  */ -#line 1300 "program_parse.y" +#line 1301 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector)); +	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE);  	;}      break;    case 134:  /* Line 1455 of yacc.c  */ -#line 1308 "program_parse.y" +#line 1309 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; @@ -3497,7 +3498,7 @@ yyreduce:    case 135:  /* Line 1455 of yacc.c  */ -#line 1314 "program_parse.y" +#line 1315 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; @@ -3508,18 +3509,18 @@ yyreduce:    case 136:  /* Line 1455 of yacc.c  */ -#line 1320 "program_parse.y" +#line 1321 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector)); +	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_TRUE);  	;}      break;    case 137:  /* Line 1455 of yacc.c  */ -#line 1328 "program_parse.y" +#line 1329 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; @@ -3530,7 +3531,7 @@ yyreduce:    case 138:  /* Line 1455 of yacc.c  */ -#line 1334 "program_parse.y" +#line 1335 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; @@ -3541,109 +3542,109 @@ yyreduce:    case 139:  /* Line 1455 of yacc.c  */ -#line 1340 "program_parse.y" +#line 1341 "program_parse.y"      {  	   memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));  	   (yyval.temp_sym).param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector)); +	   initialize_symbol_from_const(state->prog, & (yyval.temp_sym), & (yyvsp[(1) - (1)].vector), GL_FALSE);  	;}      break;    case 140:  /* Line 1455 of yacc.c  */ -#line 1347 "program_parse.y" +#line 1348 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(1) - (1)].state), sizeof((yyval.state))); ;}      break;    case 141:  /* Line 1455 of yacc.c  */ -#line 1348 "program_parse.y" +#line 1349 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 142:  /* Line 1455 of yacc.c  */ -#line 1351 "program_parse.y" +#line 1352 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 143:  /* Line 1455 of yacc.c  */ -#line 1352 "program_parse.y" +#line 1353 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 144:  /* Line 1455 of yacc.c  */ -#line 1353 "program_parse.y" +#line 1354 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 145:  /* Line 1455 of yacc.c  */ -#line 1354 "program_parse.y" +#line 1355 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 146:  /* Line 1455 of yacc.c  */ -#line 1355 "program_parse.y" +#line 1356 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 147:  /* Line 1455 of yacc.c  */ -#line 1356 "program_parse.y" +#line 1357 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 148:  /* Line 1455 of yacc.c  */ -#line 1357 "program_parse.y" +#line 1358 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 149:  /* Line 1455 of yacc.c  */ -#line 1358 "program_parse.y" +#line 1359 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 150:  /* Line 1455 of yacc.c  */ -#line 1359 "program_parse.y" +#line 1360 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 151:  /* Line 1455 of yacc.c  */ -#line 1360 "program_parse.y" +#line 1361 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 152:  /* Line 1455 of yacc.c  */ -#line 1361 "program_parse.y" +#line 1362 "program_parse.y"      { memcpy((yyval.state), (yyvsp[(2) - (2)].state), sizeof((yyval.state))); ;}      break;    case 153:  /* Line 1455 of yacc.c  */ -#line 1365 "program_parse.y" +#line 1366 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_MATERIAL; @@ -3655,7 +3656,7 @@ yyreduce:    case 154:  /* Line 1455 of yacc.c  */ -#line 1374 "program_parse.y" +#line 1375 "program_parse.y"      {  	   (yyval.integer) = (yyvsp[(1) - (1)].integer);  	;} @@ -3664,7 +3665,7 @@ yyreduce:    case 155:  /* Line 1455 of yacc.c  */ -#line 1378 "program_parse.y" +#line 1379 "program_parse.y"      {  	   (yyval.integer) = STATE_EMISSION;  	;} @@ -3673,7 +3674,7 @@ yyreduce:    case 156:  /* Line 1455 of yacc.c  */ -#line 1382 "program_parse.y" +#line 1383 "program_parse.y"      {  	   (yyval.integer) = STATE_SHININESS;  	;} @@ -3682,7 +3683,7 @@ yyreduce:    case 157:  /* Line 1455 of yacc.c  */ -#line 1388 "program_parse.y" +#line 1389 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_LIGHT; @@ -3694,7 +3695,7 @@ yyreduce:    case 158:  /* Line 1455 of yacc.c  */ -#line 1397 "program_parse.y" +#line 1398 "program_parse.y"      {  	   (yyval.integer) = (yyvsp[(1) - (1)].integer);  	;} @@ -3703,7 +3704,7 @@ yyreduce:    case 159:  /* Line 1455 of yacc.c  */ -#line 1401 "program_parse.y" +#line 1402 "program_parse.y"      {  	   (yyval.integer) = STATE_POSITION;  	;} @@ -3712,7 +3713,7 @@ yyreduce:    case 160:  /* Line 1455 of yacc.c  */ -#line 1405 "program_parse.y" +#line 1406 "program_parse.y"      {  	   if (!state->ctx->Extensions.EXT_point_parameters) {  	      yyerror(& (yylsp[(1) - (1)]), state, "GL_ARB_point_parameters not supported"); @@ -3726,7 +3727,7 @@ yyreduce:    case 161:  /* Line 1455 of yacc.c  */ -#line 1414 "program_parse.y" +#line 1415 "program_parse.y"      {  	   (yyval.integer) = (yyvsp[(2) - (2)].integer);  	;} @@ -3735,7 +3736,7 @@ yyreduce:    case 162:  /* Line 1455 of yacc.c  */ -#line 1418 "program_parse.y" +#line 1419 "program_parse.y"      {  	   (yyval.integer) = STATE_HALF_VECTOR;  	;} @@ -3744,7 +3745,7 @@ yyreduce:    case 163:  /* Line 1455 of yacc.c  */ -#line 1424 "program_parse.y" +#line 1425 "program_parse.y"      {  	   (yyval.integer) = STATE_SPOT_DIRECTION;  	;} @@ -3753,7 +3754,7 @@ yyreduce:    case 164:  /* Line 1455 of yacc.c  */ -#line 1430 "program_parse.y" +#line 1431 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];  	   (yyval.state)[1] = (yyvsp[(2) - (2)].state)[1]; @@ -3763,7 +3764,7 @@ yyreduce:    case 165:  /* Line 1455 of yacc.c  */ -#line 1437 "program_parse.y" +#line 1438 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT; @@ -3773,7 +3774,7 @@ yyreduce:    case 166:  /* Line 1455 of yacc.c  */ -#line 1442 "program_parse.y" +#line 1443 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR; @@ -3784,7 +3785,7 @@ yyreduce:    case 167:  /* Line 1455 of yacc.c  */ -#line 1450 "program_parse.y" +#line 1451 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_LIGHTPROD; @@ -3797,7 +3798,7 @@ yyreduce:    case 169:  /* Line 1455 of yacc.c  */ -#line 1462 "program_parse.y" +#line 1463 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = (yyvsp[(3) - (3)].integer); @@ -3808,7 +3809,7 @@ yyreduce:    case 170:  /* Line 1455 of yacc.c  */ -#line 1470 "program_parse.y" +#line 1471 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXENV_COLOR;  	;} @@ -3817,7 +3818,7 @@ yyreduce:    case 171:  /* Line 1455 of yacc.c  */ -#line 1476 "program_parse.y" +#line 1477 "program_parse.y"      {  	   (yyval.integer) = STATE_AMBIENT;  	;} @@ -3826,7 +3827,7 @@ yyreduce:    case 172:  /* Line 1455 of yacc.c  */ -#line 1480 "program_parse.y" +#line 1481 "program_parse.y"      {  	   (yyval.integer) = STATE_DIFFUSE;  	;} @@ -3835,7 +3836,7 @@ yyreduce:    case 173:  /* Line 1455 of yacc.c  */ -#line 1484 "program_parse.y" +#line 1485 "program_parse.y"      {  	   (yyval.integer) = STATE_SPECULAR;  	;} @@ -3844,7 +3845,7 @@ yyreduce:    case 174:  /* Line 1455 of yacc.c  */ -#line 1490 "program_parse.y" +#line 1491 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector"); @@ -3858,7 +3859,7 @@ yyreduce:    case 175:  /* Line 1455 of yacc.c  */ -#line 1501 "program_parse.y" +#line 1502 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_TEXGEN; @@ -3870,7 +3871,7 @@ yyreduce:    case 176:  /* Line 1455 of yacc.c  */ -#line 1510 "program_parse.y" +#line 1511 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXGEN_EYE_S;  	;} @@ -3879,7 +3880,7 @@ yyreduce:    case 177:  /* Line 1455 of yacc.c  */ -#line 1514 "program_parse.y" +#line 1515 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXGEN_OBJECT_S;  	;} @@ -3888,7 +3889,7 @@ yyreduce:    case 178:  /* Line 1455 of yacc.c  */ -#line 1519 "program_parse.y" +#line 1520 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;  	;} @@ -3897,7 +3898,7 @@ yyreduce:    case 179:  /* Line 1455 of yacc.c  */ -#line 1523 "program_parse.y" +#line 1524 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;  	;} @@ -3906,7 +3907,7 @@ yyreduce:    case 180:  /* Line 1455 of yacc.c  */ -#line 1527 "program_parse.y" +#line 1528 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;  	;} @@ -3915,7 +3916,7 @@ yyreduce:    case 181:  /* Line 1455 of yacc.c  */ -#line 1531 "program_parse.y" +#line 1532 "program_parse.y"      {  	   (yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;  	;} @@ -3924,7 +3925,7 @@ yyreduce:    case 182:  /* Line 1455 of yacc.c  */ -#line 1537 "program_parse.y" +#line 1538 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = (yyvsp[(2) - (2)].integer); @@ -3934,7 +3935,7 @@ yyreduce:    case 183:  /* Line 1455 of yacc.c  */ -#line 1544 "program_parse.y" +#line 1545 "program_parse.y"      {  	   (yyval.integer) = STATE_FOG_COLOR;  	;} @@ -3943,7 +3944,7 @@ yyreduce:    case 184:  /* Line 1455 of yacc.c  */ -#line 1548 "program_parse.y" +#line 1549 "program_parse.y"      {  	   (yyval.integer) = STATE_FOG_PARAMS;  	;} @@ -3952,7 +3953,7 @@ yyreduce:    case 185:  /* Line 1455 of yacc.c  */ -#line 1554 "program_parse.y" +#line 1555 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_CLIPPLANE; @@ -3963,7 +3964,7 @@ yyreduce:    case 186:  /* Line 1455 of yacc.c  */ -#line 1562 "program_parse.y" +#line 1563 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxClipPlanes) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid clip plane selector"); @@ -3977,7 +3978,7 @@ yyreduce:    case 187:  /* Line 1455 of yacc.c  */ -#line 1573 "program_parse.y" +#line 1574 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = (yyvsp[(2) - (2)].integer); @@ -3987,7 +3988,7 @@ yyreduce:    case 188:  /* Line 1455 of yacc.c  */ -#line 1580 "program_parse.y" +#line 1581 "program_parse.y"      {  	   (yyval.integer) = STATE_POINT_SIZE;  	;} @@ -3996,7 +3997,7 @@ yyreduce:    case 189:  /* Line 1455 of yacc.c  */ -#line 1584 "program_parse.y" +#line 1585 "program_parse.y"      {  	   (yyval.integer) = STATE_POINT_ATTENUATION;  	;} @@ -4005,7 +4006,7 @@ yyreduce:    case 190:  /* Line 1455 of yacc.c  */ -#line 1590 "program_parse.y" +#line 1591 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];  	   (yyval.state)[1] = (yyvsp[(1) - (5)].state)[1]; @@ -4018,7 +4019,7 @@ yyreduce:    case 191:  /* Line 1455 of yacc.c  */ -#line 1600 "program_parse.y" +#line 1601 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];  	   (yyval.state)[1] = (yyvsp[(1) - (2)].state)[1]; @@ -4031,7 +4032,7 @@ yyreduce:    case 192:  /* Line 1455 of yacc.c  */ -#line 1610 "program_parse.y" +#line 1611 "program_parse.y"      {  	   (yyval.state)[2] = 0;  	   (yyval.state)[3] = 3; @@ -4041,7 +4042,7 @@ yyreduce:    case 193:  /* Line 1455 of yacc.c  */ -#line 1615 "program_parse.y" +#line 1616 "program_parse.y"      {  	   /* It seems logical that the matrix row range specifier would have  	    * to specify a range or more than one row (i.e., $5 > $3). @@ -4062,7 +4063,7 @@ yyreduce:    case 194:  /* Line 1455 of yacc.c  */ -#line 1633 "program_parse.y" +#line 1634 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];  	   (yyval.state)[1] = (yyvsp[(2) - (3)].state)[1]; @@ -4073,7 +4074,7 @@ yyreduce:    case 195:  /* Line 1455 of yacc.c  */ -#line 1641 "program_parse.y" +#line 1642 "program_parse.y"      {  	   (yyval.integer) = 0;  	;} @@ -4082,7 +4083,7 @@ yyreduce:    case 196:  /* Line 1455 of yacc.c  */ -#line 1645 "program_parse.y" +#line 1646 "program_parse.y"      {  	   (yyval.integer) = (yyvsp[(1) - (1)].integer);  	;} @@ -4091,7 +4092,7 @@ yyreduce:    case 197:  /* Line 1455 of yacc.c  */ -#line 1651 "program_parse.y" +#line 1652 "program_parse.y"      {  	   (yyval.integer) = STATE_MATRIX_INVERSE;  	;} @@ -4100,7 +4101,7 @@ yyreduce:    case 198:  /* Line 1455 of yacc.c  */ -#line 1655 "program_parse.y" +#line 1656 "program_parse.y"      {  	   (yyval.integer) = STATE_MATRIX_TRANSPOSE;  	;} @@ -4109,7 +4110,7 @@ yyreduce:    case 199:  /* Line 1455 of yacc.c  */ -#line 1659 "program_parse.y" +#line 1660 "program_parse.y"      {  	   (yyval.integer) = STATE_MATRIX_INVTRANS;  	;} @@ -4118,7 +4119,7 @@ yyreduce:    case 200:  /* Line 1455 of yacc.c  */ -#line 1665 "program_parse.y" +#line 1666 "program_parse.y"      {  	   if ((yyvsp[(1) - (1)].integer) > 3) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference"); @@ -4132,7 +4133,7 @@ yyreduce:    case 201:  /* Line 1455 of yacc.c  */ -#line 1676 "program_parse.y" +#line 1677 "program_parse.y"      {  	   (yyval.state)[0] = STATE_MODELVIEW_MATRIX;  	   (yyval.state)[1] = (yyvsp[(2) - (2)].integer); @@ -4142,7 +4143,7 @@ yyreduce:    case 202:  /* Line 1455 of yacc.c  */ -#line 1681 "program_parse.y" +#line 1682 "program_parse.y"      {  	   (yyval.state)[0] = STATE_PROJECTION_MATRIX;  	   (yyval.state)[1] = 0; @@ -4152,7 +4153,7 @@ yyreduce:    case 203:  /* Line 1455 of yacc.c  */ -#line 1686 "program_parse.y" +#line 1687 "program_parse.y"      {  	   (yyval.state)[0] = STATE_MVP_MATRIX;  	   (yyval.state)[1] = 0; @@ -4162,7 +4163,7 @@ yyreduce:    case 204:  /* Line 1455 of yacc.c  */ -#line 1691 "program_parse.y" +#line 1692 "program_parse.y"      {  	   (yyval.state)[0] = STATE_TEXTURE_MATRIX;  	   (yyval.state)[1] = (yyvsp[(2) - (2)].integer); @@ -4172,7 +4173,7 @@ yyreduce:    case 205:  /* Line 1455 of yacc.c  */ -#line 1696 "program_parse.y" +#line 1697 "program_parse.y"      {  	   yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");  	   YYERROR; @@ -4182,7 +4183,7 @@ yyreduce:    case 206:  /* Line 1455 of yacc.c  */ -#line 1701 "program_parse.y" +#line 1702 "program_parse.y"      {  	   (yyval.state)[0] = STATE_PROGRAM_MATRIX;  	   (yyval.state)[1] = (yyvsp[(3) - (4)].integer); @@ -4192,7 +4193,7 @@ yyreduce:    case 207:  /* Line 1455 of yacc.c  */ -#line 1708 "program_parse.y" +#line 1709 "program_parse.y"      {  	   (yyval.integer) = 0;  	;} @@ -4201,7 +4202,7 @@ yyreduce:    case 208:  /* Line 1455 of yacc.c  */ -#line 1712 "program_parse.y" +#line 1713 "program_parse.y"      {  	   (yyval.integer) = (yyvsp[(2) - (3)].integer);  	;} @@ -4210,7 +4211,7 @@ yyreduce:    case 209:  /* Line 1455 of yacc.c  */ -#line 1717 "program_parse.y" +#line 1718 "program_parse.y"      {  	   /* Since GL_ARB_vertex_blend isn't supported, only modelview matrix  	    * zero is valid. @@ -4227,7 +4228,7 @@ yyreduce:    case 210:  /* Line 1455 of yacc.c  */ -#line 1730 "program_parse.y" +#line 1731 "program_parse.y"      {  	   /* Since GL_ARB_matrix_palette isn't supported, just let any value  	    * through here.  The error will be generated later. @@ -4239,7 +4240,7 @@ yyreduce:    case 211:  /* Line 1455 of yacc.c  */ -#line 1738 "program_parse.y" +#line 1739 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxProgramMatrices) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid program matrix selector"); @@ -4253,7 +4254,7 @@ yyreduce:    case 212:  /* Line 1455 of yacc.c  */ -#line 1749 "program_parse.y" +#line 1750 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = STATE_DEPTH_RANGE; @@ -4263,7 +4264,7 @@ yyreduce:    case 217:  /* Line 1455 of yacc.c  */ -#line 1761 "program_parse.y" +#line 1762 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = state->state_param_enum; @@ -4276,7 +4277,7 @@ yyreduce:    case 218:  /* Line 1455 of yacc.c  */ -#line 1771 "program_parse.y" +#line 1772 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(1) - (1)].integer);  	   (yyval.state)[1] = (yyvsp[(1) - (1)].integer); @@ -4286,7 +4287,7 @@ yyreduce:    case 219:  /* Line 1455 of yacc.c  */ -#line 1776 "program_parse.y" +#line 1777 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(1) - (3)].integer);  	   (yyval.state)[1] = (yyvsp[(3) - (3)].integer); @@ -4296,7 +4297,7 @@ yyreduce:    case 220:  /* Line 1455 of yacc.c  */ -#line 1783 "program_parse.y" +#line 1784 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = state->state_param_enum; @@ -4309,7 +4310,7 @@ yyreduce:    case 221:  /* Line 1455 of yacc.c  */ -#line 1793 "program_parse.y" +#line 1794 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = state->state_param_enum; @@ -4322,7 +4323,7 @@ yyreduce:    case 222:  /* Line 1455 of yacc.c  */ -#line 1802 "program_parse.y" +#line 1803 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(1) - (1)].integer);  	   (yyval.state)[1] = (yyvsp[(1) - (1)].integer); @@ -4332,7 +4333,7 @@ yyreduce:    case 223:  /* Line 1455 of yacc.c  */ -#line 1807 "program_parse.y" +#line 1808 "program_parse.y"      {  	   (yyval.state)[0] = (yyvsp[(1) - (3)].integer);  	   (yyval.state)[1] = (yyvsp[(3) - (3)].integer); @@ -4342,7 +4343,7 @@ yyreduce:    case 224:  /* Line 1455 of yacc.c  */ -#line 1814 "program_parse.y" +#line 1815 "program_parse.y"      {  	   memset((yyval.state), 0, sizeof((yyval.state)));  	   (yyval.state)[0] = state->state_param_enum; @@ -4355,7 +4356,7 @@ yyreduce:    case 225:  /* Line 1455 of yacc.c  */ -#line 1824 "program_parse.y" +#line 1825 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxEnvParams) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid environment parameter reference"); @@ -4368,7 +4369,7 @@ yyreduce:    case 226:  /* Line 1455 of yacc.c  */ -#line 1834 "program_parse.y" +#line 1835 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxLocalParams) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid local parameter reference"); @@ -4381,7 +4382,7 @@ yyreduce:    case 231:  /* Line 1455 of yacc.c  */ -#line 1849 "program_parse.y" +#line 1850 "program_parse.y"      {  	   (yyval.vector).count = 4;  	   (yyval.vector).data[0] = (yyvsp[(1) - (1)].real); @@ -4394,7 +4395,7 @@ yyreduce:    case 232:  /* Line 1455 of yacc.c  */ -#line 1859 "program_parse.y" +#line 1860 "program_parse.y"      {  	   (yyval.vector).count = 1;  	   (yyval.vector).data[0] = (yyvsp[(1) - (1)].real); @@ -4407,7 +4408,7 @@ yyreduce:    case 233:  /* Line 1455 of yacc.c  */ -#line 1867 "program_parse.y" +#line 1868 "program_parse.y"      {  	   (yyval.vector).count = 1;  	   (yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer); @@ -4420,7 +4421,7 @@ yyreduce:    case 234:  /* Line 1455 of yacc.c  */ -#line 1877 "program_parse.y" +#line 1878 "program_parse.y"      {  	   (yyval.vector).count = 4;  	   (yyval.vector).data[0] = (yyvsp[(2) - (3)].real); @@ -4433,7 +4434,7 @@ yyreduce:    case 235:  /* Line 1455 of yacc.c  */ -#line 1885 "program_parse.y" +#line 1886 "program_parse.y"      {  	   (yyval.vector).count = 4;  	   (yyval.vector).data[0] = (yyvsp[(2) - (5)].real); @@ -4446,7 +4447,7 @@ yyreduce:    case 236:  /* Line 1455 of yacc.c  */ -#line 1894 "program_parse.y" +#line 1895 "program_parse.y"      {  	   (yyval.vector).count = 4;  	   (yyval.vector).data[0] = (yyvsp[(2) - (7)].real); @@ -4459,7 +4460,7 @@ yyreduce:    case 237:  /* Line 1455 of yacc.c  */ -#line 1903 "program_parse.y" +#line 1904 "program_parse.y"      {  	   (yyval.vector).count = 4;  	   (yyval.vector).data[0] = (yyvsp[(2) - (9)].real); @@ -4472,7 +4473,7 @@ yyreduce:    case 238:  /* Line 1455 of yacc.c  */ -#line 1913 "program_parse.y" +#line 1914 "program_parse.y"      {  	   (yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);  	;} @@ -4481,7 +4482,7 @@ yyreduce:    case 239:  /* Line 1455 of yacc.c  */ -#line 1917 "program_parse.y" +#line 1918 "program_parse.y"      {  	   (yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));  	;} @@ -4490,35 +4491,35 @@ yyreduce:    case 240:  /* Line 1455 of yacc.c  */ -#line 1922 "program_parse.y" +#line 1923 "program_parse.y"      { (yyval.negate) = FALSE; ;}      break;    case 241:  /* Line 1455 of yacc.c  */ -#line 1923 "program_parse.y" +#line 1924 "program_parse.y"      { (yyval.negate) = TRUE;  ;}      break;    case 242:  /* Line 1455 of yacc.c  */ -#line 1924 "program_parse.y" +#line 1925 "program_parse.y"      { (yyval.negate) = FALSE; ;}      break;    case 243:  /* Line 1455 of yacc.c  */ -#line 1927 "program_parse.y" +#line 1928 "program_parse.y"      { (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}      break;    case 245:  /* Line 1455 of yacc.c  */ -#line 1931 "program_parse.y" +#line 1932 "program_parse.y"      {  	   /* NV_fragment_program_option defines the size qualifiers in a  	    * fairly broken way.  "SHORT" or "LONG" can optionally be used @@ -4557,7 +4558,7 @@ yyreduce:    case 246:  /* Line 1455 of yacc.c  */ -#line 1965 "program_parse.y" +#line 1966 "program_parse.y"      {  	;}      break; @@ -4565,14 +4566,14 @@ yyreduce:    case 247:  /* Line 1455 of yacc.c  */ -#line 1969 "program_parse.y" +#line 1970 "program_parse.y"      { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}      break;    case 249:  /* Line 1455 of yacc.c  */ -#line 1973 "program_parse.y" +#line 1974 "program_parse.y"      {  	   if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {  	      free((yyvsp[(3) - (3)].string)); @@ -4584,7 +4585,7 @@ yyreduce:    case 250:  /* Line 1455 of yacc.c  */ -#line 1980 "program_parse.y" +#line 1981 "program_parse.y"      {  	   if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {  	      free((yyvsp[(1) - (1)].string)); @@ -4596,7 +4597,7 @@ yyreduce:    case 251:  /* Line 1455 of yacc.c  */ -#line 1989 "program_parse.y" +#line 1990 "program_parse.y"      {  	   struct asm_symbol *const s =  	      declare_variable(state, (yyvsp[(3) - (5)].string), at_output, & (yylsp[(3) - (5)])); @@ -4613,7 +4614,7 @@ yyreduce:    case 252:  /* Line 1455 of yacc.c  */ -#line 2003 "program_parse.y" +#line 2004 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.result) = VERT_RESULT_HPOS; @@ -4627,7 +4628,7 @@ yyreduce:    case 253:  /* Line 1455 of yacc.c  */ -#line 2012 "program_parse.y" +#line 2013 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.result) = VERT_RESULT_FOGC; @@ -4641,7 +4642,7 @@ yyreduce:    case 254:  /* Line 1455 of yacc.c  */ -#line 2021 "program_parse.y" +#line 2022 "program_parse.y"      {  	   (yyval.result) = (yyvsp[(2) - (2)].result);  	;} @@ -4650,7 +4651,7 @@ yyreduce:    case 255:  /* Line 1455 of yacc.c  */ -#line 2025 "program_parse.y" +#line 2026 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.result) = VERT_RESULT_PSIZ; @@ -4664,7 +4665,7 @@ yyreduce:    case 256:  /* Line 1455 of yacc.c  */ -#line 2034 "program_parse.y" +#line 2035 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer); @@ -4678,7 +4679,7 @@ yyreduce:    case 257:  /* Line 1455 of yacc.c  */ -#line 2043 "program_parse.y" +#line 2044 "program_parse.y"      {  	   if (state->mode == ARB_fragment) {  	      (yyval.result) = FRAG_RESULT_DEPTH; @@ -4692,7 +4693,7 @@ yyreduce:    case 258:  /* Line 1455 of yacc.c  */ -#line 2054 "program_parse.y" +#line 2055 "program_parse.y"      {  	   (yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);  	;} @@ -4701,7 +4702,7 @@ yyreduce:    case 259:  /* Line 1455 of yacc.c  */ -#line 2060 "program_parse.y" +#line 2061 "program_parse.y"      {  	   (yyval.integer) = (state->mode == ARB_vertex)  	      ? VERT_RESULT_COL0 @@ -4712,7 +4713,7 @@ yyreduce:    case 260:  /* Line 1455 of yacc.c  */ -#line 2066 "program_parse.y" +#line 2067 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.integer) = VERT_RESULT_COL0; @@ -4726,7 +4727,7 @@ yyreduce:    case 261:  /* Line 1455 of yacc.c  */ -#line 2075 "program_parse.y" +#line 2076 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.integer) = VERT_RESULT_BFC0; @@ -4740,7 +4741,7 @@ yyreduce:    case 262:  /* Line 1455 of yacc.c  */ -#line 2086 "program_parse.y" +#line 2087 "program_parse.y"      {  	   (yyval.integer) = 0;   	;} @@ -4749,7 +4750,7 @@ yyreduce:    case 263:  /* Line 1455 of yacc.c  */ -#line 2090 "program_parse.y" +#line 2091 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.integer) = 0; @@ -4763,7 +4764,7 @@ yyreduce:    case 264:  /* Line 1455 of yacc.c  */ -#line 2099 "program_parse.y" +#line 2100 "program_parse.y"      {  	   if (state->mode == ARB_vertex) {  	      (yyval.integer) = 1; @@ -4777,91 +4778,91 @@ yyreduce:    case 265:  /* Line 1455 of yacc.c  */ -#line 2109 "program_parse.y" +#line 2110 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 266:  /* Line 1455 of yacc.c  */ -#line 2110 "program_parse.y" +#line 2111 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 267:  /* Line 1455 of yacc.c  */ -#line 2111 "program_parse.y" +#line 2112 "program_parse.y"      { (yyval.integer) = 1; ;}      break;    case 268:  /* Line 1455 of yacc.c  */ -#line 2114 "program_parse.y" +#line 2115 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 269:  /* Line 1455 of yacc.c  */ -#line 2115 "program_parse.y" +#line 2116 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 270:  /* Line 1455 of yacc.c  */ -#line 2116 "program_parse.y" +#line 2117 "program_parse.y"      { (yyval.integer) = 1; ;}      break;    case 271:  /* Line 1455 of yacc.c  */ -#line 2119 "program_parse.y" +#line 2120 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 272:  /* Line 1455 of yacc.c  */ -#line 2120 "program_parse.y" +#line 2121 "program_parse.y"      { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}      break;    case 273:  /* Line 1455 of yacc.c  */ -#line 2123 "program_parse.y" +#line 2124 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 274:  /* Line 1455 of yacc.c  */ -#line 2124 "program_parse.y" +#line 2125 "program_parse.y"      { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}      break;    case 275:  /* Line 1455 of yacc.c  */ -#line 2127 "program_parse.y" +#line 2128 "program_parse.y"      { (yyval.integer) = 0; ;}      break;    case 276:  /* Line 1455 of yacc.c  */ -#line 2128 "program_parse.y" +#line 2129 "program_parse.y"      { (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}      break;    case 277:  /* Line 1455 of yacc.c  */ -#line 2132 "program_parse.y" +#line 2133 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector"); @@ -4875,7 +4876,7 @@ yyreduce:    case 278:  /* Line 1455 of yacc.c  */ -#line 2143 "program_parse.y" +#line 2144 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector"); @@ -4889,7 +4890,7 @@ yyreduce:    case 279:  /* Line 1455 of yacc.c  */ -#line 2154 "program_parse.y" +#line 2155 "program_parse.y"      {  	   if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {  	      yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector"); @@ -4903,7 +4904,7 @@ yyreduce:    case 280:  /* Line 1455 of yacc.c  */ -#line 2165 "program_parse.y" +#line 2166 "program_parse.y"      {  	   struct asm_symbol *exist = (struct asm_symbol *)  	      _mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string)); @@ -4932,7 +4933,7 @@ yyreduce:  /* Line 1455 of yacc.c  */ -#line 4936 "program_parse.tab.c" +#line 4937 "program_parse.tab.c"        default: break;      }    YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5151,7 +5152,7 @@ yyreturn:  /* Line 1675 of yacc.c  */ -#line 2194 "program_parse.y" +#line 2195 "program_parse.y"  void @@ -5258,7 +5259,9 @@ set_dst_reg(struct prog_dst_register *r, gl_register_file file, GLint index)     const GLint maxIndex = 1 << INST_INDEX_BITS;     const GLint minIndex = 0;     ASSERT(index >= minIndex); +   (void) minIndex;     ASSERT(index <= maxIndex); +   (void) maxIndex;     ASSERT(file == PROGRAM_TEMPORARY ||  	  file == PROGRAM_ADDRESS ||  	  file == PROGRAM_OUTPUT); @@ -5299,7 +5302,9 @@ set_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,     const GLint minIndex = -(1 << INST_INDEX_BITS);     ASSERT(file < PROGRAM_FILE_MAX);     ASSERT(index >= minIndex); +   (void) minIndex;     ASSERT(index <= maxIndex); +   (void) maxIndex;     memset(r, 0, sizeof(*r));     r->Base.File = file;     r->Base.Index = index; @@ -5472,9 +5477,12 @@ initialize_symbol_from_param(struct gl_program *prog,     assert((state_tokens[1] == STATE_ENV)  	  || (state_tokens[1] == STATE_LOCAL)); +   /* +    * The param type is STATE_VAR.  The program parameter entry will +    * effectively be a pointer into the LOCAL or ENV parameter array. +    */     param_var->type = at_param; -   param_var->param_binding_type = (state_tokens[1] == STATE_ENV) -     ? PROGRAM_ENV_PARAM : PROGRAM_LOCAL_PARAM; +   param_var->param_binding_type = PROGRAM_STATE_VAR;     /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements,      * we need to unroll it and call add_state_reference() for each row @@ -5513,23 +5521,28 @@ initialize_symbol_from_param(struct gl_program *prog,   * \param param_var  returns info about the parameter/constant's location,   *                   binding, type, etc.   * \param vec  the vector/constant to add + * \param allowSwizzle  if true, try to consolidate constants which only differ + *                      by a swizzle.  We don't want to do this when building + *                      arrays of constants that may be indexed indirectly.   * \return index of the constant in the parameter list.   */  int  initialize_symbol_from_const(struct gl_program *prog,  			     struct asm_symbol *param_var,  -			     const struct asm_vector *vec) +			     const struct asm_vector *vec, +                             GLboolean allowSwizzle)  {     unsigned swizzle;     const int idx = _mesa_add_unnamed_constant(prog->Parameters, -                                              vec->data, vec->count, &swizzle); +                                              vec->data, vec->count, +                                              allowSwizzle ? &swizzle : NULL);     param_var->type = at_param;     param_var->param_binding_type = PROGRAM_CONSTANT;     if (param_var->param_binding_begin == ~0U) {        param_var->param_binding_begin = idx; -      param_var->param_binding_swizzle = swizzle; +      param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW;     }     param_var->param_binding_length++; diff --git a/src/mesa/shader/program_parse.tab.h b/src/mesa/shader/program_parse.tab.h index d8712b7268..045241d9e7 100644 --- a/src/mesa/shader/program_parse.tab.h +++ b/src/mesa/shader/program_parse.tab.h @@ -154,7 +154,7 @@ typedef union YYSTYPE  {  /* Line 1676 of yacc.c  */ -#line 125 "program_parse.y" +#line 126 "program_parse.y"     struct asm_instruction *inst;     struct asm_symbol *sym; diff --git a/src/mesa/shader/program_parse.y b/src/mesa/shader/program_parse.y index b40b216d65..5c5d8d7590 100644 --- a/src/mesa/shader/program_parse.y +++ b/src/mesa/shader/program_parse.y @@ -52,7 +52,8 @@ static int initialize_symbol_from_param(struct gl_program *prog,      struct asm_symbol *param_var, const gl_state_index tokens[STATE_LENGTH]);  static int initialize_symbol_from_const(struct gl_program *prog, -    struct asm_symbol *param_var, const struct asm_vector *vec); +    struct asm_symbol *param_var, const struct asm_vector *vec, +    GLboolean allowSwizzle);  static int yyparse(struct asm_parser_state *state); @@ -589,7 +590,7 @@ scalarUse:  srcReg scalarSuffix  	   memset(& temp_sym, 0, sizeof(temp_sym));  	   temp_sym.param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & temp_sym, & $1); +	   initialize_symbol_from_const(state->prog, & temp_sym, & $1, GL_TRUE);  	   set_src_reg_swz(& $$, PROGRAM_CONSTANT,                             temp_sym.param_binding_begin, @@ -1300,7 +1301,7 @@ paramSingleItemDecl: stateSingleItem  	{  	   memset(& $$, 0, sizeof($$));  	   $$.param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & $$, & $1); +	   initialize_symbol_from_const(state->prog, & $$, & $1, GL_TRUE);  	}  	; @@ -1320,7 +1321,7 @@ paramSingleItemUse: stateSingleItem  	{  	   memset(& $$, 0, sizeof($$));  	   $$.param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & $$, & $1); +	   initialize_symbol_from_const(state->prog, & $$, & $1, GL_TRUE);  	}  	; @@ -1340,7 +1341,7 @@ paramMultipleItem: stateMultipleItem  	{  	   memset(& $$, 0, sizeof($$));  	   $$.param_binding_begin = ~0; -	   initialize_symbol_from_const(state->prog, & $$, & $1); +	   initialize_symbol_from_const(state->prog, & $$, & $1, GL_FALSE);  	}  	; @@ -2515,9 +2516,12 @@ initialize_symbol_from_param(struct gl_program *prog,     assert((state_tokens[1] == STATE_ENV)  	  || (state_tokens[1] == STATE_LOCAL)); +   /* +    * The param type is STATE_VAR.  The program parameter entry will +    * effectively be a pointer into the LOCAL or ENV parameter array. +    */     param_var->type = at_param; -   param_var->param_binding_type = (state_tokens[1] == STATE_ENV) -     ? PROGRAM_ENV_PARAM : PROGRAM_LOCAL_PARAM; +   param_var->param_binding_type = PROGRAM_STATE_VAR;     /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements,      * we need to unroll it and call add_state_reference() for each row @@ -2556,23 +2560,28 @@ initialize_symbol_from_param(struct gl_program *prog,   * \param param_var  returns info about the parameter/constant's location,   *                   binding, type, etc.   * \param vec  the vector/constant to add + * \param allowSwizzle  if true, try to consolidate constants which only differ + *                      by a swizzle.  We don't want to do this when building + *                      arrays of constants that may be indexed indirectly.   * \return index of the constant in the parameter list.   */  int  initialize_symbol_from_const(struct gl_program *prog,  			     struct asm_symbol *param_var,  -			     const struct asm_vector *vec) +			     const struct asm_vector *vec, +                             GLboolean allowSwizzle)  {     unsigned swizzle;     const int idx = _mesa_add_unnamed_constant(prog->Parameters, -                                              vec->data, vec->count, &swizzle); +                                              vec->data, vec->count, +                                              allowSwizzle ? &swizzle : NULL);     param_var->type = at_param;     param_var->param_binding_type = PROGRAM_CONSTANT;     if (param_var->param_binding_begin == ~0U) {        param_var->param_binding_begin = idx; -      param_var->param_binding_swizzle = swizzle; +      param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW;     }     param_var->param_binding_length++; diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 5c9be46a77..e788008dfe 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -160,13 +160,14 @@ dst_register( struct st_translate *t,  static struct ureg_src  src_register( struct st_translate *t,                gl_register_file file, -              GLuint index ) +              GLint index )  {     switch( file ) {     case PROGRAM_UNDEFINED:        return ureg_src_undef();     case PROGRAM_TEMPORARY: +      ASSERT(index >= 0);        if (ureg_dst_is_undef(t->temps[index]))           t->temps[index] = ureg_DECL_temporary( t->ureg );        return ureg_src(t->temps[index]); @@ -174,9 +175,15 @@ src_register( struct st_translate *t,     case PROGRAM_STATE_VAR:     case PROGRAM_NAMED_PARAM:     case PROGRAM_ENV_PARAM: +   case PROGRAM_LOCAL_PARAM:     case PROGRAM_UNIFORM: -   case PROGRAM_CONSTANT:       /* ie, immediate */ +      ASSERT(index >= 0);        return t->constants[index]; +   case PROGRAM_CONSTANT:       /* ie, immediate */ +      if (index < 0) +         return ureg_DECL_constant( t->ureg, 0 ); +      else +         return t->constants[index];     case PROGRAM_INPUT:        return t->inputs[t->inputMapping[index]]; @@ -263,9 +270,14 @@ translate_src( struct st_translate *t,     if (SrcReg->Abs)         src = ureg_abs(src); -   if (SrcReg->RelAddr)  +   if (SrcReg->RelAddr) {        src = ureg_src_indirect( src, ureg_src(t->address[0])); -    +      /* If SrcReg->Index was negative, it was set to zero in +       * src_register().  Reassign it now. +       */ +      src.Index = SrcReg->Index; +   } +     return src;  } @@ -859,6 +871,7 @@ st_translate_mesa_program(        for (i = 0; i < program->Parameters->NumParameters; i++) {           switch (program->Parameters->Parameters[i].Type) {           case PROGRAM_ENV_PARAM: +         case PROGRAM_LOCAL_PARAM:           case PROGRAM_STATE_VAR:           case PROGRAM_NAMED_PARAM:           case PROGRAM_UNIFORM:  | 
