Web: Turn off bracket-style attributes, reflection, and IO mapping.

This commit is contained in:
John Kessenich 2019-08-06 02:20:45 -06:00
parent 7015bd658e
commit b6d3ee5aca
12 changed files with 176 additions and 110 deletions

View File

@ -1071,11 +1071,13 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages))
LinkFailed = true;
#ifndef GLSLANG_WEB
// Map IO
if (Options & EOptionSpv) {
if (!program.mapIO())
LinkFailed = true;
}
#endif
// Report
if (! (Options & EOptionSuppressInfolog) &&
@ -1084,11 +1086,13 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
PutsIfNonEmpty(program.getInfoDebugLog());
}
#ifndef GLSLANG_WEB
// Reflect
if (Options & EOptionDumpReflection) {
program.buildReflection(ReflectOptions);
program.dumpReflection();
}
#endif
// Dump SPIR-V
if (Options & EOptionSpv) {

View File

@ -421,6 +421,7 @@ public:
void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
#ifndef GLSLANG_WEB
TAttributeType attributeFromName(const TString& name) const;
TAttributes* makeAttributes(const TString& identifier) const;
TAttributes* makeAttributes(const TString& identifier, TIntermNode* node) const;
@ -429,9 +430,9 @@ public:
// Determine selection control from attributes
void handleSelectionAttributes(const TAttributes& attributes, TIntermNode*);
void handleSwitchAttributes(const TAttributes& attributes, TIntermNode*);
// Determine loop control from attributes
void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
#endif
void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember);

View File

@ -1860,7 +1860,11 @@ const char* TShader::getInfoDebugLog()
return infoSink->debug.c_str();
}
TProgram::TProgram() : reflection(0), linked(false)
TProgram::TProgram() :
#ifndef GLSLANG_WEB
reflection(0),
#endif
linked(false)
{
pool = new TPoolAllocator;
infoSink = new TInfoSink;
@ -1873,7 +1877,9 @@ TProgram::TProgram() : reflection(0), linked(false)
TProgram::~TProgram()
{
delete infoSink;
#ifndef GLSLANG_WEB
delete reflection;
#endif
for (int s = 0; s < EShLangCount; ++s)
if (newedIntermediate[s])
@ -1985,6 +1991,8 @@ const char* TProgram::getInfoDebugLog()
return infoSink->debug.c_str();
}
#ifndef GLSLANG_WEB
//
// Reflection implementation.
//
@ -2062,4 +2070,6 @@ bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper)
return ioMapper->doMap(pResolver, *infoSink);
}
#endif // GLSLANG_WEB
} // end namespace glslang

View File

@ -34,6 +34,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
#ifndef GLSLANG_WEB
#include "attribute.h"
#include "../Include/intermediate.h"
#include "ParseHelper.h"
@ -339,5 +341,6 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN
}
}
} // end namespace glslang
#endif // GLSLANG_WEB

View File

@ -3662,7 +3662,9 @@ selection_statement
$$ = $1;
}
| attribute selection_statement_nonattributed {
#ifndef GLSLANG_WEB
parseContext.handleSelectionAttributes(*$1, $2);
#endif
$$ = $2;
}
@ -3707,7 +3709,9 @@ switch_statement
$$ = $1;
}
| attribute switch_statement_nonattributed {
#ifndef GLSLANG_WEB
parseContext.handleSwitchAttributes(*$1, $2);
#endif
$$ = $2;
}
@ -3769,7 +3773,9 @@ iteration_statement
$$ = $1;
}
| attribute iteration_statement_nonattributed {
#ifndef GLSLANG_WEB
parseContext.handleLoopAttributes(*$1, $2);
#endif
$$ = $2;
}
@ -3943,15 +3949,21 @@ attribute_list
$$ = $1;
}
| attribute_list COMMA single_attribute {
#ifndef GLSLANG_WEB
$$ = parseContext.mergeAttributes($1, $3);
#endif
}
single_attribute
: IDENTIFIER {
#ifndef GLSLANG_WEB
$$ = parseContext.makeAttributes(*$1.string);
#endif
}
| IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN {
#ifndef GLSLANG_WEB
$$ = parseContext.makeAttributes(*$1.string, $3);
#endif
}
%%

View File

@ -995,12 +995,12 @@ static const yytype_uint16 yyrline[] =
3510, 3515, 3526, 3529, 3535, 3544, 3547, 3553, 3557, 3558,
3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3575, 3583,
3584, 3588, 3584, 3600, 3601, 3605, 3605, 3612, 3612, 3626,
3629, 3637, 3645, 3656, 3657, 3661, 3664, 3670, 3677, 3681,
3689, 3693, 3706, 3709, 3715, 3715, 3735, 3738, 3744, 3756,
3768, 3771, 3777, 3777, 3792, 3792, 3808, 3808, 3829, 3832,
3838, 3841, 3847, 3851, 3858, 3863, 3868, 3875, 3878, 3887,
3891, 3900, 3903, 3906, 3914, 3914, 3936, 3942, 3945, 3950,
3953
3629, 3637, 3645, 3656, 3657, 3661, 3664, 3672, 3679, 3683,
3691, 3695, 3708, 3711, 3719, 3719, 3739, 3742, 3748, 3760,
3772, 3775, 3783, 3783, 3798, 3798, 3814, 3814, 3835, 3838,
3844, 3847, 3853, 3857, 3864, 3869, 3874, 3881, 3884, 3893,
3897, 3906, 3909, 3912, 3920, 3920, 3942, 3948, 3951, 3958,
3963
};
#endif
@ -9956,50 +9956,52 @@ yyreduce:
case 536:
#line 3664 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifndef GLSLANG_WEB
parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
#endif
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 9963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 9965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 537:
#line 3670 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3672 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
(yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
}
#line 9972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 9974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 538:
#line 3677 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3679 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
}
#line 9981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 9983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 539:
#line 3681 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3683 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
(yyval.interm.nodePair).node2 = 0;
}
#line 9990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 9992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 540:
#line 3689 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3691 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
}
#line 9999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 541:
#line 3693 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3695 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
@ -10010,28 +10012,30 @@ yyreduce:
else
(yyval.interm.intermTypedNode) = 0;
}
#line 10014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 542:
#line 3706 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3708 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 543:
#line 3709 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3711 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifndef GLSLANG_WEB
parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
#endif
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 544:
#line 3715 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3719 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// start new switch sequence on the switch stack
++parseContext.controlFlowNestingLevel;
@ -10040,11 +10044,11 @@ yyreduce:
parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
parseContext.symbolTable.push();
}
#line 10044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 545:
#line 3723 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3727 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
delete parseContext.switchSequenceStack.back();
@ -10054,27 +10058,27 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
#line 10058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 546:
#line 3735 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3739 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
}
#line 10066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 547:
#line 3738 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3742 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 548:
#line 3744 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3748 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0)
@ -10087,11 +10091,11 @@ yyreduce:
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
}
}
#line 10091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 549:
#line 3756 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3760 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0)
@ -10101,28 +10105,30 @@ yyreduce:
else
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
}
#line 10105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 550:
#line 3768 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3772 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 551:
#line 3771 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3775 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifndef GLSLANG_WEB
parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
#endif
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 552:
#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3783 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@ -10131,11 +10137,11 @@ yyreduce:
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
#line 10135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 553:
#line 3785 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3791 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
(yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@ -10143,21 +10149,21 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
#line 10147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 554:
#line 3792 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3798 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 555:
#line 3797 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@ -10169,22 +10175,22 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 556:
#line 3808 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3814 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
#line 10184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 557:
#line 3814 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3820 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@ -10197,81 +10203,81 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
#line 10201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 558:
#line 3829 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3835 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 559:
#line 3832 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3838 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 560:
#line 3838 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3844 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
#line 10225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 561:
#line 3841 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3847 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermTypedNode) = 0;
}
#line 10233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 562:
#line 3847 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3853 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = 0;
}
#line 10242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 563:
#line 3851 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3857 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
}
#line 10251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 564:
#line 3858 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3864 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (parseContext.loopNestingLevel <= 0)
parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
}
#line 10261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 565:
#line 3863 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3869 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
}
#line 10271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 566:
#line 3868 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3874 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@ -10279,83 +10285,83 @@ yyreduce:
if (parseContext.inMain)
parseContext.postEntryPointReturn = true;
}
#line 10283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 567:
#line 3875 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3881 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
}
#line 10291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 568:
#line 3878 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3884 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
}
#line 10300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 569:
#line 3887 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3893 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
#line 10309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 570:
#line 3891 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3897 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
if ((yyvsp[0].interm.intermNode) != nullptr) {
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
}
#line 10320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 571:
#line 3900 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3906 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 572:
#line 3903 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3909 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
#line 10336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 573:
#line 3906 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3912 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
(yyval.interm.intermNode) = nullptr;
}
#line 10346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 574:
#line 3914 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3920 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
(yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
}
#line 10355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 575:
#line 3918 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3924 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
// May be best done as post process phase on intermediate code
if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@ -10371,52 +10377,58 @@ yyreduce:
(yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
(yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
}
#line 10375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 576:
#line 3936 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3942 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
}
#line 10384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 577:
#line 3942 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3948 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = (yyvsp[0].interm.attributes);
}
#line 10392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 578:
#line 3945 "MachineIndependent/glslang.y" /* yacc.c:1646 */
#line 3951 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifndef GLSLANG_WEB
(yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
}
#line 10400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 579:
#line 3950 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
#endif
}
#line 10408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 580:
#line 3953 "MachineIndependent/glslang.y" /* yacc.c:1646 */
case 579:
#line 3958 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
#ifndef GLSLANG_WEB
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
#endif
}
#line 10416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
case 580:
#line 3963 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
#ifndef GLSLANG_WEB
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
#endif
}
#line 10428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break;
#line 10420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
#line 10432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@ -10644,5 +10656,5 @@ yyreturn:
#endif
return yyresult;
}
#line 3957 "MachineIndependent/glslang.y" /* yacc.c:1906 */
#line 3969 "MachineIndependent/glslang.y" /* yacc.c:1906 */

View File

@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
#ifndef GLSLANG_WEB
#include "../Include/Common.h"
#include "../Include/InfoSink.h"
@ -1239,3 +1241,5 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) {
}
} // end namespace glslang
#endif // GLSLANG_WEB

View File

@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
#ifndef GLSLANG_WEB
#ifndef _IOMAPPER_INCLUDED
#define _IOMAPPER_INCLUDED
@ -293,3 +295,5 @@ public:
} // end namespace glslang
#endif // _IOMAPPER_INCLUDED
#endif // GLSLANG_WEB

View File

@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
#ifndef GLSLANG_WEB
#include "../Include/Common.h"
#include "reflection.h"
#include "LiveTraverser.h"
@ -1198,3 +1200,5 @@ void TReflection::dump()
}
} // end namespace glslang
#endif // GLSLANG_WEB

View File

@ -33,6 +33,8 @@
// POSSIBILITY OF SUCH DAMAGE.
//
#ifndef GLSLANG_WEB
#ifndef _REFLECTION_INCLUDED
#define _REFLECTION_INCLUDED
@ -201,3 +203,5 @@ protected:
} // end namespace glslang
#endif // _REFLECTION_INCLUDED
#endif // GLSLANG_WEB

View File

@ -617,6 +617,8 @@ private:
TShader& operator=(TShader&);
};
#ifndef GLSLANG_WEB
//
// A reflection database and its interface, consistent with the OpenGL API reflection queries.
//
@ -732,6 +734,8 @@ public:
virtual void addStage(EShLanguage stage) = 0;
};
#endif // GLSLANG_WEB
// Make one TProgram per set of shaders that will get linked together. Add all
// the shaders that are to be linked together. After calling shader.parse()
// for all shaders, call link().
@ -751,14 +755,14 @@ public:
TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
#ifndef GLSLANG_WEB
// Reflection Interface
// call first, to do liveness analysis, index mapping, etc.; returns false on failure
bool buildReflection(int opts = EShReflectionDefault);
unsigned getLocalSize(int dim) const; // return dim'th local size
int getReflectionIndex(const char *name) const;
int getNumUniformVariables() const;
const TObjectReflection& getUniform(int index) const;
int getNumUniformBlocks() const;
@ -837,11 +841,11 @@ public:
const TType *getAttributeTType(int index) const { return getPipeInput(index).getType(); }
void dumpReflection();
// I/O mapping: apply base offsets and map live unbound variables
// If resolver is not provided it uses the previous approach
// and respects auto assignment and offsets.
bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
#endif
protected:
bool linkStage(EShLanguage, EShMessages);
@ -851,7 +855,9 @@ protected:
TIntermediate* intermediate[EShLangCount];
bool newedIntermediate[EShLangCount]; // track which intermediate were "new" versus reusing a singleton unit in a stage
TInfoSink* infoSink;
#ifndef GLSLANG_WEB
TReflection* reflection;
#endif
bool linked;
private:

View File

@ -308,7 +308,9 @@ public:
program.addShader(&shader);
success &= program.link(controls);
#ifndef GLSLANG_WEB
success &= program.mapIO();
#endif
spv::SpvBuildLogger logger;