mesa: Add gles3 condition for normalized internal formats in glCopyTexImage*()

Fixes many failures in gles3 Khronos CTS test: packed_pixels

Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
(cherry picked from commit 2fc4205461)
This commit is contained in:
Anuj Phogat 2014-06-06 11:46:55 -07:00 committed by Carl Worth
parent 326648add1
commit eef8b88e63

View file

@ -2696,6 +2696,8 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
if (_mesa_is_color_format(internalFormat)) {
bool is_int = _mesa_is_enum_format_integer(internalFormat);
bool is_rbint = _mesa_is_enum_format_integer(rb_internal_format);
bool is_unorm = _mesa_is_enum_format_unorm(internalFormat);
bool is_rbunorm = _mesa_is_enum_format_unorm(rb_internal_format);
if (is_int || is_rbint) {
if (is_int != is_rbint) {
_mesa_error(ctx, GL_INVALID_OPERATION,
@ -2709,6 +2711,19 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
return GL_TRUE;
}
}
/* From page 138 of OpenGL ES 3.0 spec:
* "The error INVALID_OPERATION is generated if floating-point RGBA
* data is required; if signed integer RGBA data is required and the
* format of the current color buffer is not signed integer; if
* unsigned integer RGBA data is required and the format of the
* current color buffer is not unsigned integer; or if fixed-point
* RGBA data is required and the format of the current color buffer
* is not fixed-point.
*/
if (_mesa_is_gles(ctx) && is_unorm != is_rbunorm)
_mesa_error(ctx, GL_INVALID_OPERATION,
"glCopyTexImage%dD(unorm vs non-unorm)", dimensions);
}
if (_mesa_is_compressed_format(ctx, internalFormat)) {