translator: Reject invalid combination of compile flags
ADD_AND_TRUE_TO_LOOP_CONDITION breaks loop unrolling because LoopInfo
expects the loop condition to have been validated to be "symbol < constant"
and stayed that way.
BUG=chromium:653454
BUG=chromium:653694
Change-Id: I2057fde3a308623bd2dd7571ee878dd42b1fdac3
Reviewed-on: https://chromium-review.googlesource.com/395306
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/Compiler.cpp b/src/compiler/translator/Compiler.cpp
index 25395b1..eb5dd58 100644
--- a/src/compiler/translator/Compiler.cpp
+++ b/src/compiler/translator/Compiler.cpp
@@ -476,6 +476,17 @@
compileOptions |= SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL;
}
+ ShCompileOptions unrollFlags =
+ SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX | SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX;
+ if ((compileOptions & SH_ADD_AND_TRUE_TO_LOOP_CONDITION) != 0 &&
+ (compileOptions & unrollFlags) != 0)
+ {
+ infoSink.info.prefix(EPrefixError);
+ infoSink.info
+ << "Unsupported compile flag combination: unroll & ADD_TRUE_TO_LOOP_CONDITION";
+ return false;
+ }
+
TScopedPoolAllocator scopedAlloc(&allocator);
TIntermBlock *root = compileTreeImpl(shaderStrings, numStrings, compileOptions);