[Mesa-stable] [PATCH 03/10] mesa: Add error condition for integer formats in glGetTexImage()

Brian Paul brianp at vmware.com
Sat Mar 22 10:15:18 PDT 2014


On 03/21/2014 04:01 PM, Anuj Phogat wrote:
> OpenGL 4.0 spec, page 306 suggests an INVALID_OPERATION in glGetTexImage
> if :
>     "format is one of the integer formats in table 3.3 and the internal
>      format of the texture image is not integer, or format is not one of
>      the integer formats in table 3.3 and the internal format is integer."
>
> Cc: <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
>   src/mesa/main/texgetimage.c | 10 +++++++++-
>   1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
> index 488b678..2bf0fb4 100644
> --- a/src/mesa/main/texgetimage.c
> +++ b/src/mesa/main/texgetimage.c
> @@ -790,7 +790,8 @@ getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
>      struct gl_texture_image *texImage;
>      const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
>      const GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2;
> -   GLenum baseFormat, err;
> +   GLenum baseFormat, dataType, err;
> +   GLboolean is_tex_format_integer = false;
>
>      if (!legal_getteximage_target(ctx, target)) {
>         _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target=0x%x)", target);
> @@ -823,6 +824,9 @@ getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
>      }
>
>      baseFormat = _mesa_get_format_base_format(texImage->TexFormat);
> +   dataType = _mesa_get_format_datatype(texImage->TexFormat);
> +   is_tex_format_integer = dataType == GL_UNSIGNED_INT
> +                           || dataType == GL_INT;

Maybe we should have a new _mesa_is_format_integer() helper?


>
>      /* Make sure the requested image format is compatible with the
>       * texture's format.
> @@ -858,6 +862,10 @@ getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
>         _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
>         return GL_TRUE;
>      }
> +   else if (_mesa_is_enum_format_integer(format) != is_tex_format_integer) {
> +      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
> +      return GL_TRUE;
> +   }
>
>      if (!_mesa_validate_pbo_access(dimensions, &ctx->Pack, texImage->Width,
>                                     texImage->Height, texImage->Depth,
>



More information about the mesa-stable mailing list