summaryrefslogtreecommitdiffstats
path: root/Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp')
-rw-r--r--Source/ThirdParty/ANGLE/src/compiler/UnfoldSelect.cpp47
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++;
}
}