diff options
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp b/Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp index a36c393..d3985e6 100644 --- a/Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp +++ b/Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp @@ -20,8 +20,9 @@ UnfoldSelect::UnfoldSelect(TParseContext &context, OutputHLSL *outputHLSL) : mCo void UnfoldSelect::traverse(TIntermNode *node) { - mTemporaryIndex++; + int rewindIndex = mTemporaryIndex; node->traverse(this); + mTemporaryIndex = rewindIndex; } bool UnfoldSelect::visitSelection(Visit visit, TIntermSelection *node) @@ -30,36 +31,66 @@ bool UnfoldSelect::visitSelection(Visit visit, TIntermSelection *node) if (node->usesTernaryOperator()) { - int i = mTemporaryIndex++; + int i = mTemporaryIndex; - out << mOutputHLSL->typeString(node->getType()) << " t" << i << ";\n"; + out << mOutputHLSL->typeString(node->getType()) << " s" << i << ";\n"; + mTemporaryIndex = i + 1; node->getCondition()->traverse(this); out << "if("; + mTemporaryIndex = i + 1; node->getCondition()->traverse(mOutputHLSL); out << ")\n" "{\n"; + mTemporaryIndex = i + 1; node->getTrueBlock()->traverse(this); - out << " t" << i << " = "; + out << " s" << i << " = "; + mTemporaryIndex = i + 1; node->getTrueBlock()->traverse(mOutputHLSL); out << ";\n" "}\n" "else\n" "{\n"; + mTemporaryIndex = i + 1; node->getFalseBlock()->traverse(this); - out << " t" << i << " = "; + out << " s" << i << " = "; + mTemporaryIndex = i + 1; node->getFalseBlock()->traverse(mOutputHLSL); out << ";\n" "}\n"; - mTemporaryIndex--; + mTemporaryIndex = i + 1; } return false; } -int UnfoldSelect::getTemporaryIndex() +bool UnfoldSelect::visitLoop(Visit visit, TIntermLoop *node) { - return mTemporaryIndex; + int rewindIndex = mTemporaryIndex; + + if (node->getInit()) + { + node->getInit()->traverse(this); + } + + if (node->getCondition()) + { + node->getCondition()->traverse(this); + } + + if (node->getExpression()) + { + node->getExpression()->traverse(this); + } + + mTemporaryIndex = rewindIndex; + + return false; +} + +int UnfoldSelect::getNextTemporaryIndex() +{ + return mTemporaryIndex++; } } |