Add constant folding support for more built-ins
This change adds constant folding support for following built-ins:
- atan(two arguments), pow, mod, mix, step and smoothstep.
BUG=angleproject:913
TEST=dEQP tests
Following 80 tests from dEQP-GLES3.functional.shaders.constant_expressions
started passing with this change:
- builtin_functions.angle_and_trigonometry.atan_separate*
- builtin_functions.exponential.pow_*
- builtin_functions.common.mod_*
- builtin_functions.common.mix_*
- builtin_functions.common.step_*
- builtin_functions.common.smoothstep_*
Change-Id: I70f0a8837a82c480da8cff3f1382c6252a486fe4
Reviewed-on: https://chromium-review.googlesource.com/271753
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/Intermediate.cpp b/src/compiler/translator/Intermediate.cpp
index 18113be..b48269e 100644
--- a/src/compiler/translator/Intermediate.cpp
+++ b/src/compiler/translator/Intermediate.cpp
@@ -462,10 +462,16 @@
{
switch (op)
{
+ case EOpAtan:
+ case EOpPow:
+ case EOpMod:
case EOpMin:
case EOpMax:
case EOpClamp:
- return TIntermConstantUnion::FoldAggregateBuiltIn(op, aggregate);
+ case EOpMix:
+ case EOpStep:
+ case EOpSmoothStep:
+ return TIntermConstantUnion::FoldAggregateBuiltIn(op, aggregate, mInfoSink);
default:
// Constant folding not supported for the built-in.
return nullptr;