mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 18:38:11 +02:00
mesa: Fix error returned by glCopyTexImage2D() upon an invalid internal format
Page 161 of the OpenGL-ES 3.1 (PDF) spec, and page 207 of the OpenGL 4.5 (PDF),
both on section '8.6. ALTERNATE TEXTURE IMAGE SPECIFICATION COMMANDS', states:
"An INVALID_ENUM error is generated if an invalid value is specified for
internalformat".
It is currently returning INVALID_OPERATION error because
_mesa_get_read_renderbuffer_for_format() is called before the internalformat
argument has been validated. To fix this, we move this call down the validation
process, after _mesa_base_tex_format() has been called. _mesa_base_tex_format()
effectively serves as a validator for the internal format.
Fixes 1 dEQP test:
* dEQP-GLES3.functional.negative_api.texture.copyteximage2d_invalid_format
Fixes 1 piglit test:
* spec@oes_compressed_etc1_rgb8_texture@basic
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Cc: 10.6 <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 4b07e9a033)
This commit is contained in:
parent
791cf8a025
commit
f13ba8a5ab
1 changed files with 9 additions and 9 deletions
|
|
@ -2622,13 +2622,6 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
|||
return GL_TRUE;
|
||||
}
|
||||
|
||||
rb = _mesa_get_read_renderbuffer_for_format(ctx, internalFormat);
|
||||
if (rb == NULL) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCopyTexImage%dD(read buffer)", dimensions);
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* OpenGL ES 1.x and OpenGL ES 2.0 impose additional restrictions on the
|
||||
* internalFormat.
|
||||
*/
|
||||
|
|
@ -2641,7 +2634,7 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
|||
case GL_LUMINANCE_ALPHA:
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glCopyTexImage%dD(internalFormat=%s)", dimensions,
|
||||
_mesa_lookup_enum_by_nr(internalFormat));
|
||||
return GL_TRUE;
|
||||
|
|
@ -2650,12 +2643,19 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
|||
|
||||
baseFormat = _mesa_base_tex_format(ctx, internalFormat);
|
||||
if (baseFormat < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glCopyTexImage%dD(internalFormat=%s)", dimensions,
|
||||
_mesa_lookup_enum_by_nr(internalFormat));
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
rb = _mesa_get_read_renderbuffer_for_format(ctx, internalFormat);
|
||||
if (rb == NULL) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCopyTexImage%dD(read buffer)", dimensions);
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
rb_internal_format = rb->InternalFormat;
|
||||
rb_base_format = _mesa_base_tex_format(ctx, rb->InternalFormat);
|
||||
if (_mesa_is_color_format(internalFormat)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue