Add constant folding support for geometric built-ins

This change adds constant folding support for following geometric
built-ins:
    - length, distance, dot, cross, normalize, faceforward,
      reflect and refract.

BUG=angleproject:913
TEST=angle_unittests, dEQP Tests
dEQP-GLES3.functional.shaders.constant_expressions.builtin_functions.geometric.*
(56 tests started passing with this change)

Change-Id: I973689554bb8c30ee3ebdf71f1b8a051ceb5e0cf
Reviewed-on: https://chromium-review.googlesource.com/273097
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/Intermediate.cpp b/src/compiler/translator/Intermediate.cpp
index a5f83a4..1d8b36b 100644
--- a/src/compiler/translator/Intermediate.cpp
+++ b/src/compiler/translator/Intermediate.cpp
@@ -477,6 +477,12 @@
       case EOpGreaterThanEqual:
       case EOpVectorEqual:
       case EOpVectorNotEqual:
+      case EOpDistance:
+      case EOpDot:
+      case EOpCross:
+      case EOpFaceForward:
+      case EOpReflect:
+      case EOpRefract:
         return TIntermConstantUnion::FoldAggregateBuiltIn(op, aggregate, mInfoSink);
       default:
         // Constant folding not supported for the built-in.