Fix error checking for glTexImage2D

Trac #20959
Signed-off-by: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/trunk@1133 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 9f22716..a967b52 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -5097,6 +5097,26 @@
             return error(GL_INVALID_OPERATION);
         }
 
+        // validate <type> by itself (used as secondary key below)
+        switch (type)
+        {
+          case GL_UNSIGNED_BYTE:
+          case GL_UNSIGNED_SHORT_5_6_5:
+          case GL_UNSIGNED_SHORT_4_4_4_4:
+          case GL_UNSIGNED_SHORT_5_5_5_1:
+          case GL_UNSIGNED_SHORT:
+          case GL_UNSIGNED_INT:
+          case GL_UNSIGNED_INT_24_8_OES:
+          case GL_HALF_FLOAT_OES:
+          case GL_FLOAT:
+            break;
+          default:
+            return error(GL_INVALID_ENUM);
+        }
+
+        // validate <format> + <type> combinations
+        // - invalid <format> -> sets INVALID_ENUM
+        // - invalid <format>+<type> combination -> sets INVALID_OPERATION
         switch (format)
         {
           case GL_ALPHA:
@@ -5109,7 +5129,7 @@
               case GL_HALF_FLOAT_OES:
                 break;
               default:
-                return error(GL_INVALID_ENUM);
+                return error(GL_INVALID_OPERATION);
             }
             break;
           case GL_RGB:
@@ -5121,7 +5141,7 @@
               case GL_HALF_FLOAT_OES:
                 break;
               default:
-                return error(GL_INVALID_ENUM);
+                return error(GL_INVALID_OPERATION);
             }
             break;
           case GL_RGBA:
@@ -5134,7 +5154,7 @@
               case GL_HALF_FLOAT_OES:
                 break;
               default:
-                return error(GL_INVALID_ENUM);
+                return error(GL_INVALID_OPERATION);
             }
             break;
           case GL_BGRA_EXT:
@@ -5143,7 +5163,7 @@
               case GL_UNSIGNED_BYTE:
                 break;
               default:
-                return error(GL_INVALID_ENUM);
+                return error(GL_INVALID_OPERATION);
             }
             break;
           case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:  // error cases for compressed textures are handled below
@@ -5158,7 +5178,7 @@
               case GL_UNSIGNED_INT:
                 break;
               default:
-                return error(GL_INVALID_ENUM);
+                return error(GL_INVALID_OPERATION);
             }
             break;
           case GL_DEPTH_STENCIL_OES:
@@ -5167,11 +5187,11 @@
               case GL_UNSIGNED_INT_24_8_OES:
                 break;
               default:
-                return error(GL_INVALID_ENUM);
+                return error(GL_INVALID_OPERATION);
             }
             break;
           default:
-            return error(GL_INVALID_VALUE);
+            return error(GL_INVALID_ENUM);
         }
 
         if (border != 0)