Added non square matrix construction

Added new construction operations for
non square matrices, along with the
required changes to the related
translation functions.

Change-Id: I04ae7d4b2d1bb363b35d088cea45c0e7c4bc8a13
Reviewed-on: https://chromium-review.googlesource.com/277729
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index b587f5e..50bd30c 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -536,7 +536,13 @@
     switch(op)
     {
       case EOpConstructMat2:
+      case EOpConstructMat2x3:
+      case EOpConstructMat2x4:
+      case EOpConstructMat3x2:
       case EOpConstructMat3:
+      case EOpConstructMat3x4:
+      case EOpConstructMat4x2:
+      case EOpConstructMat4x3:
       case EOpConstructMat4:
         constructingMatrix = true;
         break;
@@ -1815,12 +1821,32 @@
           case EbtFloat:
             if (publicType.isMatrix())
             {
-                // TODO: non-square matrices
                 switch(publicType.getCols())
                 {
-                  case 2: op = EOpConstructMat2;  break;
-                  case 3: op = EOpConstructMat3;  break;
-                  case 4: op = EOpConstructMat4;  break;
+                  case 2:
+                    switch(publicType.getRows())
+                    {
+                      case 2: op = EOpConstructMat2;   break;
+                      case 3: op = EOpConstructMat2x3; break;
+                      case 4: op = EOpConstructMat2x4; break;
+                    }
+                    break;
+                  case 3:
+                    switch(publicType.getRows())
+                    {
+                      case 2: op = EOpConstructMat3x2; break;
+                      case 3: op = EOpConstructMat3;   break;
+                      case 4: op = EOpConstructMat3x4; break;
+                    }
+                    break;
+                  case 4:
+                    switch(publicType.getRows())
+                    {
+                      case 2: op = EOpConstructMat4x2; break;
+                      case 3: op = EOpConstructMat4x3; break;
+                      case 4: op = EOpConstructMat4;   break;
+                    }
+                    break;
                 }
             }
             else