HLSL: Fix bug in previous checkin when non-flattened objects are not simple l-values.

This commit is contained in:
John Kessenich 2016-09-16 21:16:04 -06:00
parent d2ce838a58
commit fcea302dbc

View File

@ -1064,12 +1064,16 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
return subTree;
};
const auto& leftVariables = flattenMap[left->getAsSymbolNode()->getId()];
const auto& rightVariables = flattenMap[right->getAsSymbolNode()->getId()];
TVector<TVariable*>* leftVariables = nullptr;
TVector<TVariable*>* rightVariables = nullptr;
if (flattenLeft)
leftVariables = &flattenMap[left->getAsSymbolNode()->getId()];
if (flattenRight)
rightVariables = &flattenMap[right->getAsSymbolNode()->getId()];
TIntermAggregate* assignList = nullptr;
for (int member = 0; member < (int)members.size(); ++member) {
TIntermTyped* subRight = getMember(flattenRight, right, rightVariables, member);
TIntermTyped* subLeft = getMember(flattenLeft, left, leftVariables, member);
TIntermTyped* subRight = getMember(flattenRight, right, *rightVariables, member);
TIntermTyped* subLeft = getMember(flattenLeft, left, *leftVariables, member);
assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, subLeft, subRight, loc));
}
assignList->setOperator(EOpSequence);