ARP prog parser: Implement the spec, not what makes sense

This commit is contained in:
Ian Romanick 2009-07-29 21:07:41 -07:00
parent 48183ca8b6
commit 600710907c
2 changed files with 89 additions and 71 deletions

View file

@ -777,12 +777,12 @@ static const yytype_uint16 yyrline[] =
1357, 1366, 1369, 1375, 1379, 1383, 1389, 1400, 1405, 1410,
1415, 1420, 1425, 1433, 1436, 1441, 1454, 1462, 1473, 1481,
1481, 1483, 1483, 1485, 1495, 1500, 1507, 1517, 1526, 1531,
1538, 1548, 1558, 1570, 1570, 1571, 1571, 1573, 1580, 1585,
1592, 1600, 1608, 1617, 1628, 1632, 1638, 1639, 1640, 1643,
1643, 1646, 1646, 1649, 1655, 1663, 1676, 1685, 1694, 1698,
1707, 1716, 1727, 1734, 1739, 1748, 1760, 1763, 1772, 1783,
1784, 1785, 1788, 1789, 1790, 1793, 1794, 1797, 1798, 1801,
1802, 1805, 1816, 1827, 1838
1538, 1548, 1558, 1570, 1570, 1571, 1571, 1573, 1583, 1591,
1601, 1609, 1617, 1626, 1637, 1641, 1647, 1648, 1649, 1652,
1652, 1655, 1655, 1658, 1664, 1672, 1685, 1694, 1703, 1707,
1716, 1725, 1736, 1743, 1748, 1757, 1769, 1772, 1781, 1792,
1793, 1794, 1797, 1798, 1799, 1802, 1803, 1806, 1807, 1810,
1811, 1814, 1825, 1836, 1847
};
#endif
@ -4020,74 +4020,83 @@ yyreduce:
/* Line 1455 of yacc.c */
#line 1574 "program_parse.y"
{
(yyval.vector).count = 1;
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
(yyval.vector).data[1] = (yyvsp[(1) - (1)].real);
(yyval.vector).data[2] = (yyvsp[(1) - (1)].real);
(yyval.vector).data[3] = (yyvsp[(1) - (1)].real);
;}
break;
case 218:
/* Line 1455 of yacc.c */
#line 1581 "program_parse.y"
#line 1584 "program_parse.y"
{
(yyval.vector).count = 1;
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(1) - (1)].real);
(yyval.vector).data[1] = 0.0f;
(yyval.vector).data[2] = 0.0f;
(yyval.vector).data[3] = 1.0f;
;}
break;
case 219:
/* Line 1455 of yacc.c */
#line 1586 "program_parse.y"
#line 1592 "program_parse.y"
{
(yyval.vector).count = 1;
(yyval.vector).count = 4;
(yyval.vector).data[0] = (float) (yyvsp[(1) - (1)].integer);
(yyval.vector).data[1] = 0.0f;
(yyval.vector).data[2] = 0.0f;
(yyval.vector).data[3] = 1.0f;
;}
break;
case 220:
/* Line 1455 of yacc.c */
#line 1593 "program_parse.y"
#line 1602 "program_parse.y"
{
(yyval.vector).count = 1;
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (3)].real);
(yyval.vector).data[1] = 0.0f;
(yyval.vector).data[2] = 0.0f;
(yyval.vector).data[3] = 0.0f;
(yyval.vector).data[3] = 1.0f;
;}
break;
case 221:
/* Line 1455 of yacc.c */
#line 1601 "program_parse.y"
#line 1610 "program_parse.y"
{
(yyval.vector).count = 2;
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (5)].real);
(yyval.vector).data[1] = (yyvsp[(4) - (5)].real);
(yyval.vector).data[2] = 0.0f;
(yyval.vector).data[3] = 0.0f;
(yyval.vector).data[3] = 1.0f;
;}
break;
case 222:
/* Line 1455 of yacc.c */
#line 1610 "program_parse.y"
#line 1619 "program_parse.y"
{
(yyval.vector).count = 3;
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (7)].real);
(yyval.vector).data[1] = (yyvsp[(4) - (7)].real);
(yyval.vector).data[2] = (yyvsp[(6) - (7)].real);
(yyval.vector).data[3] = 0.0f;
(yyval.vector).data[3] = 1.0f;
;}
break;
case 223:
/* Line 1455 of yacc.c */
#line 1619 "program_parse.y"
#line 1628 "program_parse.y"
{
(yyval.vector).count = 4;
(yyval.vector).data[0] = (yyvsp[(2) - (9)].real);
@ -4100,7 +4109,7 @@ yyreduce:
case 224:
/* Line 1455 of yacc.c */
#line 1629 "program_parse.y"
#line 1638 "program_parse.y"
{
(yyval.real) = ((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].real) : (yyvsp[(2) - (2)].real);
;}
@ -4109,7 +4118,7 @@ yyreduce:
case 225:
/* Line 1455 of yacc.c */
#line 1633 "program_parse.y"
#line 1642 "program_parse.y"
{
(yyval.real) = (float)(((yyvsp[(1) - (2)].negate)) ? -(yyvsp[(2) - (2)].integer) : (yyvsp[(2) - (2)].integer));
;}
@ -4118,42 +4127,42 @@ yyreduce:
case 226:
/* Line 1455 of yacc.c */
#line 1638 "program_parse.y"
#line 1647 "program_parse.y"
{ (yyval.negate) = FALSE; ;}
break;
case 227:
/* Line 1455 of yacc.c */
#line 1639 "program_parse.y"
#line 1648 "program_parse.y"
{ (yyval.negate) = TRUE; ;}
break;
case 228:
/* Line 1455 of yacc.c */
#line 1640 "program_parse.y"
#line 1649 "program_parse.y"
{ (yyval.negate) = FALSE; ;}
break;
case 229:
/* Line 1455 of yacc.c */
#line 1643 "program_parse.y"
#line 1652 "program_parse.y"
{ (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
break;
case 231:
/* Line 1455 of yacc.c */
#line 1646 "program_parse.y"
#line 1655 "program_parse.y"
{ (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
break;
case 233:
/* Line 1455 of yacc.c */
#line 1650 "program_parse.y"
#line 1659 "program_parse.y"
{
if (!declare_variable(state, (yyvsp[(3) - (3)].string), (yyvsp[(0) - (3)].integer), & (yylsp[(3) - (3)]))) {
YYERROR;
@ -4164,7 +4173,7 @@ yyreduce:
case 234:
/* Line 1455 of yacc.c */
#line 1656 "program_parse.y"
#line 1665 "program_parse.y"
{
if (!declare_variable(state, (yyvsp[(1) - (1)].string), (yyvsp[(0) - (1)].integer), & (yylsp[(1) - (1)]))) {
YYERROR;
@ -4175,7 +4184,7 @@ yyreduce:
case 235:
/* Line 1455 of yacc.c */
#line 1664 "program_parse.y"
#line 1673 "program_parse.y"
{
struct asm_symbol *const s =
declare_variable(state, (yyvsp[(2) - (4)].string), at_output, & (yylsp[(2) - (4)]));
@ -4191,7 +4200,7 @@ yyreduce:
case 236:
/* Line 1455 of yacc.c */
#line 1677 "program_parse.y"
#line 1686 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_HPOS;
@ -4205,7 +4214,7 @@ yyreduce:
case 237:
/* Line 1455 of yacc.c */
#line 1686 "program_parse.y"
#line 1695 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_FOGC;
@ -4219,7 +4228,7 @@ yyreduce:
case 238:
/* Line 1455 of yacc.c */
#line 1695 "program_parse.y"
#line 1704 "program_parse.y"
{
(yyval.result) = (yyvsp[(2) - (2)].result);
;}
@ -4228,7 +4237,7 @@ yyreduce:
case 239:
/* Line 1455 of yacc.c */
#line 1699 "program_parse.y"
#line 1708 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_PSIZ;
@ -4242,7 +4251,7 @@ yyreduce:
case 240:
/* Line 1455 of yacc.c */
#line 1708 "program_parse.y"
#line 1717 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.result) = VERT_RESULT_TEX0 + (yyvsp[(3) - (3)].integer);
@ -4256,7 +4265,7 @@ yyreduce:
case 241:
/* Line 1455 of yacc.c */
#line 1717 "program_parse.y"
#line 1726 "program_parse.y"
{
if (state->mode == ARB_fragment) {
(yyval.result) = FRAG_RESULT_DEPTH;
@ -4270,7 +4279,7 @@ yyreduce:
case 242:
/* Line 1455 of yacc.c */
#line 1728 "program_parse.y"
#line 1737 "program_parse.y"
{
(yyval.result) = (yyvsp[(2) - (3)].integer) + (yyvsp[(3) - (3)].integer);
;}
@ -4279,7 +4288,7 @@ yyreduce:
case 243:
/* Line 1455 of yacc.c */
#line 1734 "program_parse.y"
#line 1743 "program_parse.y"
{
(yyval.integer) = (state->mode == ARB_vertex)
? VERT_RESULT_COL0
@ -4290,7 +4299,7 @@ yyreduce:
case 244:
/* Line 1455 of yacc.c */
#line 1740 "program_parse.y"
#line 1749 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = VERT_RESULT_COL0;
@ -4304,7 +4313,7 @@ yyreduce:
case 245:
/* Line 1455 of yacc.c */
#line 1749 "program_parse.y"
#line 1758 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = VERT_RESULT_BFC0;
@ -4318,7 +4327,7 @@ yyreduce:
case 246:
/* Line 1455 of yacc.c */
#line 1760 "program_parse.y"
#line 1769 "program_parse.y"
{
(yyval.integer) = 0;
;}
@ -4327,7 +4336,7 @@ yyreduce:
case 247:
/* Line 1455 of yacc.c */
#line 1764 "program_parse.y"
#line 1773 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = 0;
@ -4341,7 +4350,7 @@ yyreduce:
case 248:
/* Line 1455 of yacc.c */
#line 1773 "program_parse.y"
#line 1782 "program_parse.y"
{
if (state->mode == ARB_vertex) {
(yyval.integer) = 1;
@ -4355,91 +4364,91 @@ yyreduce:
case 249:
/* Line 1455 of yacc.c */
#line 1783 "program_parse.y"
#line 1792 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 250:
/* Line 1455 of yacc.c */
#line 1784 "program_parse.y"
#line 1793 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 251:
/* Line 1455 of yacc.c */
#line 1785 "program_parse.y"
#line 1794 "program_parse.y"
{ (yyval.integer) = 1; ;}
break;
case 252:
/* Line 1455 of yacc.c */
#line 1788 "program_parse.y"
#line 1797 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 253:
/* Line 1455 of yacc.c */
#line 1789 "program_parse.y"
#line 1798 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 254:
/* Line 1455 of yacc.c */
#line 1790 "program_parse.y"
#line 1799 "program_parse.y"
{ (yyval.integer) = 1; ;}
break;
case 255:
/* Line 1455 of yacc.c */
#line 1793 "program_parse.y"
#line 1802 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 256:
/* Line 1455 of yacc.c */
#line 1794 "program_parse.y"
#line 1803 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
break;
case 257:
/* Line 1455 of yacc.c */
#line 1797 "program_parse.y"
#line 1806 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 258:
/* Line 1455 of yacc.c */
#line 1798 "program_parse.y"
#line 1807 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
break;
case 259:
/* Line 1455 of yacc.c */
#line 1801 "program_parse.y"
#line 1810 "program_parse.y"
{ (yyval.integer) = 0; ;}
break;
case 260:
/* Line 1455 of yacc.c */
#line 1802 "program_parse.y"
#line 1811 "program_parse.y"
{ (yyval.integer) = (yyvsp[(2) - (3)].integer); ;}
break;
case 261:
/* Line 1455 of yacc.c */
#line 1806 "program_parse.y"
#line 1815 "program_parse.y"
{
if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureCoordUnits) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid texture coordinate unit selector");
@ -4453,7 +4462,7 @@ yyreduce:
case 262:
/* Line 1455 of yacc.c */
#line 1817 "program_parse.y"
#line 1826 "program_parse.y"
{
if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureImageUnits) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid texture image unit selector");
@ -4467,7 +4476,7 @@ yyreduce:
case 263:
/* Line 1455 of yacc.c */
#line 1828 "program_parse.y"
#line 1837 "program_parse.y"
{
if ((unsigned) (yyvsp[(1) - (1)].integer) >= state->MaxTextureUnits) {
yyerror(& (yylsp[(1) - (1)]), state, "invalid texture unit selector");
@ -4481,7 +4490,7 @@ yyreduce:
case 264:
/* Line 1455 of yacc.c */
#line 1839 "program_parse.y"
#line 1848 "program_parse.y"
{
struct asm_symbol *exist = (struct asm_symbol *)
_mesa_symbol_table_find_symbol(state->st, 0, (yyvsp[(2) - (4)].string));
@ -4505,7 +4514,7 @@ yyreduce:
/* Line 1455 of yacc.c */
#line 4509 "program_parse.tab.c"
#line 4518 "program_parse.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@ -4724,7 +4733,7 @@ yyreturn:
/* Line 1675 of yacc.c */
#line 1859 "program_parse.y"
#line 1868 "program_parse.y"
struct asm_instruction *

View file

@ -1572,47 +1572,56 @@ paramConstUse: paramConstScalarUse | paramConstVector;
paramConstScalarDecl: signedFloatConstant
{
$$.count = 1;
$$.count = 4;
$$.data[0] = $1;
$$.data[1] = $1;
$$.data[2] = $1;
$$.data[3] = $1;
}
;
paramConstScalarUse: REAL
{
$$.count = 1;
$$.count = 4;
$$.data[0] = $1;
$$.data[1] = 0.0f;
$$.data[2] = 0.0f;
$$.data[3] = 1.0f;
}
| INTEGER
{
$$.count = 1;
$$.count = 4;
$$.data[0] = (float) $1;
$$.data[1] = 0.0f;
$$.data[2] = 0.0f;
$$.data[3] = 1.0f;
}
;
paramConstVector: '{' signedFloatConstant '}'
{
$$.count = 1;
$$.count = 4;
$$.data[0] = $2;
$$.data[1] = 0.0f;
$$.data[2] = 0.0f;
$$.data[3] = 0.0f;
$$.data[3] = 1.0f;
}
| '{' signedFloatConstant ',' signedFloatConstant '}'
{
$$.count = 2;
$$.count = 4;
$$.data[0] = $2;
$$.data[1] = $4;
$$.data[2] = 0.0f;
$$.data[3] = 0.0f;
$$.data[3] = 1.0f;
}
| '{' signedFloatConstant ',' signedFloatConstant ','
signedFloatConstant '}'
{
$$.count = 3;
$$.count = 4;
$$.data[0] = $2;
$$.data[1] = $4;
$$.data[2] = $6;
$$.data[3] = 0.0f;
$$.data[3] = 1.0f;
}
| '{' signedFloatConstant ',' signedFloatConstant ','
signedFloatConstant ',' signedFloatConstant '}'