mesa: Fix CopyTex{Sub,}Image error checks for integer vs non-integer.
Fixes Intel oglconform negative.typeFormatMismatch.copyteximage. NOTE: This is a candidate for the 8.0 branch. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -1938,6 +1938,24 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* From the EXT_texture_integer spec:
|
||||
*
|
||||
* "INVALID_OPERATION is generated by CopyTexImage* and CopyTexSubImage*
|
||||
* if the texture internalformat is an integer format and the read color
|
||||
* buffer is not an integer format, or if the internalformat is not an
|
||||
* integer format and the read color buffer is an integer format."
|
||||
*/
|
||||
if (_mesa_is_color_format(internalFormat)) {
|
||||
struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
|
||||
|
||||
if (_mesa_is_integer_format(rb->InternalFormat) !=
|
||||
_mesa_is_integer_format(internalFormat)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCopyTexImage%dD(integer vs non-integer)", dimensions);
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do size, level checking */
|
||||
sizeOK = (proxyTarget == GL_PROXY_TEXTURE_CUBE_MAP_ARB)
|
||||
? (width == height) : 1;
|
||||
@@ -2153,16 +2171,21 @@ copytexsubimage_error_check2( struct gl_context *ctx, GLuint dimensions,
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* If copying into an integer texture, the source buffer must also be
|
||||
* integer-valued.
|
||||
/* From the EXT_texture_integer spec:
|
||||
*
|
||||
* "INVALID_OPERATION is generated by CopyTexImage* and CopyTexSubImage*
|
||||
* if the texture internalformat is an integer format and the read color
|
||||
* buffer is not an integer format, or if the internalformat is not an
|
||||
* integer format and the read color buffer is an integer format."
|
||||
*/
|
||||
if (_mesa_is_format_integer_color(teximage->TexFormat)) {
|
||||
if (_mesa_is_color_format(teximage->InternalFormat)) {
|
||||
struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
|
||||
if (!_mesa_is_format_integer_color(rb->Format)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCopyTexSubImage%dD(source buffer is not integer format)",
|
||||
dimensions);
|
||||
return GL_TRUE;
|
||||
|
||||
if (_mesa_is_format_integer_color(rb->Format) !=
|
||||
_mesa_is_format_integer_color(teximage->TexFormat)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCopyTexImage%dD(integer vs non-integer)", dimensions);
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user