mUsesAtan2_3 = false;
mUsesAtan2_4 = false;
mUsesDiscardRewriting = false;
+ mUsesNestedBreak = false;
mNumRenderTargets = resources.EXT_draw_buffers ? resources.MaxDrawBuffers : 1;
mContainsLoopDiscontinuity = false;
mOutputLod0Function = false;
mInsideDiscontinuousLoop = false;
+ mNestedLoopDepth = 0;
mExcessiveLoopIndex = NULL;
out << "#define ANGLE_USES_DISCARD_REWRITING" << "\n";
}
+ if (mUsesNestedBreak)
+ {
+ out << "#define ANGLE_USES_NESTED_BREAK" << "\n";
+ }
+
if (shaderType == SH_FRAGMENT_SHADER)
{
TExtensionBehavior::const_iterator iter = mContext.extensionBehavior().find("GL_EXT_draw_buffers");
bool OutputHLSL::visitLoop(Visit visit, TIntermLoop *node)
{
+ mNestedLoopDepth++;
+
bool wasDiscontinuous = mInsideDiscontinuousLoop;
if (mContainsLoopDiscontinuity && !mInsideDiscontinuousLoop)
{
if (handleExcessiveLoop(node))
{
+ mInsideDiscontinuousLoop = wasDiscontinuous;
+ mNestedLoopDepth--;
+
return false;
}
}
out << "}\n";
mInsideDiscontinuousLoop = wasDiscontinuous;
+ mNestedLoopDepth--;
return false;
}
case EOpBreak:
if (visit == PreVisit)
{
+ if (mNestedLoopDepth > 1)
+ {
+ mUsesNestedBreak = true;
+ }
+
if (mExcessiveLoopIndex)
{
out << "{Break";