summaryrefslogtreecommitdiffstats
path: root/src/mesa/shader/program_parse.tab.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/shader/program_parse.tab.c')
-rw-r--r--src/mesa/shader/program_parse.tab.c678
1 files changed, 371 insertions, 307 deletions
diff --git a/src/mesa/shader/program_parse.tab.c b/src/mesa/shader/program_parse.tab.c
index e57c83ea65f..b12dcee9dfa 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);
@@ -145,6 +146,9 @@ static void init_src_reg(struct asm_src_register *r);
static void set_src_reg(struct asm_src_register *r,
gl_register_file file, GLint index);
+static void set_src_reg_swz(struct asm_src_register *r,
+ gl_register_file file, GLint index, GLuint swizzle);
+
static void asm_instruction_set_operands(struct asm_instruction *inst,
const struct prog_dst_register *dst, const struct asm_src_register *src0,
const struct asm_src_register *src1, const struct asm_src_register *src2);
@@ -185,7 +189,7 @@ static struct asm_instruction *asm_instruction_copy_ctor(
/* Line 189 of yacc.c */
-#line 189 "program_parse.tab.c"
+#line 193 "program_parse.tab.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -327,7 +331,7 @@ typedef union YYSTYPE
{
/* Line 214 of yacc.c */
-#line 122 "program_parse.y"
+#line 126 "program_parse.y"
struct asm_instruction *inst;
struct asm_symbol *sym;
@@ -356,7 +360,7 @@ typedef union YYSTYPE
/* Line 214 of yacc.c */
-#line 360 "program_parse.tab.c"
+#line 364 "program_parse.tab.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -380,14 +384,14 @@ typedef struct YYLTYPE
/* Copy the second part of user declarations. */
/* Line 264 of yacc.c */
-#line 267 "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 391 "program_parse.tab.c"
+#line 395 "program_parse.tab.c"
#ifdef short
# undef short
@@ -788,35 +792,35 @@ static const yytype_int16 yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 274, 274, 277, 285, 297, 298, 301, 323, 324,
- 327, 342, 345, 350, 357, 358, 359, 360, 361, 362,
- 363, 366, 367, 368, 371, 377, 383, 389, 396, 402,
- 409, 453, 458, 468, 512, 518, 519, 520, 521, 522,
- 523, 524, 525, 526, 527, 528, 529, 532, 544, 552,
- 569, 576, 593, 604, 624, 649, 656, 689, 696, 711,
- 761, 800, 809, 830, 839, 843, 870, 887, 887, 889,
- 896, 908, 909, 910, 913, 927, 941, 959, 970, 982,
- 984, 985, 986, 987, 990, 990, 990, 990, 991, 994,
- 998, 1003, 1010, 1017, 1024, 1047, 1070, 1071, 1072, 1073,
- 1074, 1075, 1078, 1096, 1100, 1106, 1110, 1114, 1118, 1127,
- 1136, 1140, 1145, 1151, 1162, 1162, 1163, 1165, 1169, 1173,
- 1177, 1183, 1183, 1185, 1201, 1224, 1227, 1238, 1244, 1250,
- 1251, 1258, 1264, 1270, 1278, 1284, 1290, 1298, 1304, 1310,
- 1318, 1319, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329,
- 1330, 1331, 1332, 1335, 1344, 1348, 1352, 1358, 1367, 1371,
- 1375, 1384, 1388, 1394, 1400, 1407, 1412, 1420, 1430, 1432,
- 1440, 1446, 1450, 1454, 1460, 1471, 1480, 1484, 1489, 1493,
- 1497, 1501, 1507, 1514, 1518, 1524, 1532, 1543, 1550, 1554,
- 1560, 1570, 1581, 1585, 1603, 1612, 1615, 1621, 1625, 1629,
- 1635, 1646, 1651, 1656, 1661, 1666, 1671, 1679, 1682, 1687,
- 1700, 1708, 1719, 1727, 1727, 1729, 1729, 1731, 1741, 1746,
- 1753, 1763, 1772, 1777, 1784, 1794, 1804, 1816, 1816, 1817,
- 1817, 1819, 1829, 1837, 1847, 1855, 1863, 1872, 1883, 1887,
- 1893, 1894, 1895, 1898, 1898, 1901, 1936, 1940, 1940, 1943,
- 1949, 1957, 1970, 1979, 1988, 1992, 2001, 2010, 2021, 2028,
- 2033, 2042, 2054, 2057, 2066, 2077, 2078, 2079, 2082, 2083,
- 2084, 2087, 2088, 2091, 2092, 2095, 2096, 2099, 2110, 2121,
- 2132, 2154, 2155
+ 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
@@ -2125,7 +2129,7 @@ yyreduce:
case 3:
/* Line 1455 of yacc.c */
-#line 278 "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");
@@ -2138,7 +2142,7 @@ yyreduce:
case 4:
/* Line 1455 of yacc.c */
-#line 286 "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");
@@ -2153,7 +2157,7 @@ yyreduce:
case 7:
/* Line 1455 of yacc.c */
-#line 302 "program_parse.y"
+#line 306 "program_parse.y"
{
int valid = 0;
@@ -2164,6 +2168,8 @@ yyreduce:
}
+ free((yyvsp[(2) - (3)].string));
+
if (!valid) {
const char *const err_str = (state->mode == ARB_vertex)
? "invalid ARB vertex program option"
@@ -2178,7 +2184,7 @@ yyreduce:
case 10:
/* Line 1455 of yacc.c */
-#line 328 "program_parse.y"
+#line 334 "program_parse.y"
{
if ((yyvsp[(1) - (2)].inst) != NULL) {
if (state->inst_tail == NULL) {
@@ -2198,7 +2204,7 @@ yyreduce:
case 12:
/* Line 1455 of yacc.c */
-#line 346 "program_parse.y"
+#line 352 "program_parse.y"
{
(yyval.inst) = (yyvsp[(1) - (1)].inst);
state->prog->NumAluInstructions++;
@@ -2208,7 +2214,7 @@ yyreduce:
case 13:
/* Line 1455 of yacc.c */
-#line 351 "program_parse.y"
+#line 357 "program_parse.y"
{
(yyval.inst) = (yyvsp[(1) - (1)].inst);
state->prog->NumTexInstructions++;
@@ -2218,7 +2224,7 @@ yyreduce:
case 24:
/* Line 1455 of yacc.c */
-#line 372 "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);
;}
@@ -2227,7 +2233,7 @@ yyreduce:
case 25:
/* Line 1455 of yacc.c */
-#line 378 "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);
;}
@@ -2236,7 +2242,7 @@ yyreduce:
case 26:
/* Line 1455 of yacc.c */
-#line 384 "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);
;}
@@ -2245,7 +2251,7 @@ yyreduce:
case 27:
/* Line 1455 of yacc.c */
-#line 390 "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);
;}
@@ -2254,7 +2260,7 @@ yyreduce:
case 28:
/* Line 1455 of yacc.c */
-#line 397 "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);
;}
@@ -2263,7 +2269,7 @@ yyreduce:
case 29:
/* Line 1455 of yacc.c */
-#line 404 "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));
;}
@@ -2272,7 +2278,7 @@ yyreduce:
case 30:
/* Line 1455 of yacc.c */
-#line 410 "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) {
@@ -2319,7 +2325,7 @@ yyreduce:
case 31:
/* Line 1455 of yacc.c */
-#line 454 "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;
@@ -2329,7 +2335,7 @@ yyreduce:
case 32:
/* Line 1455 of yacc.c */
-#line 459 "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;
@@ -2342,7 +2348,7 @@ yyreduce:
case 33:
/* Line 1455 of yacc.c */
-#line 469 "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) {
@@ -2389,7 +2395,7 @@ yyreduce:
case 34:
/* Line 1455 of yacc.c */
-#line 513 "program_parse.y"
+#line 519 "program_parse.y"
{
(yyval.integer) = (yyvsp[(2) - (2)].integer);
;}
@@ -2398,91 +2404,91 @@ yyreduce:
case 35:
/* Line 1455 of yacc.c */
-#line 518 "program_parse.y"
+#line 524 "program_parse.y"
{ (yyval.integer) = TEXTURE_1D_INDEX; ;}
break;
case 36:
/* Line 1455 of yacc.c */
-#line 519 "program_parse.y"
+#line 525 "program_parse.y"
{ (yyval.integer) = TEXTURE_2D_INDEX; ;}
break;
case 37:
/* Line 1455 of yacc.c */
-#line 520 "program_parse.y"
+#line 526 "program_parse.y"
{ (yyval.integer) = TEXTURE_3D_INDEX; ;}
break;
case 38:
/* Line 1455 of yacc.c */
-#line 521 "program_parse.y"
+#line 527 "program_parse.y"
{ (yyval.integer) = TEXTURE_CUBE_INDEX; ;}
break;
case 39:
/* Line 1455 of yacc.c */
-#line 522 "program_parse.y"
+#line 528 "program_parse.y"
{ (yyval.integer) = TEXTURE_RECT_INDEX; ;}
break;
case 40:
/* Line 1455 of yacc.c */
-#line 523 "program_parse.y"
+#line 529 "program_parse.y"
{ (yyval.integer) = -TEXTURE_1D_INDEX; ;}
break;
case 41:
/* Line 1455 of yacc.c */
-#line 524 "program_parse.y"
+#line 530 "program_parse.y"
{ (yyval.integer) = -TEXTURE_2D_INDEX; ;}
break;
case 42:
/* Line 1455 of yacc.c */
-#line 525 "program_parse.y"
+#line 531 "program_parse.y"
{ (yyval.integer) = -TEXTURE_RECT_INDEX; ;}
break;
case 43:
/* Line 1455 of yacc.c */
-#line 526 "program_parse.y"
+#line 532 "program_parse.y"
{ (yyval.integer) = TEXTURE_1D_ARRAY_INDEX; ;}
break;
case 44:
/* Line 1455 of yacc.c */
-#line 527 "program_parse.y"
+#line 533 "program_parse.y"
{ (yyval.integer) = TEXTURE_2D_ARRAY_INDEX; ;}
break;
case 45:
/* Line 1455 of yacc.c */
-#line 528 "program_parse.y"
+#line 534 "program_parse.y"
{ (yyval.integer) = -TEXTURE_1D_ARRAY_INDEX; ;}
break;
case 46:
/* Line 1455 of yacc.c */
-#line 529 "program_parse.y"
+#line 535 "program_parse.y"
{ (yyval.integer) = -TEXTURE_2D_ARRAY_INDEX; ;}
break;
case 47:
/* Line 1455 of yacc.c */
-#line 533 "program_parse.y"
+#line 539 "program_parse.y"
{
/* FIXME: Is this correct? Should the extenedSwizzle be applied
* FIXME: to the existing swizzle?
@@ -2497,7 +2503,7 @@ yyreduce:
case 48:
/* Line 1455 of yacc.c */
-#line 545 "program_parse.y"
+#line 551 "program_parse.y"
{
(yyval.src_reg) = (yyvsp[(2) - (2)].src_reg);
@@ -2510,7 +2516,7 @@ yyreduce:
case 49:
/* Line 1455 of yacc.c */
-#line 553 "program_parse.y"
+#line 559 "program_parse.y"
{
(yyval.src_reg) = (yyvsp[(3) - (4)].src_reg);
@@ -2530,7 +2536,7 @@ yyreduce:
case 50:
/* Line 1455 of yacc.c */
-#line 570 "program_parse.y"
+#line 576 "program_parse.y"
{
(yyval.src_reg) = (yyvsp[(1) - (2)].src_reg);
@@ -2542,7 +2548,7 @@ yyreduce:
case 51:
/* Line 1455 of yacc.c */
-#line 577 "program_parse.y"
+#line 583 "program_parse.y"
{
struct asm_symbol temp_sym;
@@ -2553,16 +2559,18 @@ 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(& (yyval.src_reg), PROGRAM_CONSTANT, temp_sym.param_binding_begin);
+ set_src_reg_swz(& (yyval.src_reg), PROGRAM_CONSTANT,
+ temp_sym.param_binding_begin,
+ temp_sym.param_binding_swizzle);
;}
break;
case 52:
/* Line 1455 of yacc.c */
-#line 594 "program_parse.y"
+#line 602 "program_parse.y"
{
(yyval.src_reg) = (yyvsp[(2) - (3)].src_reg);
@@ -2578,7 +2586,7 @@ yyreduce:
case 53:
/* Line 1455 of yacc.c */
-#line 605 "program_parse.y"
+#line 613 "program_parse.y"
{
(yyval.src_reg) = (yyvsp[(3) - (5)].src_reg);
@@ -2600,7 +2608,7 @@ yyreduce:
case 54:
/* Line 1455 of yacc.c */
-#line 625 "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;
@@ -2620,7 +2628,7 @@ yyreduce:
YYERROR;
}
- state->prog->OutputsWritten |= (1U << (yyval.dst_reg).Index);
+ state->prog->OutputsWritten |= BITFIELD64_BIT((yyval.dst_reg).Index);
}
;}
break;
@@ -2628,7 +2636,7 @@ yyreduce:
case 55:
/* Line 1455 of yacc.c */
-#line 650 "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;
@@ -2638,7 +2646,7 @@ yyreduce:
case 56:
/* Line 1455 of yacc.c */
-#line 657 "program_parse.y"
+#line 665 "program_parse.y"
{
const unsigned xyzw_valid =
((yyvsp[(1) - (7)].ext_swizzle).xyzw_valid << 0)
@@ -2674,7 +2682,7 @@ yyreduce:
case 57:
/* Line 1455 of yacc.c */
-#line 690 "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;
@@ -2684,7 +2692,7 @@ yyreduce:
case 58:
/* Line 1455 of yacc.c */
-#line 697 "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");
@@ -2704,14 +2712,19 @@ yyreduce:
case 59:
/* Line 1455 of yacc.c */
-#line 712 "program_parse.y"
+#line 720 "program_parse.y"
{
+ char s;
+
if (strlen((yyvsp[(1) - (1)].string)) > 1) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid extended swizzle selector");
YYERROR;
}
- switch ((yyvsp[(1) - (1)].string)[0]) {
+ s = (yyvsp[(1) - (1)].string)[0];
+ free((yyvsp[(1) - (1)].string));
+
+ switch (s) {
case 'x':
(yyval.ext_swizzle).swz = SWIZZLE_X;
(yyval.ext_swizzle).xyzw_valid = 1;
@@ -2757,11 +2770,13 @@ yyreduce:
case 60:
/* Line 1455 of yacc.c */
-#line 762 "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));
+ free((yyvsp[(1) - (1)].string));
+
if (s == NULL) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
YYERROR;
@@ -2780,7 +2795,9 @@ yyreduce:
set_src_reg(& (yyval.src_reg), PROGRAM_TEMPORARY, s->temp_binding);
break;
case at_param:
- set_src_reg(& (yyval.src_reg), s->param_binding_type, s->param_binding_begin);
+ set_src_reg_swz(& (yyval.src_reg), s->param_binding_type,
+ s->param_binding_begin,
+ s->param_binding_swizzle);
break;
case at_attrib:
set_src_reg(& (yyval.src_reg), PROGRAM_INPUT, s->attrib_binding);
@@ -2801,7 +2818,7 @@ yyreduce:
case 61:
/* Line 1455 of yacc.c */
-#line 801 "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);
@@ -2815,7 +2832,7 @@ yyreduce:
case 62:
/* Line 1455 of yacc.c */
-#line 810 "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)) {
@@ -2841,19 +2858,20 @@ yyreduce:
case 63:
/* Line 1455 of yacc.c */
-#line 831 "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
: PROGRAM_CONSTANT;
- set_src_reg(& (yyval.src_reg), file, (yyvsp[(1) - (1)].temp_sym).param_binding_begin);
+ set_src_reg_swz(& (yyval.src_reg), file, (yyvsp[(1) - (1)].temp_sym).param_binding_begin,
+ (yyvsp[(1) - (1)].temp_sym).param_binding_swizzle);
;}
break;
case 64:
/* Line 1455 of yacc.c */
-#line 840 "program_parse.y"
+#line 858 "program_parse.y"
{
set_dst_reg(& (yyval.dst_reg), PROGRAM_OUTPUT, (yyvsp[(1) - (1)].result));
;}
@@ -2862,11 +2880,13 @@ yyreduce:
case 65:
/* Line 1455 of yacc.c */
-#line 844 "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));
+ free((yyvsp[(1) - (1)].string));
+
if (s == NULL) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
YYERROR;
@@ -2892,11 +2912,13 @@ yyreduce:
case 66:
/* Line 1455 of yacc.c */
-#line 871 "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));
+ free((yyvsp[(1) - (1)].string));
+
if (s == NULL) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid operand variable");
YYERROR;
@@ -2912,7 +2934,7 @@ yyreduce:
case 69:
/* Line 1455 of yacc.c */
-#line 890 "program_parse.y"
+#line 912 "program_parse.y"
{
init_src_reg(& (yyval.src_reg));
(yyval.src_reg).Base.Index = (yyvsp[(1) - (1)].integer);
@@ -2922,7 +2944,7 @@ yyreduce:
case 70:
/* Line 1455 of yacc.c */
-#line 897 "program_parse.y"
+#line 919 "program_parse.y"
{
/* FINISHME: Add support for multiple address registers.
*/
@@ -2937,28 +2959,28 @@ yyreduce:
case 71:
/* Line 1455 of yacc.c */
-#line 908 "program_parse.y"
+#line 930 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 72:
/* Line 1455 of yacc.c */
-#line 909 "program_parse.y"
+#line 931 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
break;
case 73:
/* Line 1455 of yacc.c */
-#line 910 "program_parse.y"
+#line 932 "program_parse.y"
{ (yyval.integer) = -(yyvsp[(2) - (2)].integer); ;}
break;
case 74:
/* Line 1455 of yacc.c */
-#line 914 "program_parse.y"
+#line 936 "program_parse.y"
{
if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
char s[100];
@@ -2975,7 +2997,7 @@ yyreduce:
case 75:
/* Line 1455 of yacc.c */
-#line 928 "program_parse.y"
+#line 950 "program_parse.y"
{
if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
char s[100];
@@ -2992,11 +3014,13 @@ yyreduce:
case 76:
/* Line 1455 of yacc.c */
-#line 942 "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));
+ free((yyvsp[(1) - (1)].string));
+
if (s == NULL) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid array member");
YYERROR;
@@ -3013,7 +3037,7 @@ yyreduce:
case 77:
/* Line 1455 of yacc.c */
-#line 960 "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");
@@ -3027,7 +3051,7 @@ yyreduce:
case 78:
/* Line 1455 of yacc.c */
-#line 971 "program_parse.y"
+#line 995 "program_parse.y"
{
if ((yyvsp[(1) - (1)].swiz_mask).mask != WRITEMASK_X) {
yyerror(& (yylsp[(1) - (1)]), state,
@@ -3042,21 +3066,21 @@ yyreduce:
case 83:
/* Line 1455 of yacc.c */
-#line 987 "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 991 "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 995 "program_parse.y"
+#line 1019 "program_parse.y"
{
(yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
;}
@@ -3065,7 +3089,7 @@ yyreduce:
case 90:
/* Line 1455 of yacc.c */
-#line 999 "program_parse.y"
+#line 1023 "program_parse.y"
{
(yyval.dst_reg) = (yyvsp[(2) - (3)].dst_reg);
;}
@@ -3074,7 +3098,7 @@ yyreduce:
case 91:
/* Line 1455 of yacc.c */
-#line 1003 "program_parse.y"
+#line 1027 "program_parse.y"
{
(yyval.dst_reg).CondMask = COND_TR;
(yyval.dst_reg).CondSwizzle = SWIZZLE_NOOP;
@@ -3085,7 +3109,7 @@ yyreduce:
case 92:
/* Line 1455 of yacc.c */
-#line 1011 "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;
@@ -3095,7 +3119,7 @@ yyreduce:
case 93:
/* Line 1455 of yacc.c */
-#line 1018 "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;
@@ -3105,7 +3129,7 @@ yyreduce:
case 94:
/* Line 1455 of yacc.c */
-#line 1025 "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')) {
@@ -3131,7 +3155,7 @@ yyreduce:
case 95:
/* Line 1455 of yacc.c */
-#line 1048 "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')) {
@@ -3157,12 +3181,13 @@ yyreduce:
case 102:
/* Line 1455 of yacc.c */
-#line 1079 "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)]));
if (s == NULL) {
+ free((yyvsp[(2) - (4)].string));
YYERROR;
} else {
s->attrib_binding = (yyvsp[(4) - (4)].attrib);
@@ -3178,7 +3203,7 @@ yyreduce:
case 103:
/* Line 1455 of yacc.c */
-#line 1097 "program_parse.y"
+#line 1122 "program_parse.y"
{
(yyval.attrib) = (yyvsp[(2) - (2)].attrib);
;}
@@ -3187,7 +3212,7 @@ yyreduce:
case 104:
/* Line 1455 of yacc.c */
-#line 1101 "program_parse.y"
+#line 1126 "program_parse.y"
{
(yyval.attrib) = (yyvsp[(2) - (2)].attrib);
;}
@@ -3196,7 +3221,7 @@ yyreduce:
case 105:
/* Line 1455 of yacc.c */
-#line 1107 "program_parse.y"
+#line 1132 "program_parse.y"
{
(yyval.attrib) = VERT_ATTRIB_POS;
;}
@@ -3205,7 +3230,7 @@ yyreduce:
case 106:
/* Line 1455 of yacc.c */
-#line 1111 "program_parse.y"
+#line 1136 "program_parse.y"
{
(yyval.attrib) = VERT_ATTRIB_WEIGHT;
;}
@@ -3214,7 +3239,7 @@ yyreduce:
case 107:
/* Line 1455 of yacc.c */
-#line 1115 "program_parse.y"
+#line 1140 "program_parse.y"
{
(yyval.attrib) = VERT_ATTRIB_NORMAL;
;}
@@ -3223,7 +3248,7 @@ yyreduce:
case 108:
/* Line 1455 of yacc.c */
-#line 1119 "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");
@@ -3237,7 +3262,7 @@ yyreduce:
case 109:
/* Line 1455 of yacc.c */
-#line 1128 "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");
@@ -3251,7 +3276,7 @@ yyreduce:
case 110:
/* Line 1455 of yacc.c */
-#line 1137 "program_parse.y"
+#line 1162 "program_parse.y"
{
(yyval.attrib) = VERT_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
;}
@@ -3260,7 +3285,7 @@ yyreduce:
case 111:
/* Line 1455 of yacc.c */
-#line 1141 "program_parse.y"
+#line 1166 "program_parse.y"
{
yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
YYERROR;
@@ -3270,7 +3295,7 @@ yyreduce:
case 112:
/* Line 1455 of yacc.c */
-#line 1146 "program_parse.y"
+#line 1171 "program_parse.y"
{
(yyval.attrib) = VERT_ATTRIB_GENERIC0 + (yyvsp[(3) - (4)].integer);
;}
@@ -3279,7 +3304,7 @@ yyreduce:
case 113:
/* Line 1455 of yacc.c */
-#line 1152 "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");
@@ -3293,7 +3318,7 @@ yyreduce:
case 117:
/* Line 1455 of yacc.c */
-#line 1166 "program_parse.y"
+#line 1191 "program_parse.y"
{
(yyval.attrib) = FRAG_ATTRIB_WPOS;
;}
@@ -3302,7 +3327,7 @@ yyreduce:
case 118:
/* Line 1455 of yacc.c */
-#line 1170 "program_parse.y"
+#line 1195 "program_parse.y"
{
(yyval.attrib) = FRAG_ATTRIB_COL0 + (yyvsp[(2) - (2)].integer);
;}
@@ -3311,7 +3336,7 @@ yyreduce:
case 119:
/* Line 1455 of yacc.c */
-#line 1174 "program_parse.y"
+#line 1199 "program_parse.y"
{
(yyval.attrib) = FRAG_ATTRIB_FOGC;
;}
@@ -3320,7 +3345,7 @@ yyreduce:
case 120:
/* Line 1455 of yacc.c */
-#line 1178 "program_parse.y"
+#line 1203 "program_parse.y"
{
(yyval.attrib) = FRAG_ATTRIB_TEX0 + (yyvsp[(2) - (2)].integer);
;}
@@ -3329,17 +3354,19 @@ yyreduce:
case 123:
/* Line 1455 of yacc.c */
-#line 1186 "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)]));
if (s == NULL) {
+ free((yyvsp[(2) - (3)].string));
YYERROR;
} else {
s->param_binding_type = (yyvsp[(3) - (3)].temp_sym).param_binding_type;
s->param_binding_begin = (yyvsp[(3) - (3)].temp_sym).param_binding_begin;
s->param_binding_length = (yyvsp[(3) - (3)].temp_sym).param_binding_length;
+ s->param_binding_swizzle = SWIZZLE_XYZW;
s->param_is_array = 0;
}
;}
@@ -3348,9 +3375,10 @@ yyreduce:
case 124:
/* Line 1455 of yacc.c */
-#line 1202 "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));
yyerror(& (yylsp[(4) - (6)]), state,
"parameter array size and number of bindings must match");
YYERROR;
@@ -3359,11 +3387,13 @@ yyreduce:
declare_variable(state, (yyvsp[(2) - (6)].string), (yyvsp[(6) - (6)].temp_sym).type, & (yylsp[(2) - (6)]));
if (s == NULL) {
+ free((yyvsp[(2) - (6)].string));
YYERROR;
} else {
s->param_binding_type = (yyvsp[(6) - (6)].temp_sym).param_binding_type;
s->param_binding_begin = (yyvsp[(6) - (6)].temp_sym).param_binding_begin;
s->param_binding_length = (yyvsp[(6) - (6)].temp_sym).param_binding_length;
+ s->param_binding_swizzle = SWIZZLE_XYZW;
s->param_is_array = 1;
}
}
@@ -3373,7 +3403,7 @@ yyreduce:
case 125:
/* Line 1455 of yacc.c */
-#line 1224 "program_parse.y"
+#line 1254 "program_parse.y"
{
(yyval.integer) = 0;
;}
@@ -3382,7 +3412,7 @@ yyreduce:
case 126:
/* Line 1455 of yacc.c */
-#line 1228 "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");
@@ -3396,7 +3426,7 @@ yyreduce:
case 127:
/* Line 1455 of yacc.c */
-#line 1239 "program_parse.y"
+#line 1269 "program_parse.y"
{
(yyval.temp_sym) = (yyvsp[(2) - (2)].temp_sym);
;}
@@ -3405,7 +3435,7 @@ yyreduce:
case 128:
/* Line 1455 of yacc.c */
-#line 1245 "program_parse.y"
+#line 1275 "program_parse.y"
{
(yyval.temp_sym) = (yyvsp[(3) - (4)].temp_sym);
;}
@@ -3414,7 +3444,7 @@ yyreduce:
case 130:
/* Line 1455 of yacc.c */
-#line 1252 "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);
@@ -3424,7 +3454,7 @@ yyreduce:
case 131:
/* Line 1455 of yacc.c */
-#line 1259 "program_parse.y"
+#line 1289 "program_parse.y"
{
memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
(yyval.temp_sym).param_binding_begin = ~0;
@@ -3435,7 +3465,7 @@ yyreduce:
case 132:
/* Line 1455 of yacc.c */
-#line 1265 "program_parse.y"
+#line 1295 "program_parse.y"
{
memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
(yyval.temp_sym).param_binding_begin = ~0;
@@ -3446,18 +3476,18 @@ yyreduce:
case 133:
/* Line 1455 of yacc.c */
-#line 1271 "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 1279 "program_parse.y"
+#line 1309 "program_parse.y"
{
memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
(yyval.temp_sym).param_binding_begin = ~0;
@@ -3468,7 +3498,7 @@ yyreduce:
case 135:
/* Line 1455 of yacc.c */
-#line 1285 "program_parse.y"
+#line 1315 "program_parse.y"
{
memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
(yyval.temp_sym).param_binding_begin = ~0;
@@ -3479,18 +3509,18 @@ yyreduce:
case 136:
/* Line 1455 of yacc.c */
-#line 1291 "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 1299 "program_parse.y"
+#line 1329 "program_parse.y"
{
memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
(yyval.temp_sym).param_binding_begin = ~0;
@@ -3501,7 +3531,7 @@ yyreduce:
case 138:
/* Line 1455 of yacc.c */
-#line 1305 "program_parse.y"
+#line 1335 "program_parse.y"
{
memset(& (yyval.temp_sym), 0, sizeof((yyval.temp_sym)));
(yyval.temp_sym).param_binding_begin = ~0;
@@ -3512,109 +3542,109 @@ yyreduce:
case 139:
/* Line 1455 of yacc.c */
-#line 1311 "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 1318 "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 1319 "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 1322 "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 1323 "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 1324 "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 1325 "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 1326 "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 1327 "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 1328 "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 1329 "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 1330 "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 1331 "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 1332 "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 1336 "program_parse.y"
+#line 1366 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_MATERIAL;
@@ -3626,7 +3656,7 @@ yyreduce:
case 154:
/* Line 1455 of yacc.c */
-#line 1345 "program_parse.y"
+#line 1375 "program_parse.y"
{
(yyval.integer) = (yyvsp[(1) - (1)].integer);
;}
@@ -3635,7 +3665,7 @@ yyreduce:
case 155:
/* Line 1455 of yacc.c */
-#line 1349 "program_parse.y"
+#line 1379 "program_parse.y"
{
(yyval.integer) = STATE_EMISSION;
;}
@@ -3644,7 +3674,7 @@ yyreduce:
case 156:
/* Line 1455 of yacc.c */
-#line 1353 "program_parse.y"
+#line 1383 "program_parse.y"
{
(yyval.integer) = STATE_SHININESS;
;}
@@ -3653,7 +3683,7 @@ yyreduce:
case 157:
/* Line 1455 of yacc.c */
-#line 1359 "program_parse.y"
+#line 1389 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_LIGHT;
@@ -3665,7 +3695,7 @@ yyreduce:
case 158:
/* Line 1455 of yacc.c */
-#line 1368 "program_parse.y"
+#line 1398 "program_parse.y"
{
(yyval.integer) = (yyvsp[(1) - (1)].integer);
;}
@@ -3674,7 +3704,7 @@ yyreduce:
case 159:
/* Line 1455 of yacc.c */
-#line 1372 "program_parse.y"
+#line 1402 "program_parse.y"
{
(yyval.integer) = STATE_POSITION;
;}
@@ -3683,7 +3713,7 @@ yyreduce:
case 160:
/* Line 1455 of yacc.c */
-#line 1376 "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");
@@ -3697,7 +3727,7 @@ yyreduce:
case 161:
/* Line 1455 of yacc.c */
-#line 1385 "program_parse.y"
+#line 1415 "program_parse.y"
{
(yyval.integer) = (yyvsp[(2) - (2)].integer);
;}
@@ -3706,7 +3736,7 @@ yyreduce:
case 162:
/* Line 1455 of yacc.c */
-#line 1389 "program_parse.y"
+#line 1419 "program_parse.y"
{
(yyval.integer) = STATE_HALF_VECTOR;
;}
@@ -3715,7 +3745,7 @@ yyreduce:
case 163:
/* Line 1455 of yacc.c */
-#line 1395 "program_parse.y"
+#line 1425 "program_parse.y"
{
(yyval.integer) = STATE_SPOT_DIRECTION;
;}
@@ -3724,7 +3754,7 @@ yyreduce:
case 164:
/* Line 1455 of yacc.c */
-#line 1401 "program_parse.y"
+#line 1431 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(2) - (2)].state)[0];
(yyval.state)[1] = (yyvsp[(2) - (2)].state)[1];
@@ -3734,7 +3764,7 @@ yyreduce:
case 165:
/* Line 1455 of yacc.c */
-#line 1408 "program_parse.y"
+#line 1438 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_LIGHTMODEL_AMBIENT;
@@ -3744,7 +3774,7 @@ yyreduce:
case 166:
/* Line 1455 of yacc.c */
-#line 1413 "program_parse.y"
+#line 1443 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_LIGHTMODEL_SCENECOLOR;
@@ -3755,7 +3785,7 @@ yyreduce:
case 167:
/* Line 1455 of yacc.c */
-#line 1421 "program_parse.y"
+#line 1451 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_LIGHTPROD;
@@ -3768,7 +3798,7 @@ yyreduce:
case 169:
/* Line 1455 of yacc.c */
-#line 1433 "program_parse.y"
+#line 1463 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = (yyvsp[(3) - (3)].integer);
@@ -3779,7 +3809,7 @@ yyreduce:
case 170:
/* Line 1455 of yacc.c */
-#line 1441 "program_parse.y"
+#line 1471 "program_parse.y"
{
(yyval.integer) = STATE_TEXENV_COLOR;
;}
@@ -3788,7 +3818,7 @@ yyreduce:
case 171:
/* Line 1455 of yacc.c */
-#line 1447 "program_parse.y"
+#line 1477 "program_parse.y"
{
(yyval.integer) = STATE_AMBIENT;
;}
@@ -3797,7 +3827,7 @@ yyreduce:
case 172:
/* Line 1455 of yacc.c */
-#line 1451 "program_parse.y"
+#line 1481 "program_parse.y"
{
(yyval.integer) = STATE_DIFFUSE;
;}
@@ -3806,7 +3836,7 @@ yyreduce:
case 173:
/* Line 1455 of yacc.c */
-#line 1455 "program_parse.y"
+#line 1485 "program_parse.y"
{
(yyval.integer) = STATE_SPECULAR;
;}
@@ -3815,7 +3845,7 @@ yyreduce:
case 174:
/* Line 1455 of yacc.c */
-#line 1461 "program_parse.y"
+#line 1491 "program_parse.y"
{
if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxLights) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid light selector");
@@ -3829,7 +3859,7 @@ yyreduce:
case 175:
/* Line 1455 of yacc.c */
-#line 1472 "program_parse.y"
+#line 1502 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_TEXGEN;
@@ -3841,7 +3871,7 @@ yyreduce:
case 176:
/* Line 1455 of yacc.c */
-#line 1481 "program_parse.y"
+#line 1511 "program_parse.y"
{
(yyval.integer) = STATE_TEXGEN_EYE_S;
;}
@@ -3850,7 +3880,7 @@ yyreduce:
case 177:
/* Line 1455 of yacc.c */
-#line 1485 "program_parse.y"
+#line 1515 "program_parse.y"
{
(yyval.integer) = STATE_TEXGEN_OBJECT_S;
;}
@@ -3859,7 +3889,7 @@ yyreduce:
case 178:
/* Line 1455 of yacc.c */
-#line 1490 "program_parse.y"
+#line 1520 "program_parse.y"
{
(yyval.integer) = STATE_TEXGEN_EYE_S - STATE_TEXGEN_EYE_S;
;}
@@ -3868,7 +3898,7 @@ yyreduce:
case 179:
/* Line 1455 of yacc.c */
-#line 1494 "program_parse.y"
+#line 1524 "program_parse.y"
{
(yyval.integer) = STATE_TEXGEN_EYE_T - STATE_TEXGEN_EYE_S;
;}
@@ -3877,7 +3907,7 @@ yyreduce:
case 180:
/* Line 1455 of yacc.c */
-#line 1498 "program_parse.y"
+#line 1528 "program_parse.y"
{
(yyval.integer) = STATE_TEXGEN_EYE_R - STATE_TEXGEN_EYE_S;
;}
@@ -3886,7 +3916,7 @@ yyreduce:
case 181:
/* Line 1455 of yacc.c */
-#line 1502 "program_parse.y"
+#line 1532 "program_parse.y"
{
(yyval.integer) = STATE_TEXGEN_EYE_Q - STATE_TEXGEN_EYE_S;
;}
@@ -3895,7 +3925,7 @@ yyreduce:
case 182:
/* Line 1455 of yacc.c */
-#line 1508 "program_parse.y"
+#line 1538 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = (yyvsp[(2) - (2)].integer);
@@ -3905,7 +3935,7 @@ yyreduce:
case 183:
/* Line 1455 of yacc.c */
-#line 1515 "program_parse.y"
+#line 1545 "program_parse.y"
{
(yyval.integer) = STATE_FOG_COLOR;
;}
@@ -3914,7 +3944,7 @@ yyreduce:
case 184:
/* Line 1455 of yacc.c */
-#line 1519 "program_parse.y"
+#line 1549 "program_parse.y"
{
(yyval.integer) = STATE_FOG_PARAMS;
;}
@@ -3923,7 +3953,7 @@ yyreduce:
case 185:
/* Line 1455 of yacc.c */
-#line 1525 "program_parse.y"
+#line 1555 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_CLIPPLANE;
@@ -3934,7 +3964,7 @@ yyreduce:
case 186:
/* Line 1455 of yacc.c */
-#line 1533 "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");
@@ -3948,7 +3978,7 @@ yyreduce:
case 187:
/* Line 1455 of yacc.c */
-#line 1544 "program_parse.y"
+#line 1574 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = (yyvsp[(2) - (2)].integer);
@@ -3958,7 +3988,7 @@ yyreduce:
case 188:
/* Line 1455 of yacc.c */
-#line 1551 "program_parse.y"
+#line 1581 "program_parse.y"
{
(yyval.integer) = STATE_POINT_SIZE;
;}
@@ -3967,7 +3997,7 @@ yyreduce:
case 189:
/* Line 1455 of yacc.c */
-#line 1555 "program_parse.y"
+#line 1585 "program_parse.y"
{
(yyval.integer) = STATE_POINT_ATTENUATION;
;}
@@ -3976,7 +4006,7 @@ yyreduce:
case 190:
/* Line 1455 of yacc.c */
-#line 1561 "program_parse.y"
+#line 1591 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(1) - (5)].state)[0];
(yyval.state)[1] = (yyvsp[(1) - (5)].state)[1];
@@ -3989,7 +4019,7 @@ yyreduce:
case 191:
/* Line 1455 of yacc.c */
-#line 1571 "program_parse.y"
+#line 1601 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(1) - (2)].state)[0];
(yyval.state)[1] = (yyvsp[(1) - (2)].state)[1];
@@ -4002,7 +4032,7 @@ yyreduce:
case 192:
/* Line 1455 of yacc.c */
-#line 1581 "program_parse.y"
+#line 1611 "program_parse.y"
{
(yyval.state)[2] = 0;
(yyval.state)[3] = 3;
@@ -4012,7 +4042,7 @@ yyreduce:
case 193:
/* Line 1455 of yacc.c */
-#line 1586 "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).
@@ -4033,7 +4063,7 @@ yyreduce:
case 194:
/* Line 1455 of yacc.c */
-#line 1604 "program_parse.y"
+#line 1634 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(2) - (3)].state)[0];
(yyval.state)[1] = (yyvsp[(2) - (3)].state)[1];
@@ -4044,7 +4074,7 @@ yyreduce:
case 195:
/* Line 1455 of yacc.c */
-#line 1612 "program_parse.y"
+#line 1642 "program_parse.y"
{
(yyval.integer) = 0;
;}
@@ -4053,7 +4083,7 @@ yyreduce:
case 196:
/* Line 1455 of yacc.c */
-#line 1616 "program_parse.y"
+#line 1646 "program_parse.y"
{
(yyval.integer) = (yyvsp[(1) - (1)].integer);
;}
@@ -4062,7 +4092,7 @@ yyreduce:
case 197:
/* Line 1455 of yacc.c */
-#line 1622 "program_parse.y"
+#line 1652 "program_parse.y"
{
(yyval.integer) = STATE_MATRIX_INVERSE;
;}
@@ -4071,7 +4101,7 @@ yyreduce:
case 198:
/* Line 1455 of yacc.c */
-#line 1626 "program_parse.y"
+#line 1656 "program_parse.y"
{
(yyval.integer) = STATE_MATRIX_TRANSPOSE;
;}
@@ -4080,7 +4110,7 @@ yyreduce:
case 199:
/* Line 1455 of yacc.c */
-#line 1630 "program_parse.y"
+#line 1660 "program_parse.y"
{
(yyval.integer) = STATE_MATRIX_INVTRANS;
;}
@@ -4089,7 +4119,7 @@ yyreduce:
case 200:
/* Line 1455 of yacc.c */
-#line 1636 "program_parse.y"
+#line 1666 "program_parse.y"
{
if ((yyvsp[(1) - (1)].integer) > 3) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid matrix row reference");
@@ -4103,7 +4133,7 @@ yyreduce:
case 201:
/* Line 1455 of yacc.c */
-#line 1647 "program_parse.y"
+#line 1677 "program_parse.y"
{
(yyval.state)[0] = STATE_MODELVIEW_MATRIX;
(yyval.state)[1] = (yyvsp[(2) - (2)].integer);
@@ -4113,7 +4143,7 @@ yyreduce:
case 202:
/* Line 1455 of yacc.c */
-#line 1652 "program_parse.y"
+#line 1682 "program_parse.y"
{
(yyval.state)[0] = STATE_PROJECTION_MATRIX;
(yyval.state)[1] = 0;
@@ -4123,7 +4153,7 @@ yyreduce:
case 203:
/* Line 1455 of yacc.c */
-#line 1657 "program_parse.y"
+#line 1687 "program_parse.y"
{
(yyval.state)[0] = STATE_MVP_MATRIX;
(yyval.state)[1] = 0;
@@ -4133,7 +4163,7 @@ yyreduce:
case 204:
/* Line 1455 of yacc.c */
-#line 1662 "program_parse.y"
+#line 1692 "program_parse.y"
{
(yyval.state)[0] = STATE_TEXTURE_MATRIX;
(yyval.state)[1] = (yyvsp[(2) - (2)].integer);
@@ -4143,7 +4173,7 @@ yyreduce:
case 205:
/* Line 1455 of yacc.c */
-#line 1667 "program_parse.y"
+#line 1697 "program_parse.y"
{
yyerror(& (yylsp[(1) - (4)]), state, "GL_ARB_matrix_palette not supported");
YYERROR;
@@ -4153,7 +4183,7 @@ yyreduce:
case 206:
/* Line 1455 of yacc.c */
-#line 1672 "program_parse.y"
+#line 1702 "program_parse.y"
{
(yyval.state)[0] = STATE_PROGRAM_MATRIX;
(yyval.state)[1] = (yyvsp[(3) - (4)].integer);
@@ -4163,7 +4193,7 @@ yyreduce:
case 207:
/* Line 1455 of yacc.c */
-#line 1679 "program_parse.y"
+#line 1709 "program_parse.y"
{
(yyval.integer) = 0;
;}
@@ -4172,7 +4202,7 @@ yyreduce:
case 208:
/* Line 1455 of yacc.c */
-#line 1683 "program_parse.y"
+#line 1713 "program_parse.y"
{
(yyval.integer) = (yyvsp[(2) - (3)].integer);
;}
@@ -4181,7 +4211,7 @@ yyreduce:
case 209:
/* Line 1455 of yacc.c */
-#line 1688 "program_parse.y"
+#line 1718 "program_parse.y"
{
/* Since GL_ARB_vertex_blend isn't supported, only modelview matrix
* zero is valid.
@@ -4198,7 +4228,7 @@ yyreduce:
case 210:
/* Line 1455 of yacc.c */
-#line 1701 "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.
@@ -4210,7 +4240,7 @@ yyreduce:
case 211:
/* Line 1455 of yacc.c */
-#line 1709 "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");
@@ -4224,7 +4254,7 @@ yyreduce:
case 212:
/* Line 1455 of yacc.c */
-#line 1720 "program_parse.y"
+#line 1750 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = STATE_DEPTH_RANGE;
@@ -4234,7 +4264,7 @@ yyreduce:
case 217:
/* Line 1455 of yacc.c */
-#line 1732 "program_parse.y"
+#line 1762 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = state->state_param_enum;
@@ -4247,7 +4277,7 @@ yyreduce:
case 218:
/* Line 1455 of yacc.c */
-#line 1742 "program_parse.y"
+#line 1772 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(1) - (1)].integer);
(yyval.state)[1] = (yyvsp[(1) - (1)].integer);
@@ -4257,7 +4287,7 @@ yyreduce:
case 219:
/* Line 1455 of yacc.c */
-#line 1747 "program_parse.y"
+#line 1777 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(1) - (3)].integer);
(yyval.state)[1] = (yyvsp[(3) - (3)].integer);
@@ -4267,7 +4297,7 @@ yyreduce:
case 220:
/* Line 1455 of yacc.c */
-#line 1754 "program_parse.y"
+#line 1784 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = state->state_param_enum;
@@ -4280,7 +4310,7 @@ yyreduce:
case 221:
/* Line 1455 of yacc.c */
-#line 1764 "program_parse.y"
+#line 1794 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = state->state_param_enum;
@@ -4293,7 +4323,7 @@ yyreduce:
case 222:
/* Line 1455 of yacc.c */
-#line 1773 "program_parse.y"
+#line 1803 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(1) - (1)].integer);
(yyval.state)[1] = (yyvsp[(1) - (1)].integer);
@@ -4303,7 +4333,7 @@ yyreduce:
case 223:
/* Line 1455 of yacc.c */
-#line 1778 "program_parse.y"
+#line 1808 "program_parse.y"
{
(yyval.state)[0] = (yyvsp[(1) - (3)].integer);
(yyval.state)[1] = (yyvsp[(3) - (3)].integer);
@@ -4313,7 +4343,7 @@ yyreduce:
case 224:
/* Line 1455 of yacc.c */
-#line 1785 "program_parse.y"
+#line 1815 "program_parse.y"
{
memset((yyval.state), 0, sizeof((yyval.state)));
(yyval.state)[0] = state->state_param_enum;
@@ -4326,7 +4356,7 @@ yyreduce:
case 225:
/* Line 1455 of yacc.c */
-#line 1795 "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");
@@ -4339,7 +4369,7 @@ yyreduce:
case 226:
/* Line 1455 of yacc.c */
-#line 1805 "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");
@@ -4352,7 +4382,7 @@ yyreduce:
case 231:
/* Line 1455 of yacc.c */
-#line 1820 "program_parse.y"
+#line 1850 "program_parse.y"
{
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4365,7 +4395,7 @@ yyreduce:
case 232:
/* Line 1455 of yacc.c */
-#line 1830 "program_parse.y"
+#line 1860 "program_parse.y"
{
(yyval.vector).count = 1;
(yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
@@ -4378,7 +4408,7 @@ yyreduce:
case 233:
/* Line 1455 of yacc.c */
-#line 1838 "program_parse.y"
+#line 1868 "program_parse.y"
{
(yyval.vector).count = 1;
(yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
@@ -4391,7 +4421,7 @@ yyreduce:
case 234:
/* Line 1455 of yacc.c */
-#line 1848 "program_parse.y"
+#line 1878 "program_parse.y"
{
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
@@ -4404,7 +4434,7 @@ yyreduce:
case 235:
/* Line 1455 of yacc.c */
-#line 1856 "program_parse.y"
+#line 1886 "program_parse.y"
{
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
@@ -4417,7 +4447,7 @@ yyreduce:
case 236:
/* Line 1455 of yacc.c */
-#line 1865 "program_parse.y"
+#line 1895 "program_parse.y"
{
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
@@ -4430,7 +4460,7 @@ yyreduce:
case 237:
/* Line 1455 of yacc.c */
-#line 1874 "program_parse.y"
+#line 1904 "program_parse.y"
{
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@@ -4443,7 +4473,7 @@ yyreduce:
case 238:
/* Line 1455 of yacc.c */
-#line 1884 "program_parse.y"
+#line 1914 "program_parse.y"
{
(yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
;}
@@ -4452,7 +4482,7 @@ yyreduce:
case 239:
/* Line 1455 of yacc.c */
-#line 1888 "program_parse.y"
+#line 1918 "program_parse.y"
{
(yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
;}
@@ -4461,35 +4491,35 @@ yyreduce:
case 240:
/* Line 1455 of yacc.c */
-#line 1893 "program_parse.y"
+#line 1923 "program_parse.y"
{ (yyval.negate) = FALSE; ;}
break;
case 241:
/* Line 1455 of yacc.c */
-#line 1894 "program_parse.y"
+#line 1924 "program_parse.y"
{ (yyval.negate) = TRUE; ;}
break;
case 242:
/* Line 1455 of yacc.c */
-#line 1895 "program_parse.y"
+#line 1925 "program_parse.y"
{ (yyval.negate) = FALSE; ;}
break;
case 243:
/* Line 1455 of yacc.c */
-#line 1898 "program_parse.y"
+#line 1928 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (2)].integer); ;}
break;
case 245:
/* Line 1455 of yacc.c */
-#line 1902 "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
@@ -4528,7 +4558,7 @@ yyreduce:
case 246:
/* Line 1455 of yacc.c */
-#line 1936 "program_parse.y"
+#line 1966 "program_parse.y"
{
;}
break;
@@ -4536,16 +4566,17 @@ yyreduce:
case 247:
/* Line 1455 of yacc.c */
-#line 1940 "program_parse.y"
+#line 1970 "program_parse.y"
{ (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
break;
case 249:
/* Line 1455 of yacc.c */
-#line 1944 "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));
YYERROR;
}
;}
@@ -4554,9 +4585,10 @@ yyreduce:
case 250:
/* Line 1455 of yacc.c */
-#line 1950 "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));
YYERROR;
}
;}
@@ -4565,12 +4597,13 @@ yyreduce:
case 251:
/* Line 1455 of yacc.c */
-#line 1958 "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)]));
if (s == NULL) {
+ free((yyvsp[(3) - (5)].string));
YYERROR;
} else {
s->output_binding = (yyvsp[(5) - (5)].result);
@@ -4581,7 +4614,7 @@ yyreduce:
case 252:
/* Line 1455 of yacc.c */
-#line 1971 "program_parse.y"
+#line 2004 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_HPOS;
@@ -4595,7 +4628,7 @@ yyreduce:
case 253:
/* Line 1455 of yacc.c */
-#line 1980 "program_parse.y"
+#line 2013 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_FOGC;
@@ -4609,7 +4642,7 @@ yyreduce:
case 254:
/* Line 1455 of yacc.c */
-#line 1989 "program_parse.y"
+#line 2022 "program_parse.y"
{
(yyval.result) = (yyvsp[(2) - (2)].result);
;}
@@ -4618,7 +4651,7 @@ yyreduce:
case 255:
/* Line 1455 of yacc.c */
-#line 1993 "program_parse.y"
+#line 2026 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_PSIZ;
@@ -4632,7 +4665,7 @@ yyreduce:
case 256:
/* Line 1455 of yacc.c */
-#line 2002 "program_parse.y"
+#line 2035 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@@ -4646,7 +4679,7 @@ yyreduce:
case 257:
/* Line 1455 of yacc.c */
-#line 2011 "program_parse.y"
+#line 2044 "program_parse.y"
{
if (state->mode == ARB_fragment) {
(yyval.result) = FRAG_RESULT_DEPTH;
@@ -4660,7 +4693,7 @@ yyreduce:
case 258:
/* Line 1455 of yacc.c */
-#line 2022 "program_parse.y"
+#line 2055 "program_parse.y"
{
(yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
;}
@@ -4669,7 +4702,7 @@ yyreduce:
case 259:
/* Line 1455 of yacc.c */
-#line 2028 "program_parse.y"
+#line 2061 "program_parse.y"
{
(yyval.integer) = (state->mode == ARB_vertex)
? VERT_RESULT_COL0
@@ -4680,7 +4713,7 @@ yyreduce:
case 260:
/* Line 1455 of yacc.c */
-#line 2034 "program_parse.y"
+#line 2067 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = VERT_RESULT_COL0;
@@ -4694,7 +4727,7 @@ yyreduce:
case 261:
/* Line 1455 of yacc.c */
-#line 2043 "program_parse.y"
+#line 2076 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = VERT_RESULT_BFC0;
@@ -4708,7 +4741,7 @@ yyreduce:
case 262:
/* Line 1455 of yacc.c */
-#line 2054 "program_parse.y"
+#line 2087 "program_parse.y"
{
(yyval.integer) = 0;
;}
@@ -4717,7 +4750,7 @@ yyreduce:
case 263:
/* Line 1455 of yacc.c */
-#line 2058 "program_parse.y"
+#line 2091 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = 0;
@@ -4731,7 +4764,7 @@ yyreduce:
case 264:
/* Line 1455 of yacc.c */
-#line 2067 "program_parse.y"
+#line 2100 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = 1;
@@ -4745,91 +4778,91 @@ yyreduce:
case 265:
/* Line 1455 of yacc.c */
-#line 2077 "program_parse.y"
+#line 2110 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 266:
/* Line 1455 of yacc.c */
-#line 2078 "program_parse.y"
+#line 2111 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 267:
/* Line 1455 of yacc.c */
-#line 2079 "program_parse.y"
+#line 2112 "program_parse.y"
{ (yyval.integer) = 1; ;}
break;
case 268:
/* Line 1455 of yacc.c */
-#line 2082 "program_parse.y"
+#line 2115 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 269:
/* Line 1455 of yacc.c */
-#line 2083 "program_parse.y"
+#line 2116 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 270:
/* Line 1455 of yacc.c */
-#line 2084 "program_parse.y"
+#line 2117 "program_parse.y"
{ (yyval.integer) = 1; ;}
break;
case 271:
/* Line 1455 of yacc.c */
-#line 2087 "program_parse.y"
+#line 2120 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 272:
/* Line 1455 of yacc.c */
-#line 2088 "program_parse.y"
+#line 2121 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
break;
case 273:
/* Line 1455 of yacc.c */
-#line 2091 "program_parse.y"
+#line 2124 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 274:
/* Line 1455 of yacc.c */
-#line 2092 "program_parse.y"
+#line 2125 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
break;
case 275:
/* Line 1455 of yacc.c */
-#line 2095 "program_parse.y"
+#line 2128 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 276:
/* Line 1455 of yacc.c */
-#line 2096 "program_parse.y"
+#line 2129 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
break;
case 277:
/* Line 1455 of yacc.c */
-#line 2100 "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");
@@ -4843,7 +4876,7 @@ yyreduce:
case 278:
/* Line 1455 of yacc.c */
-#line 2111 "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");
@@ -4857,7 +4890,7 @@ yyreduce:
case 279:
/* Line 1455 of yacc.c */
-#line 2122 "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");
@@ -4871,24 +4904,28 @@ yyreduce:
case 280:
/* Line 1455 of yacc.c */
-#line 2133 "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));
struct asm_symbol *target = (struct asm_symbol *)
_mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(4) - (4)].string));
+ free((yyvsp[(4) - (4)].string));
+
if (exist != NULL) {
char m[1000];
_mesa_snprintf(m, sizeof(m), "redeclared identifier: %s", (yyvsp[(2) - (4)].string));
+ free((yyvsp[(2) - (4)].string));
yyerror(& (yylsp[(2) - (4)]), state, m);
YYERROR;
} else if (target == NULL) {
+ free((yyvsp[(2) - (4)].string));
yyerror(& (yylsp[(4) - (4)]), state,
"undefined variable binding in ALIAS statement");
YYERROR;
} else {
- _mesa_symbol_table_add_symbol(state->st, 0, strdup((yyvsp[(2) - (4)].string)), target);
+ _mesa_symbol_table_add_symbol(state->st, 0, (yyvsp[(2) - (4)].string), target);
}
;}
break;
@@ -4896,7 +4933,7 @@ yyreduce:
/* Line 1455 of yacc.c */
-#line 4900 "program_parse.tab.c"
+#line 4937 "program_parse.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5115,7 +5152,7 @@ yyreturn:
/* Line 1675 of yacc.c */
-#line 2158 "program_parse.y"
+#line 2195 "program_parse.y"
void
@@ -5222,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);
@@ -5245,19 +5284,31 @@ init_src_reg(struct asm_src_register *r)
}
-/** Like init_src_reg() but set the File and Index fields. */
+/** Like init_src_reg() but set the File and Index fields.
+ * \return GL_TRUE if a valid src register, GL_FALSE otherwise
+ */
void
set_src_reg(struct asm_src_register *r, gl_register_file file, GLint index)
{
+ set_src_reg_swz(r, file, index, SWIZZLE_XYZW);
+}
+
+
+void
+set_src_reg_swz(struct asm_src_register *r, gl_register_file file, GLint index,
+ GLuint swizzle)
+{
const GLint maxIndex = (1 << INST_INDEX_BITS) - 1;
const GLint minIndex = -(1 << INST_INDEX_BITS);
+ ASSERT(file < PROGRAM_FILE_MAX);
ASSERT(index >= minIndex);
+ (void) minIndex;
ASSERT(index <= maxIndex);
- ASSERT(file < PROGRAM_FILE_MAX);
+ (void) maxIndex;
memset(r, 0, sizeof(*r));
r->Base.File = file;
r->Base.Index = index;
- r->Base.Swizzle = SWIZZLE_NOOP;
+ r->Base.Swizzle = swizzle;
r->Symbol = NULL;
}
@@ -5298,14 +5349,10 @@ declare_variable(struct asm_parser_state *state, char *name, enum asm_type t,
if (exist != NULL) {
yyerror(locp, state, "redeclared identifier");
} else {
- const size_t name_len = strlen(name);
-
- s = calloc(1, sizeof(struct asm_symbol) + name_len + 1);
- s->name = (char *)(s + 1);
+ s = calloc(1, sizeof(struct asm_symbol));
+ s->name = name;
s->type = t;
- memcpy((char *) s->name, name, name_len + 1);
-
switch (t) {
case at_temp:
if (state->prog->NumTemporaries >= state->limits->MaxTemps) {
@@ -5393,15 +5440,20 @@ initialize_symbol_from_state(struct gl_program *prog,
state_tokens[2] = state_tokens[3] = row;
idx = add_state_reference(prog->Parameters, state_tokens);
- if (param_var->param_binding_begin == ~0U)
+ if (param_var->param_binding_begin == ~0U) {
param_var->param_binding_begin = idx;
+ param_var->param_binding_swizzle = SWIZZLE_XYZW;
+ }
+
param_var->param_binding_length++;
}
}
else {
idx = add_state_reference(prog->Parameters, state_tokens);
- if (param_var->param_binding_begin == ~0U)
+ if (param_var->param_binding_begin == ~0U) {
param_var->param_binding_begin = idx;
+ param_var->param_binding_swizzle = SWIZZLE_XYZW;
+ }
param_var->param_binding_length++;
}
@@ -5425,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
@@ -5441,15 +5496,19 @@ initialize_symbol_from_param(struct gl_program *prog,
state_tokens[2] = state_tokens[3] = row;
idx = add_state_reference(prog->Parameters, state_tokens);
- if (param_var->param_binding_begin == ~0U)
+ if (param_var->param_binding_begin == ~0U) {
param_var->param_binding_begin = idx;
+ param_var->param_binding_swizzle = SWIZZLE_XYZW;
+ }
param_var->param_binding_length++;
}
}
else {
idx = add_state_reference(prog->Parameters, state_tokens);
- if (param_var->param_binding_begin == ~0U)
+ if (param_var->param_binding_begin == ~0U) {
param_var->param_binding_begin = idx;
+ param_var->param_binding_swizzle = SWIZZLE_XYZW;
+ }
param_var->param_binding_length++;
}
@@ -5457,20 +5516,34 @@ initialize_symbol_from_param(struct gl_program *prog,
}
+/**
+ * Put a float/vector constant/literal into the parameter list.
+ * \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)
{
- const int idx = _mesa_add_parameter(prog->Parameters, PROGRAM_CONSTANT,
- NULL, vec->count, GL_NONE, vec->data,
- NULL, 0x0);
+ unsigned swizzle;
+ const int idx = _mesa_add_unnamed_constant(prog->Parameters,
+ 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)
+ if (param_var->param_binding_begin == ~0U) {
param_var->param_binding_begin = idx;
+ param_var->param_binding_swizzle = allowSwizzle ? swizzle : SWIZZLE_XYZW;
+ }
param_var->param_binding_length++;
return idx;
@@ -5553,11 +5626,6 @@ _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();
@@ -5647,6 +5715,7 @@ error:
for (sym = state->sym; sym != NULL; sym = temp) {
temp = sym->next;
+ _mesa_free((void *) sym->name);
_mesa_free(sym);
}
state->sym = NULL;
@@ -5654,11 +5723,6 @@ 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;
}