Implement simple ESSL3 matrix functions

Add support for built-in functions outerProduct, determinant, transpose
and the variations of matrixCompMult that were previously unsupported.

BUG=angle:859

Change-Id: Ie2b9cf83cd80c5a886c6d4eb190c7ce25a32d0a4
Reviewed-on: https://chromium-review.googlesource.com/239873
Reviewed-by: Nicolas Capens <capn@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/OutputGLSLBase.cpp b/src/compiler/translator/OutputGLSLBase.cpp
index e5743d2..5553960 100644
--- a/src/compiler/translator/OutputGLSLBase.cpp
+++ b/src/compiler/translator/OutputGLSLBase.cpp
@@ -516,6 +516,13 @@
         preString = "fwidth(";
         break;
 
+      case EOpTranspose:
+        preString = "transpose(";
+        break;
+      case EOpDeterminant:
+        preString = "determinant(";
+        break;
+
       case EOpAny:
         preString = "any(";
         break;
@@ -768,6 +775,10 @@
         }
         break;
 
+      case EOpOuterProduct:
+        writeBuiltInFunctionTriplet(visit, "outerProduct(", useEmulatedFunction);
+        break;
+
       case EOpLessThan:
         writeBuiltInFunctionTriplet(visit, "lessThan(", useEmulatedFunction);
         break;