|
|
@@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
|