diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 0eb19923e731b978778e738e7974e13572241182..2d58c26532a8c9c942711d7fc4d4c99c8c4083f9 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -2,5 +2,5 @@ // For the version, it uses the latest git tag followed by the number of commits. // For the date, it uses the current date (when then script is run). -#define GLSLANG_REVISION "Overload400-PrecQual.1491" -#define GLSLANG_DATE "16-Sep-2016" +#define GLSLANG_REVISION "Overload400-PrecQual.1493" +#define GLSLANG_DATE "18-Sep-2016" diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 894b3854939e51d3e2a8e66256e82064a109be13..cb52805151261652b98e12df5e0a75a7cfcb072f 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -700,9 +700,9 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt return result; } -// Is this a structure that can't be passed down the stack? +// Is this an aggregate that can't be passed down the stack? // E.g., pipeline inputs to the vertex stage and outputs from the fragment stage. -bool HlslParseContext::shouldFlatten(const TType& type) +bool HlslParseContext::shouldFlatten(const TType& type) const { if (! inEntrypoint) return false; @@ -714,13 +714,13 @@ bool HlslParseContext::shouldFlatten(const TType& type) qualifier == EvqVaryingOut); } -// Figure out the mapping between a structure's top members and an +// Figure out the mapping between an aggregate's top members and an // equivalent set of individual variables. // // Assumes shouldFlatten() or equivalent was called first. // // TODO: generalize this to arbitrary nesting? -void HlslParseContext::flattenStruct(const TVariable& variable) +void HlslParseContext::flatten(const TVariable& variable) { TVector<TVariable*> memberVariables; @@ -735,8 +735,8 @@ void HlslParseContext::flattenStruct(const TVariable& variable) flattenMap[variable.getUniqueId()] = memberVariables; } -// Turn an access into structure that was flattened to instead be -// an access to the individual variable the member was flattened to. +// Turn an access into aggregate that was flattened to instead be +// an access to the individual variable the element/member was flattened to. // Assumes shouldFlatten() or equivalent was called first. TIntermTyped* HlslParseContext::flattenAccess(TIntermTyped* base, int member) { @@ -855,7 +855,7 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l remapEntrypointIO(function); if (entryPointOutput) { if (shouldFlatten(entryPointOutput->getType())) - flattenStruct(*entryPointOutput); + flatten(*entryPointOutput); assignLocations(*entryPointOutput); } } else @@ -887,7 +887,7 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l // get IO straightened out if (inEntrypoint) { if (shouldFlatten(*param.type)) - flattenStruct(*variable); + flatten(*variable); assignLocations(*variable); } @@ -1035,7 +1035,7 @@ void HlslParseContext::handleFunctionArgument(TFunction* function, TIntermTyped* // Some simple source assignments need to be flattened to a sequence // of AST assignments. Catch these and flatten, otherwise, pass through // to intermediate.addAssign(). -TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) +TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) const { const auto mustFlatten = [&](const TIntermTyped& node) { return shouldFlatten(node.getType()) && node.getAsSymbolNode() && @@ -1064,12 +1064,12 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op return subTree; }; - TVector<TVariable*>* leftVariables = nullptr; - TVector<TVariable*>* rightVariables = nullptr; + const TVector<TVariable*>* leftVariables = nullptr; + const TVector<TVariable*>* rightVariables = nullptr; if (flattenLeft) - leftVariables = &flattenMap[left->getAsSymbolNode()->getId()]; + leftVariables = &flattenMap.find(left->getAsSymbolNode()->getId())->second; if (flattenRight) - rightVariables = &flattenMap[right->getAsSymbolNode()->getId()]; + rightVariables = &flattenMap.find(right->getAsSymbolNode()->getId())->second; TIntermAggregate* assignList = nullptr; for (int member = 0; member < (int)members.size(); ++member) { TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, member); diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h index d54c373f2f83bb855a51d021fe3f3155f7a678e5..d9635848e244fc81658211342b0af46f7e2240e9 100755 --- a/hlsl/hlslParseHelper.h +++ b/hlsl/hlslParseHelper.h @@ -83,8 +83,8 @@ public: TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right); TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode); TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field); - bool shouldFlatten(const TType&); - void flattenStruct(const TVariable& variable); + bool shouldFlatten(const TType&) const; + void flatten(const TVariable& variable); TIntermTyped* flattenAccess(TIntermTyped* base, int member); void assignLocations(TVariable& variable); TFunction& handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype); @@ -94,7 +94,7 @@ public: void remapNonEntrypointIO(TFunction& function); TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*); void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg); - TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right); + TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right) const; TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments); void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);