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
parent 6c6227a4
...@@ -5097,6 +5097,26 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5097,6 +5097,26 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
return error(GL_INVALID_OPERATION); 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) switch (format)
{ {
case GL_ALPHA: case GL_ALPHA:
...@@ -5109,7 +5129,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5109,7 +5129,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
case GL_HALF_FLOAT_OES: case GL_HALF_FLOAT_OES:
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_OPERATION);
} }
break; break;
case GL_RGB: case GL_RGB:
...@@ -5121,7 +5141,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5121,7 +5141,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
case GL_HALF_FLOAT_OES: case GL_HALF_FLOAT_OES:
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_OPERATION);
} }
break; break;
case GL_RGBA: case GL_RGBA:
...@@ -5134,7 +5154,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5134,7 +5154,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
case GL_HALF_FLOAT_OES: case GL_HALF_FLOAT_OES:
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_OPERATION);
} }
break; break;
case GL_BGRA_EXT: case GL_BGRA_EXT:
...@@ -5143,7 +5163,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5143,7 +5163,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
case GL_UNSIGNED_BYTE: case GL_UNSIGNED_BYTE:
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_OPERATION);
} }
break; break;
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: // error cases for compressed textures are handled below case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: // error cases for compressed textures are handled below
...@@ -5158,7 +5178,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5158,7 +5178,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
case GL_UNSIGNED_INT: case GL_UNSIGNED_INT:
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_OPERATION);
} }
break; break;
case GL_DEPTH_STENCIL_OES: case GL_DEPTH_STENCIL_OES:
...@@ -5167,11 +5187,11 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL ...@@ -5167,11 +5187,11 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
case GL_UNSIGNED_INT_24_8_OES: case GL_UNSIGNED_INT_24_8_OES:
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_OPERATION);
} }
break; break;
default: default:
return error(GL_INVALID_VALUE); return error(GL_INVALID_ENUM);
} }
if (border != 0) if (border != 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment