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

View File

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

View File

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

View File

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

View File

@ -3662,7 +3662,9 @@ selection_statement
$$ = $1; $$ = $1;
} }
| attribute selection_statement_nonattributed { | attribute selection_statement_nonattributed {
#ifndef GLSLANG_WEB
parseContext.handleSelectionAttributes(*$1, $2); parseContext.handleSelectionAttributes(*$1, $2);
#endif
$$ = $2; $$ = $2;
} }
@ -3707,7 +3709,9 @@ switch_statement
$$ = $1; $$ = $1;
} }
| attribute switch_statement_nonattributed { | attribute switch_statement_nonattributed {
#ifndef GLSLANG_WEB
parseContext.handleSwitchAttributes(*$1, $2); parseContext.handleSwitchAttributes(*$1, $2);
#endif
$$ = $2; $$ = $2;
} }
@ -3769,7 +3773,9 @@ iteration_statement
$$ = $1; $$ = $1;
} }
| attribute iteration_statement_nonattributed { | attribute iteration_statement_nonattributed {
#ifndef GLSLANG_WEB
parseContext.handleLoopAttributes(*$1, $2); parseContext.handleLoopAttributes(*$1, $2);
#endif
$$ = $2; $$ = $2;
} }
@ -3943,15 +3949,21 @@ attribute_list
$$ = $1; $$ = $1;
} }
| attribute_list COMMA single_attribute { | attribute_list COMMA single_attribute {
#ifndef GLSLANG_WEB
$$ = parseContext.mergeAttributes($1, $3); $$ = parseContext.mergeAttributes($1, $3);
#endif
} }
single_attribute single_attribute
: IDENTIFIER { : IDENTIFIER {
#ifndef GLSLANG_WEB
$$ = parseContext.makeAttributes(*$1.string); $$ = parseContext.makeAttributes(*$1.string);
#endif
} }
| IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN { | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN {
#ifndef GLSLANG_WEB
$$ = parseContext.makeAttributes(*$1.string, $3); $$ = 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, 3510, 3515, 3526, 3529, 3535, 3544, 3547, 3553, 3557, 3558,
3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3575, 3583, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3575, 3583,
3584, 3588, 3584, 3600, 3601, 3605, 3605, 3612, 3612, 3626, 3584, 3588, 3584, 3600, 3601, 3605, 3605, 3612, 3612, 3626,
3629, 3637, 3645, 3656, 3657, 3661, 3664, 3670, 3677, 3681, 3629, 3637, 3645, 3656, 3657, 3661, 3664, 3672, 3679, 3683,
3689, 3693, 3706, 3709, 3715, 3715, 3735, 3738, 3744, 3756, 3691, 3695, 3708, 3711, 3719, 3719, 3739, 3742, 3748, 3760,
3768, 3771, 3777, 3777, 3792, 3792, 3808, 3808, 3829, 3832, 3772, 3775, 3783, 3783, 3798, 3798, 3814, 3814, 3835, 3838,
3838, 3841, 3847, 3851, 3858, 3863, 3868, 3875, 3878, 3887, 3844, 3847, 3853, 3857, 3864, 3869, 3874, 3881, 3884, 3893,
3891, 3900, 3903, 3906, 3914, 3914, 3936, 3942, 3945, 3950, 3897, 3906, 3909, 3912, 3920, 3920, 3942, 3948, 3951, 3958,
3953 3963
}; };
#endif #endif
@ -9956,50 +9956,52 @@ yyreduce:
case 536: case 536:
#line 3664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3664 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
#ifndef GLSLANG_WEB
parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
#endif
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); (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; break;
case 537: 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)); 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); (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; break;
case 538: 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).node1 = (yyvsp[-2].interm.intermNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].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; break;
case 539: 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).node1 = (yyvsp[0].interm.intermNode);
(yyval.interm.nodePair).node2 = 0; (yyval.interm.nodePair).node2 = 0;
} }
#line 9990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 9992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 540: 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); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (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; break;
case 541: 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)); parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
@ -10010,28 +10012,30 @@ yyreduce:
else else
(yyval.interm.intermTypedNode) = 0; (yyval.interm.intermTypedNode) = 0;
} }
#line 10014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 542: 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); (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; break;
case 543: 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)); parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
#endif
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); (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; break;
case 544: 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 // start new switch sequence on the switch stack
++parseContext.controlFlowNestingLevel; ++parseContext.controlFlowNestingLevel;
@ -10040,11 +10044,11 @@ yyreduce:
parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
parseContext.symbolTable.push(); parseContext.symbolTable.push();
} }
#line 10044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 545: 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); (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(); delete parseContext.switchSequenceStack.back();
@ -10054,27 +10058,27 @@ yyreduce:
--parseContext.statementNestingLevel; --parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel; --parseContext.controlFlowNestingLevel;
} }
#line 10058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 546: case 546:
#line 3735 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3739 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
(yyval.interm.intermNode) = 0; (yyval.interm.intermNode) = 0;
} }
#line 10066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 547: 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); (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; break;
case 548: case 548:
#line 3744 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3748 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
(yyval.interm.intermNode) = 0; (yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 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); (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; break;
case 549: case 549:
#line 3756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3760 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
(yyval.interm.intermNode) = 0; (yyval.interm.intermNode) = 0;
if (parseContext.switchLevel.size() == 0) if (parseContext.switchLevel.size() == 0)
@ -10101,28 +10105,30 @@ yyreduce:
else else
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); (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; break;
case 550: 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); (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; break;
case 551: 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)); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
#endif
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); (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; break;
case 552: case 552:
#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3783 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
if (! parseContext.limits.whileLoops) if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@ -10131,11 +10137,11 @@ yyreduce:
++parseContext.statementNestingLevel; ++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel; ++parseContext.controlFlowNestingLevel;
} }
#line 10135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 553: case 553:
#line 3785 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3791 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); 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); (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.statementNestingLevel;
--parseContext.controlFlowNestingLevel; --parseContext.controlFlowNestingLevel;
} }
#line 10147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 554: case 554:
#line 3792 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3798 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
++parseContext.loopNestingLevel; ++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel; ++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel; ++parseContext.controlFlowNestingLevel;
} }
#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 555: case 555:
#line 3797 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3803 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
if (! parseContext.limits.whileLoops) if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@ -10169,22 +10175,22 @@ yyreduce:
--parseContext.statementNestingLevel; --parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel; --parseContext.controlFlowNestingLevel;
} }
#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 556: case 556:
#line 3808 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3814 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
parseContext.symbolTable.push(); parseContext.symbolTable.push();
++parseContext.loopNestingLevel; ++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel; ++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel; ++parseContext.controlFlowNestingLevel;
} }
#line 10184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 557: case 557:
#line 3814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3820 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@ -10197,81 +10203,81 @@ yyreduce:
--parseContext.statementNestingLevel; --parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel; --parseContext.controlFlowNestingLevel;
} }
#line 10201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 558: 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); (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; break;
case 559: 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); (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; break;
case 560: 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); (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; break;
case 561: case 561:
#line 3841 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3847 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
(yyval.interm.intermTypedNode) = 0; (yyval.interm.intermTypedNode) = 0;
} }
#line 10233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 562: 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).node1 = (yyvsp[-1].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = 0; (yyval.interm.nodePair).node2 = 0;
} }
#line 10242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 563: 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).node1 = (yyvsp[-2].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].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; break;
case 564: case 564:
#line 3858 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3864 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
if (parseContext.loopNestingLevel <= 0) if (parseContext.loopNestingLevel <= 0)
parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", ""); parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc); (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; break;
case 565: 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) if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", ""); 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); (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; break;
case 566: 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); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
if (parseContext.currentFunctionType->getBasicType() != EbtVoid) if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@ -10279,83 +10285,83 @@ yyreduce:
if (parseContext.inMain) if (parseContext.inMain)
parseContext.postEntryPointReturn = true; parseContext.postEntryPointReturn = true;
} }
#line 10283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 567: 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)); (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; break;
case 568: 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"); parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); (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; break;
case 569: 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); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
parseContext.intermediate.setTreeRoot((yyval.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; break;
case 570: case 570:
#line 3891 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #line 3897 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{ {
if ((yyvsp[0].interm.intermNode) != nullptr) { if ((yyvsp[0].interm.intermNode) != nullptr) {
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
parseContext.intermediate.setTreeRoot((yyval.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; break;
case 571: 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); (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; break;
case 572: 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); (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; break;
case 573: 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.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon"); parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
(yyval.interm.intermNode) = nullptr; (yyval.interm.intermNode) = nullptr;
} }
#line 10346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 574: 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).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); (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; break;
case 575: 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 // May be best done as post process phase on intermediate code
if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@ -10371,52 +10377,58 @@ yyreduce:
(yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug); (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
(yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); (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; break;
case 576: 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); (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); 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; break;
case 577: 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); (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; break;
case 578: 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)); (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
} #endif
#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);
} }
#line 10408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
break; break;
case 580: case 579:
#line 3953 "MachineIndependent/glslang.y" /* yacc.c:1646 */ #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; break;
#line 10420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ #line 10432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */
default: break; default: break;
} }
/* User semantic actions sometimes alter yychar, and that requires /* User semantic actions sometimes alter yychar, and that requires
@ -10644,5 +10656,5 @@ yyreturn:
#endif #endif
return yyresult; 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. // POSSIBILITY OF SUCH DAMAGE.
// //
#ifndef GLSLANG_WEB
#include "../Include/Common.h" #include "../Include/Common.h"
#include "../Include/InfoSink.h" #include "../Include/InfoSink.h"
@ -1239,3 +1241,5 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) {
} }
} // end namespace glslang } // end namespace glslang
#endif // GLSLANG_WEB

View File

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

View File

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

View File

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

View File

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

View File

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