Fix error on invalid type/format combination.
GL_INVALID_ENUM is for enum values that are never valid for the function.
GL_INVALID_OPERATION is expected for enum combinations that are not valid.
Change-Id: I43a6cd169303420a680e4cab15683605a8684517
Reviewed-on: https://swiftshader-review.googlesource.com/5094
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 467aafe..ae995bf 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -5155,6 +5155,35 @@
return error(validationError);
}
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_FLOAT: // GL_OES_texture_float
+ case GL_HALF_FLOAT_OES: // GL_OES_texture_half_float
+ case GL_UNSIGNED_INT_24_8_OES: // GL_OES_packed_depth_stencil
+ case GL_UNSIGNED_SHORT: // GL_OES_depth_texture
+ case GL_UNSIGNED_INT: // GL_OES_depth_texture
+ break;
+ case GL_BYTE:
+ case GL_SHORT:
+ case GL_INT:
+ case GL_HALF_FLOAT:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ case GL_UNSIGNED_INT_5_9_9_9_REV:
+ case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
+ if(clientVersion < 3)
+ {
+ return error(GL_INVALID_ENUM);
+ }
+ break;
+ default:
+ return error(GL_INVALID_ENUM);
+ }
+
switch(format)
{
case GL_ALPHA:
@@ -5163,17 +5192,12 @@
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_UNSIGNED_BYTE:
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RED:
@@ -5185,7 +5209,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R8_SNORM:
@@ -5194,23 +5218,18 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R16F:
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R32F:
@@ -5219,7 +5238,7 @@
case GL_FLOAT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5235,7 +5254,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R8I:
@@ -5244,7 +5263,7 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R16UI:
@@ -5253,7 +5272,7 @@
case GL_UNSIGNED_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R16I:
@@ -5262,7 +5281,7 @@
case GL_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R32UI:
@@ -5271,7 +5290,7 @@
case GL_UNSIGNED_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R32I:
@@ -5280,7 +5299,7 @@
case GL_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5296,7 +5315,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG8I:
@@ -5305,7 +5324,7 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG16UI:
@@ -5314,7 +5333,7 @@
case GL_UNSIGNED_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG16I:
@@ -5323,7 +5342,7 @@
case GL_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG32UI:
@@ -5332,7 +5351,7 @@
case GL_UNSIGNED_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG32I:
@@ -5341,7 +5360,7 @@
case GL_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5357,7 +5376,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB8I:
@@ -5366,7 +5385,7 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB16UI:
@@ -5375,7 +5394,7 @@
case GL_UNSIGNED_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB16I:
@@ -5384,7 +5403,7 @@
case GL_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB32UI:
@@ -5393,7 +5412,7 @@
case GL_UNSIGNED_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB32I:
@@ -5402,7 +5421,7 @@
case GL_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5418,7 +5437,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA8I:
@@ -5427,7 +5446,7 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB10_A2UI:
@@ -5436,7 +5455,7 @@
case GL_UNSIGNED_INT_2_10_10_10_REV:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA16UI:
@@ -5445,7 +5464,7 @@
case GL_UNSIGNED_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA16I:
@@ -5454,7 +5473,7 @@
case GL_SHORT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA32UI:
@@ -5463,7 +5482,7 @@
case GL_UNSIGNED_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA32I:
@@ -5472,7 +5491,7 @@
case GL_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5488,7 +5507,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG8_SNORM:
@@ -5497,23 +5516,18 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG16F:
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RG32F:
@@ -5522,7 +5536,7 @@
case GL_FLOAT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5536,18 +5550,13 @@
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_UNSIGNED_BYTE:
case GL_UNSIGNED_SHORT_5_6_5:
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB8:
@@ -5556,7 +5565,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_SRGB8:
@@ -5565,7 +5574,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB565:
@@ -5575,7 +5584,7 @@
case GL_UNSIGNED_SHORT_5_6_5:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB8_SNORM:
@@ -5584,57 +5593,42 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_R11F_G11F_B10F:
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_UNSIGNED_INT_10F_11F_11F_REV:
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB9_E5:
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_UNSIGNED_INT_5_9_9_9_REV:
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB16F:
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB32F:
@@ -5643,7 +5637,7 @@
case GL_FLOAT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5657,11 +5651,6 @@
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_UNSIGNED_BYTE:
case GL_UNSIGNED_SHORT_4_4_4_4:
case GL_UNSIGNED_SHORT_5_5_5_1:
@@ -5669,7 +5658,7 @@
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA8:
@@ -5678,7 +5667,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_SRGB8_ALPHA8:
@@ -5687,7 +5676,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB5_A1:
@@ -5698,7 +5687,7 @@
case GL_UNSIGNED_INT_2_10_10_10_REV:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA8_SNORM:
@@ -5707,7 +5696,7 @@
case GL_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA4:
@@ -5717,7 +5706,7 @@
case GL_UNSIGNED_SHORT_4_4_4_4:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGB10_A2:
@@ -5726,23 +5715,18 @@
case GL_UNSIGNED_INT_2_10_10_10_REV:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA16F:
switch(type)
{
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return error(GL_INVALID_ENUM);
- }
- break;
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_RGBA32F:
@@ -5751,7 +5735,7 @@
case GL_FLOAT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5764,7 +5748,7 @@
case GL_UNSIGNED_BYTE:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_DEPTH_COMPONENT:
@@ -5778,7 +5762,7 @@
case GL_UNSIGNED_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_DEPTH_COMPONENT24:
@@ -5788,7 +5772,7 @@
case GL_UNSIGNED_INT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_DEPTH_COMPONENT32F:
@@ -5797,7 +5781,7 @@
case GL_FLOAT:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -5814,7 +5798,7 @@
case GL_UNSIGNED_INT_24_8_OES:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
case GL_DEPTH32F_STENCIL8:
@@ -5823,7 +5807,7 @@
case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
break;
default:
- return error(GL_INVALID_ENUM);
+ return error(GL_INVALID_OPERATION);
}
break;
default:
@@ -6222,9 +6206,9 @@
return error(GL_INVALID_VALUE);
}
- if(!es2::CheckTextureFormatType(format, type, egl::getClientVersion()))
+ if(!es2::ValidateTextureFormatType(format, type, egl::getClientVersion()))
{
- return error(GL_INVALID_ENUM);
+ return;
}
if(width == 0 || height == 0 || !pixels)
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 8ef44e8..533ea99 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -13,6 +13,7 @@
#include "utilities.h"
+#include "main.h"
#include "mathutil.h"
#include "Context.h"
#include "common/debug.h"
@@ -702,125 +703,200 @@
return target == GL_TEXTURE_2D || IsCubemapTextureTarget(target) || target == GL_TEXTURE_3D || target == GL_TEXTURE_2D_ARRAY;
}
- // Verify that format/type are one of the combinations from table 3.4.
- bool CheckTextureFormatType(GLenum format, GLenum type, GLint clientVersion)
+ bool ValidateTextureFormatType(GLenum format, GLenum type, GLint clientVersion)
{
switch(type)
{
case GL_UNSIGNED_BYTE:
- switch(format)
- {
- case GL_RGBA:
- case GL_BGRA_EXT:
- case GL_RGB:
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- return true;
- case GL_RED:
- case GL_RED_INTEGER:
- case GL_RG:
- case GL_RG_INTEGER:
- case GL_RGB_INTEGER:
- case GL_RGBA_INTEGER:
- return clientVersion >= 3;
- default:
- return false;
- }
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_FLOAT: // GL_OES_texture_float
+ case GL_HALF_FLOAT_OES: // GL_OES_texture_half_float
+ case GL_UNSIGNED_INT_24_8: // GL_OES_packed_depth_stencil (GL_UNSIGNED_INT_24_8_EXT)
+ case GL_UNSIGNED_SHORT: // GL_OES_depth_texture
+ case GL_UNSIGNED_INT: // GL_OES_depth_texture
+ break;
case GL_BYTE:
case GL_SHORT:
case GL_INT:
- switch(format)
- {
- case GL_RGBA:
- case GL_BGRA_EXT:
- case GL_RGB:
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_RED:
- case GL_RED_INTEGER:
- case GL_RG:
- case GL_RG_INTEGER:
- case GL_RGB_INTEGER:
- case GL_RGBA_INTEGER:
- return clientVersion >= 3;
- default:
- return false;
- }
- case GL_UNSIGNED_SHORT:
- case GL_UNSIGNED_INT:
- switch(format)
- {
- case GL_RGBA:
- case GL_BGRA_EXT:
- case GL_RGB:
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_RED:
- case GL_RED_INTEGER:
- case GL_RG:
- case GL_RG_INTEGER:
- case GL_RGB_INTEGER:
- case GL_RGBA_INTEGER:
- return clientVersion >= 3;
- case GL_DEPTH_COMPONENT:
- return (clientVersion >= 3) || (type == GL_UNSIGNED_INT);
- default:
- return false;
- }
case GL_HALF_FLOAT:
- if(clientVersion < 3)
- {
- return false;
- }
- case GL_FLOAT:
- case GL_HALF_FLOAT_OES:
- switch(format)
- {
- case GL_RGBA:
- case GL_RGB:
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- return true;
- case GL_RED:
- case GL_RG:
- return clientVersion >= 3;
- default:
- return false;
- }
case GL_UNSIGNED_INT_2_10_10_10_REV:
- switch(format)
- {
- case GL_RGBA:
- case GL_RGBA_INTEGER:
- return clientVersion >= 3;
- default:
- return false;
- }
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_5_5_5_1:
- return (format == GL_RGBA);
case GL_UNSIGNED_INT_10F_11F_11F_REV:
case GL_UNSIGNED_INT_5_9_9_9_REV:
- if(clientVersion < 3)
- {
- return false;
- }
- case GL_UNSIGNED_SHORT_5_6_5:
- return (format == GL_RGB);
case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
if(clientVersion < 3)
{
- return false;
+ return error(GL_INVALID_ENUM, false);
}
- case GL_UNSIGNED_INT_24_8_OES:
- return (format == GL_DEPTH_STENCIL_OES);
+ break;
default:
- return false;
+ return error(GL_INVALID_ENUM, false);
}
+
+ switch(format)
+ {
+ case GL_ALPHA:
+ case GL_RGB:
+ case GL_RGBA:
+ case GL_LUMINANCE:
+ case GL_LUMINANCE_ALPHA:
+ case GL_BGRA_EXT: // GL_EXT_texture_format_BGRA8888
+ case GL_DEPTH_STENCIL: // GL_OES_packed_depth_stencil (GL_DEPTH_STENCIL_OES)
+ case GL_DEPTH_COMPONENT: // GL_OES_depth_texture
+ break;
+ case GL_RED:
+ case GL_RED_INTEGER:
+ case GL_RG:
+ case GL_RG_INTEGER:
+ case GL_RGB_INTEGER:
+ case GL_RGBA_INTEGER:
+ if(clientVersion < 3)
+ {
+ return error(GL_INVALID_ENUM, false);
+ }
+ break;
+ default:
+ return error(GL_INVALID_ENUM, false);
+ }
+
+ switch(format)
+ {
+ case GL_RGBA:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
+ case GL_HALF_FLOAT_OES:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_RGBA_INTEGER:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
+ case GL_UNSIGNED_SHORT:
+ case GL_SHORT:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_RGB:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
+ case GL_HALF_FLOAT_OES:
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ case GL_UNSIGNED_INT_5_9_9_9_REV:
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_RGB_INTEGER:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
+ case GL_UNSIGNED_SHORT:
+ case GL_SHORT:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_RG:
+ case GL_RED:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_RG_INTEGER:
+ case GL_RED_INTEGER:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
+ case GL_UNSIGNED_SHORT:
+ case GL_SHORT:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_DEPTH_COMPONENT:
+ switch(type)
+ {
+ case GL_UNSIGNED_SHORT:
+ case GL_UNSIGNED_INT:
+ case GL_FLOAT:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_DEPTH_STENCIL:
+ switch(type)
+ {
+ case GL_UNSIGNED_INT_24_8:
+ case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_LUMINANCE_ALPHA:
+ case GL_LUMINANCE:
+ case GL_ALPHA:
+ switch(type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_HALF_FLOAT_OES:
+ case GL_FLOAT:
+ break;
+ default:
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ case GL_BGRA_EXT:
+ if(type != GL_UNSIGNED_BYTE)
+ {
+ return error(GL_INVALID_OPERATION, false);
+ }
+ break;
+ default:
+ UNREACHABLE(format);
+ return error(GL_INVALID_ENUM, false);
+ }
+
+ return true;
}
bool IsColorRenderable(GLenum internalformat, GLint clientVersion)
@@ -1301,7 +1377,7 @@
case GL_RGB565: return sw::FORMAT_R5G6B5;
case GL_RGB8_OES: return sw::FORMAT_X8B8G8R8;
case GL_DEPTH_COMPONENT16:
- case GL_STENCIL_INDEX8:
+ case GL_STENCIL_INDEX8:
case GL_DEPTH24_STENCIL8_OES: return sw::FORMAT_D24S8;
case GL_DEPTH_COMPONENT32_OES:return sw::FORMAT_D32;
case GL_R8: return sw::FORMAT_R8;
diff --git a/src/OpenGL/libGLESv2/utilities.h b/src/OpenGL/libGLESv2/utilities.h
index 5e14b9c..f289588 100644
--- a/src/OpenGL/libGLESv2/utilities.h
+++ b/src/OpenGL/libGLESv2/utilities.h
@@ -51,7 +51,7 @@
bool IsCubemapTextureTarget(GLenum target);
int CubeFaceIndex(GLenum cubeTarget);
bool IsTextureTarget(GLenum target);
- bool CheckTextureFormatType(GLenum format, GLenum type, GLint clientVersion);
+ bool ValidateTextureFormatType(GLenum format, GLenum type, GLint clientVersion);
bool IsColorRenderable(GLenum internalformat, GLint clientVersion);
bool IsDepthRenderable(GLenum internalformat);