Handle new sampler types.

TRAC #23472
Signed-off-by: Geoff Lang
Signed-off-by: Shannon Woods
Author: Nicolas Capens
diff --git a/src/common/utilities.cpp b/src/common/utilities.cpp
index ad03250..86a228b 100644
--- a/src/common/utilities.cpp
+++ b/src/common/utilities.cpp
@@ -22,40 +22,50 @@
       case GL_FLOAT:
       case GL_INT:
       case GL_SAMPLER_2D:
+      case GL_SAMPLER_3D:
       case GL_SAMPLER_CUBE:
+      case GL_SAMPLER_2D_ARRAY:
+      case GL_INT_SAMPLER_2D:
+      case GL_INT_SAMPLER_3D:
+      case GL_INT_SAMPLER_CUBE:
+      case GL_INT_SAMPLER_2D_ARRAY:
+      case GL_UNSIGNED_INT_SAMPLER_2D:
+      case GL_UNSIGNED_INT_SAMPLER_3D:
+      case GL_UNSIGNED_INT_SAMPLER_CUBE:
+      case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
       case GL_UNSIGNED_INT:
-          return 1;
+        return 1;
       case GL_BOOL_VEC2:
       case GL_FLOAT_VEC2:
       case GL_INT_VEC2:
       case GL_UNSIGNED_INT_VEC2:
-          return 2;
+        return 2;
       case GL_INT_VEC3:
       case GL_FLOAT_VEC3:
       case GL_BOOL_VEC3:
       case GL_UNSIGNED_INT_VEC3:
-          return 3;
+        return 3;
       case GL_BOOL_VEC4:
       case GL_FLOAT_VEC4:
       case GL_INT_VEC4:
       case GL_UNSIGNED_INT_VEC4:
       case GL_FLOAT_MAT2:
-          return 4;
+        return 4;
       case GL_FLOAT_MAT2x3:
       case GL_FLOAT_MAT3x2:
-          return 6;
+        return 6;
       case GL_FLOAT_MAT2x4:
       case GL_FLOAT_MAT4x2:
-          return 8;
+        return 8;
       case GL_FLOAT_MAT3:
-          return 9;
+        return 9;
       case GL_FLOAT_MAT3x4:
       case GL_FLOAT_MAT4x3:
-          return 12;
+        return 12;
       case GL_FLOAT_MAT4:
-          return 16;
+        return 16;
       default:
-          UNREACHABLE();
+        UNREACHABLE();
     }
 
     return 0;
@@ -69,7 +79,7 @@
       case GL_BOOL_VEC2:
       case GL_BOOL_VEC3:
       case GL_BOOL_VEC4:
-          return GL_BOOL;
+        return GL_BOOL;
       case GL_FLOAT:
       case GL_FLOAT_VEC2:
       case GL_FLOAT_VEC3:
@@ -83,21 +93,31 @@
       case GL_FLOAT_MAT4x2:
       case GL_FLOAT_MAT3x4:
       case GL_FLOAT_MAT4x3:
-          return GL_FLOAT;
+        return GL_FLOAT;
       case GL_INT:
       case GL_SAMPLER_2D:
+      case GL_SAMPLER_3D:
       case GL_SAMPLER_CUBE:
+      case GL_SAMPLER_2D_ARRAY:
+      case GL_INT_SAMPLER_2D:
+      case GL_INT_SAMPLER_3D:
+      case GL_INT_SAMPLER_CUBE:
+      case GL_INT_SAMPLER_2D_ARRAY:
+      case GL_UNSIGNED_INT_SAMPLER_2D:
+      case GL_UNSIGNED_INT_SAMPLER_3D:
+      case GL_UNSIGNED_INT_SAMPLER_CUBE:
+      case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
       case GL_INT_VEC2:
       case GL_INT_VEC3:
       case GL_INT_VEC4:
-          return GL_INT;
+        return GL_INT;
       case GL_UNSIGNED_INT:
       case GL_UNSIGNED_INT_VEC2:
       case GL_UNSIGNED_INT_VEC3:
       case GL_UNSIGNED_INT_VEC4:
-          return GL_UNSIGNED_INT;
+        return GL_UNSIGNED_INT;
       default:
-          UNREACHABLE();
+        UNREACHABLE();
     }
 
     return GL_NONE;
@@ -178,7 +198,17 @@
       case GL_INT_VEC4:
       case GL_UNSIGNED_INT_VEC4:
       case GL_SAMPLER_2D:
+      case GL_SAMPLER_3D:
       case GL_SAMPLER_CUBE:
+      case GL_SAMPLER_2D_ARRAY:
+      case GL_INT_SAMPLER_2D:
+      case GL_INT_SAMPLER_3D:
+      case GL_INT_SAMPLER_CUBE:
+      case GL_INT_SAMPLER_2D_ARRAY:
+      case GL_UNSIGNED_INT_SAMPLER_2D:
+      case GL_UNSIGNED_INT_SAMPLER_3D:
+      case GL_UNSIGNED_INT_SAMPLER_CUBE:
+      case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
         return 1;
       case GL_FLOAT_MAT2:
       case GL_FLOAT_MAT3x2:
@@ -210,7 +240,17 @@
       case GL_INT:
       case GL_UNSIGNED_INT:
       case GL_SAMPLER_2D:
+      case GL_SAMPLER_3D:
       case GL_SAMPLER_CUBE:
+      case GL_SAMPLER_2D_ARRAY:
+      case GL_INT_SAMPLER_2D:
+      case GL_INT_SAMPLER_3D:
+      case GL_INT_SAMPLER_CUBE:
+      case GL_INT_SAMPLER_2D_ARRAY:
+      case GL_UNSIGNED_INT_SAMPLER_2D:
+      case GL_UNSIGNED_INT_SAMPLER_3D:
+      case GL_UNSIGNED_INT_SAMPLER_CUBE:
+      case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
         return 1;
       case GL_BOOL_VEC2:
       case GL_FLOAT_VEC2:
@@ -243,6 +283,28 @@
     return 0;
 }
 
+bool IsSampler(GLenum type)
+{
+    switch (type)
+    {
+      case GL_SAMPLER_2D:
+      case GL_SAMPLER_3D:
+      case GL_SAMPLER_CUBE:
+      case GL_SAMPLER_2D_ARRAY:
+      case GL_INT_SAMPLER_2D:
+      case GL_INT_SAMPLER_3D:
+      case GL_INT_SAMPLER_CUBE:
+      case GL_INT_SAMPLER_2D_ARRAY:
+      case GL_UNSIGNED_INT_SAMPLER_2D:
+      case GL_UNSIGNED_INT_SAMPLER_3D:
+      case GL_UNSIGNED_INT_SAMPLER_CUBE:
+      case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+        return true;
+    }
+
+    return false;
+}
+
 bool IsMatrixType(GLenum type)
 {
     return VariableRowCount(type) > 1;