Completing the "length()" intrinsic function implementation The implementation of the length() function was already added to TParseContext::addFunctionCallOrMethod() in a previous cl, but it was still unused because addFunctionCallOrMethod() was always called with the 3rd argument as nullptr. This cl adds the missing code required to get the length function working. Change-Id: I3339ae8b60f5f577caa0a39f88c6ed0c626879b2 Reviewed-on: https://swiftshader-review.googlesource.com/3641 Tested-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/glslang.y b/src/OpenGL/compiler/glslang.y index 47f22fa..17b5cee 100644 --- a/src/OpenGL/compiler/glslang.y +++ b/src/OpenGL/compiler/glslang.y
@@ -290,7 +290,7 @@ function_call : function_call_or_method { bool fatalError = false; - $$ = context->addFunctionCallOrMethod($1.function, $1.intermNode, nullptr, @1, &fatalError); + $$ = context->addFunctionCallOrMethod($1.function, $1.nodePair.node1, $1.nodePair.node2, @1, &fatalError); if (fatalError) { YYERROR; @@ -301,11 +301,12 @@ function_call_or_method : function_call_generic { $$ = $1; + $$.nodePair.node2 = nullptr; } | postfix_expression DOT function_call_generic { - context->error(@3, "methods are not supported", ""); - context->recover(); + ES3_ONLY("", @3, "methods"); $$ = $3; + $$.nodePair.node2 = $1; } ; @@ -321,11 +322,11 @@ function_call_header_no_parameters : function_call_header VOID_TYPE { $$.function = $1; - $$.intermNode = 0; + $$.nodePair.node1 = nullptr; } | function_call_header { $$.function = $1; - $$.intermNode = 0; + $$.nodePair.node1 = nullptr; } ; @@ -334,13 +335,13 @@ TParameter param = { 0, new TType($2->getType()) }; $1->addParameter(param); $$.function = $1; - $$.intermNode = $2; + $$.nodePair.node1 = $2; } | function_call_header_with_parameters COMMA assignment_expression { TParameter param = { 0, new TType($3->getType()) }; $1.function->addParameter(param); $$.function = $1.function; - $$.intermNode = context->intermediate.growAggregate($1.intermNode, $3, @2); + $$.nodePair.node1 = context->intermediate.growAggregate($1.intermNode, $3, @2); } ;
diff --git a/src/OpenGL/compiler/glslang_tab.cpp b/src/OpenGL/compiler/glslang_tab.cpp index ca610b9..c5c98bb 100644 --- a/src/OpenGL/compiler/glslang_tab.cpp +++ b/src/OpenGL/compiler/glslang_tab.cpp
@@ -779,33 +779,33 @@ static const yytype_uint16 yyrline[] = { 0, 214, 214, 233, 236, 241, 246, 251, 256, 262, - 265, 268, 271, 274, 277, 283, 291, 302, 305, 313, - 316, 322, 326, 333, 339, 348, 356, 362, 369, 379, - 382, 392, 402, 424, 425, 426, 427, 435, 436, 440, - 444, 452, 453, 456, 462, 463, 467, 474, 475, 478, - 481, 484, 490, 491, 494, 500, 501, 508, 509, 516, - 517, 524, 525, 531, 532, 538, 539, 545, 546, 552, - 553, 561, 562, 563, 564, 566, 567, 568, 571, 574, - 577, 580, 586, 589, 600, 608, 616, 643, 649, 656, - 660, 664, 668, 675, 712, 715, 722, 730, 751, 772, - 782, 810, 815, 825, 830, 840, 843, 846, 849, 855, - 862, 865, 869, 873, 878, 883, 890, 894, 898, 902, - 907, 912, 916, 923, 933, 939, 942, 948, 954, 961, - 970, 979, 982, 985, 992, 996, 1000, 1005, 1013, 1016, - 1020, 1024, 1033, 1042, 1050, 1060, 1067, 1070, 1073, 1079, - 1086, 1089, 1095, 1098, 1101, 1107, 1110, 1115, 1130, 1134, - 1138, 1142, 1146, 1150, 1155, 1160, 1165, 1170, 1175, 1180, - 1185, 1190, 1195, 1200, 1205, 1210, 1216, 1222, 1228, 1234, - 1240, 1246, 1252, 1258, 1264, 1269, 1274, 1283, 1288, 1293, - 1298, 1303, 1308, 1313, 1318, 1323, 1328, 1333, 1338, 1343, - 1348, 1353, 1366, 1366, 1369, 1369, 1375, 1378, 1394, 1397, - 1406, 1410, 1416, 1423, 1438, 1442, 1446, 1447, 1453, 1454, - 1455, 1456, 1457, 1458, 1459, 1463, 1464, 1464, 1464, 1474, - 1475, 1479, 1479, 1480, 1480, 1485, 1488, 1498, 1501, 1507, - 1508, 1512, 1520, 1524, 1531, 1531, 1538, 1541, 1550, 1555, - 1572, 1572, 1577, 1577, 1584, 1584, 1592, 1595, 1601, 1604, - 1610, 1614, 1621, 1624, 1627, 1630, 1633, 1642, 1646, 1653, - 1656, 1662, 1662 + 265, 268, 271, 274, 277, 283, 291, 302, 306, 314, + 317, 323, 327, 334, 340, 349, 357, 363, 370, 380, + 383, 393, 403, 425, 426, 427, 428, 436, 437, 441, + 445, 453, 454, 457, 463, 464, 468, 475, 476, 479, + 482, 485, 491, 492, 495, 501, 502, 509, 510, 517, + 518, 525, 526, 532, 533, 539, 540, 546, 547, 553, + 554, 562, 563, 564, 565, 567, 568, 569, 572, 575, + 578, 581, 587, 590, 601, 609, 617, 644, 650, 657, + 661, 665, 669, 676, 713, 716, 723, 731, 752, 773, + 783, 811, 816, 826, 831, 841, 844, 847, 850, 856, + 863, 866, 870, 874, 879, 884, 891, 895, 899, 903, + 908, 913, 917, 924, 934, 940, 943, 949, 955, 962, + 971, 980, 983, 986, 993, 997, 1001, 1006, 1014, 1017, + 1021, 1025, 1034, 1043, 1051, 1061, 1068, 1071, 1074, 1080, + 1087, 1090, 1096, 1099, 1102, 1108, 1111, 1116, 1131, 1135, + 1139, 1143, 1147, 1151, 1156, 1161, 1166, 1171, 1176, 1181, + 1186, 1191, 1196, 1201, 1206, 1211, 1217, 1223, 1229, 1235, + 1241, 1247, 1253, 1259, 1265, 1270, 1275, 1284, 1289, 1294, + 1299, 1304, 1309, 1314, 1319, 1324, 1329, 1334, 1339, 1344, + 1349, 1354, 1367, 1367, 1370, 1370, 1376, 1379, 1395, 1398, + 1407, 1411, 1417, 1424, 1439, 1443, 1447, 1448, 1454, 1455, + 1456, 1457, 1458, 1459, 1460, 1464, 1465, 1465, 1465, 1475, + 1476, 1480, 1480, 1481, 1481, 1486, 1489, 1499, 1502, 1508, + 1509, 1513, 1521, 1525, 1532, 1532, 1539, 1542, 1551, 1556, + 1573, 1573, 1578, 1578, 1585, 1585, 1593, 1596, 1602, 1605, + 1611, 1615, 1622, 1625, 1628, 1631, 1634, 1643, 1647, 1654, + 1657, 1663, 1663 }; #endif @@ -2628,7 +2628,7 @@ { bool fatalError = false; - (yyval.interm.intermTypedNode) = context->addFunctionCallOrMethod((yyvsp[(1) - (1)].interm).function, (yyvsp[(1) - (1)].interm).intermNode, nullptr, (yylsp[(1) - (1)]), &fatalError); + (yyval.interm.intermTypedNode) = context->addFunctionCallOrMethod((yyvsp[(1) - (1)].interm).function, (yyvsp[(1) - (1)].interm).nodePair.node1, (yyvsp[(1) - (1)].interm).nodePair.node2, (yylsp[(1) - (1)]), &fatalError); if (fatalError) { YYERROR; @@ -2640,15 +2640,16 @@ { (yyval.interm) = (yyvsp[(1) - (1)].interm); + (yyval.interm).nodePair.node2 = nullptr; } break; case 18: { - context->error((yylsp[(3) - (3)]), "methods are not supported", ""); - context->recover(); + ES3_ONLY("", (yylsp[(3) - (3)]), "methods"); (yyval.interm) = (yyvsp[(3) - (3)].interm); + (yyval.interm).nodePair.node2 = (yyvsp[(1) - (3)].interm.intermTypedNode); } break; @@ -2670,7 +2671,7 @@ { (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); - (yyval.interm).intermNode = 0; + (yyval.interm).nodePair.node1 = nullptr; } break; @@ -2678,7 +2679,7 @@ { (yyval.interm).function = (yyvsp[(1) - (1)].interm.function); - (yyval.interm).intermNode = 0; + (yyval.interm).nodePair.node1 = nullptr; } break; @@ -2688,7 +2689,7 @@ TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) }; (yyvsp[(1) - (2)].interm.function)->addParameter(param); (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); - (yyval.interm).intermNode = (yyvsp[(2) - (2)].interm.intermTypedNode); + (yyval.interm).nodePair.node1 = (yyvsp[(2) - (2)].interm.intermTypedNode); } break; @@ -2698,7 +2699,7 @@ TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) }; (yyvsp[(1) - (3)].interm).function->addParameter(param); (yyval.interm).function = (yyvsp[(1) - (3)].interm).function; - (yyval.interm).intermNode = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)])); + (yyval.interm).nodePair.node1 = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)])); } break;