[Mesa-stable] Fwd: [Mesa-dev] [PATCH] main: Fix target checking for CompressedTexSubImage*D.

Laura Ekstrand laura at jlekstrand.net
Wed Mar 4 09:09:06 PST 2015


No, pre-DSA versions do not need this fix.

On Tue, Mar 3, 2015 at 6:00 PM, Emil Velikov <emil.l.velikov at gmail.com>
wrote:

> Hi Laura,
>
> This patch does not pick cleanly against the 10.4 branch. Considering
> it never got any dsa treatment do we need to backport it ? If so can
> you send one to the list.
>
> Thanks
> Emil
>
> On 28 February 2015 at 00:39, Laura Ekstrand <laura at jlekstrand.net> wrote:
> > CC: 10.4, 10.5
> >
>
>
> >
> > ---------- Forwarded message ----------
> > From: Anuj Phogat <anuj.phogat at gmail.com>
> > Date: Thu, Feb 26, 2015 at 11:46 AM
> > Subject: Re: [Mesa-dev] [PATCH] main: Fix target checking for
> > CompressedTexSubImage*D.
> > To: Laura Ekstrand <laura at jlekstrand.net>
> > Cc: "mesa-dev at lists.freedesktop.org" <mesa-dev at lists.freedesktop.org>
> >
> >
> > On Wed, Feb 25, 2015 at 3:58 PM, Laura Ekstrand <laura at jlekstrand.net>
> > wrote:
> >> This fixes a dEQP test failure.  In the test,
> >> glCompressedTexSubImage2D was called with target = 0 and failed to throw
> >> INVALID ENUM. This failure was caused by
> _mesa_get_current_tex_object(ctx,
> >> target) being called before the target checking.  To remedy this, target
> >> checking was made into its own function and called prior to
> >> _mesa_get_current_tex_object.
> >>
> >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89311
> >> ---
> >>  src/mesa/main/teximage.c | 80
> >> +++++++++++++++++++++++++++++++++++++++---------
> >>  1 file changed, 65 insertions(+), 15 deletions(-)
> >>
> >> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> >> index faec444..87231df 100644
> >> --- a/src/mesa/main/teximage.c
> >> +++ b/src/mesa/main/teximage.c
> >> @@ -4456,25 +4456,21 @@ out:
> >>
> >>
> >>  /**
> >> - * Error checking for glCompressedTexSubImage[123]D().
> >> + * Target checking for glCompressedTexSubImage[123]D().
> >>   * \return GL_TRUE if error, GL_FALSE if no error
> >> + * Must come before other error checking so that the texture object can
> >> + * be correctly retrieved using _mesa_get_current_tex_object.
> >>   */
> >>  static GLboolean
> >> -compressed_subtexture_error_check(struct gl_context *ctx, GLint dims,
> >> -                                  const struct gl_texture_object
> *texObj,
> >> -                                  GLenum target, GLint level,
> >> -                                  GLint xoffset, GLint yoffset, GLint
> >> zoffset,
> >> -                                  GLsizei width, GLsizei height,
> GLsizei
> >> depth,
> >> -                                  GLenum format, GLsizei imageSize,
> bool
> >> dsa)
> >> +compressed_subtexture_target_check(struct gl_context *ctx, GLenum
> target,
> >> +                                   GLint dims, GLenum format, bool dsa,
> >> +                                   const char *caller)
> >>  {
> >> -   struct gl_texture_image *texImage;
> >> -   GLint expectedSize;
> >>     GLboolean targetOK;
> >> -   const char *suffix = dsa ? "ture" : "";
> >>
> >>     if (dsa && target == GL_TEXTURE_RECTANGLE) {
> >> -      _mesa_error(ctx, GL_INVALID_OPERATION,
> >> -                  "glCompressedSubTexture%dD(target)", dims);
> >> +      _mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid target %s)",
> >> caller,
> >> +                  _mesa_lookup_enum_by_nr(target));
> >>        return GL_TRUE;
> >>     }
> >>
> >> @@ -4537,7 +4533,9 @@ compressed_subtexture_error_check(struct
> gl_context
> >> *ctx, GLint dims,
> >>           }
> >>           if (invalidformat) {
> >>              _mesa_error(ctx, GL_INVALID_OPERATION,
> >> -                        "glCompressedTex%sSubImage%uD(target)", suffix,
> >> dims);
> >> +                        "%s(invalid target %s for format %s)", caller,
> >> +                        _mesa_lookup_enum_by_nr(target),
> >> +                        _mesa_lookup_enum_by_nr(format));
> >>              return GL_TRUE;
> >>           }
> >>        }
> >> @@ -4551,11 +4549,30 @@ compressed_subtexture_error_check(struct
> >> gl_context *ctx, GLint dims,
> >>     }
> >>
> >>     if (!targetOK) {
> >> -      _mesa_error(ctx, GL_INVALID_ENUM,
> >> -                  "glCompressedTex%sSubImage%uD(target)", suffix,
> dims);
> >> +      _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid target %s)",
> caller,
> >> +                  _mesa_lookup_enum_by_nr(target));
> >>        return GL_TRUE;
> >>     }
> >>
> >> +   return GL_FALSE;
> >> +}
> >> +
> >> +/**
> >> + * Error checking for glCompressedTexSubImage[123]D().
> >> + * \return GL_TRUE if error, GL_FALSE if no error
> >> + */
> >> +static GLboolean
> >> +compressed_subtexture_error_check(struct gl_context *ctx, GLint dims,
> >> +                                  const struct gl_texture_object
> *texObj,
> >> +                                  GLenum target, GLint level,
> >> +                                  GLint xoffset, GLint yoffset, GLint
> >> zoffset,
> >> +                                  GLsizei width, GLsizei height,
> GLsizei
> >> depth,
> >> +                                  GLenum format, GLsizei imageSize,
> bool
> >> dsa)
> >> +{
> >> +   struct gl_texture_image *texImage;
> >> +   GLint expectedSize;
> >> +   const char *suffix = dsa ? "ture" : "";
> >> +
> >>     /* this will catch any invalid compressed format token */
> >>     if (!_mesa_is_compressed_format(ctx, format)) {
> >>        _mesa_error(ctx, GL_INVALID_ENUM,
> >> @@ -4702,6 +4719,11 @@ _mesa_CompressedTexSubImage1D(GLenum target,
> GLint
> >> level, GLint xoffset,
> >>
> >>     GET_CURRENT_CONTEXT(ctx);
> >>
> >> +   if (compressed_subtexture_target_check(ctx, target, 1, format,
> false,
> >> +
> "glCompressedTexSubImage1D")) {
> >> +      return;
> >> +   }
> >> +
> >>     texObj = _mesa_get_current_tex_object(ctx, target);
> >>     if (!texObj)
> >>        return;
> >> @@ -4737,6 +4759,12 @@ _mesa_CompressedTextureSubImage1D(GLuint texture,
> >> GLint level, GLint xoffset,
> >>     if (!texObj)
> >>        return;
> >>
> >> +   if (compressed_subtexture_target_check(ctx, texObj->Target, 1,
> format,
> >> +                                          true,
> >> +
> >> "glCompressedTextureSubImage1D")) {
> >> +      return;
> >> +   }
> >> +
> >>     if (compressed_subtexture_error_check(ctx, 1, texObj,
> texObj->Target,
> >>                                           level, xoffset, 0, 0,
> >>                                           width, 1, 1,
> >> @@ -4767,6 +4795,11 @@ _mesa_CompressedTexSubImage2D(GLenum target,
> GLint
> >> level, GLint xoffset,
> >>
> >>     GET_CURRENT_CONTEXT(ctx);
> >>
> >> +   if (compressed_subtexture_target_check(ctx, target, 2, format,
> false,
> >> +
> "glCompressedTexSubImage2D")) {
> >> +      return;
> >> +   }
> >> +
> >>     texObj = _mesa_get_current_tex_object(ctx, target);
> >>     if (!texObj)
> >>        return;
> >> @@ -4805,6 +4838,12 @@ _mesa_CompressedTextureSubImage2D(GLuint texture,
> >> GLint level, GLint xoffset,
> >>     if (!texObj)
> >>        return;
> >>
> >> +   if (compressed_subtexture_target_check(ctx, texObj->Target, 2,
> format,
> >> +                                          true,
> >> +
> >> "glCompressedTextureSubImage2D")) {
> >> +      return;
> >> +   }
> >> +
> >>     if (compressed_subtexture_error_check(ctx, 2, texObj,
> texObj->Target,
> >>                                           level, xoffset, yoffset, 0,
> >>                                           width, height, 1,
> >> @@ -4833,6 +4872,11 @@ _mesa_CompressedTexSubImage3D(GLenum target,
> GLint
> >> level, GLint xoffset,
> >>
> >>     GET_CURRENT_CONTEXT(ctx);
> >>
> >> +   if (compressed_subtexture_target_check(ctx, target, 3, format,
> false,
> >> +
> "glCompressedTexSubImage3D")) {
> >> +      return;
> >> +   }
> >> +
> >>     texObj = _mesa_get_current_tex_object(ctx, target);
> >>     if (!texObj)
> >>        return;
> >> @@ -4874,6 +4918,12 @@ _mesa_CompressedTextureSubImage3D(GLuint texture,
> >> GLint level, GLint xoffset,
> >>     if (!texObj)
> >>        return;
> >>
> >> +   if (compressed_subtexture_target_check(ctx, texObj->Target, 3,
> format,
> >> +                                          true,
> >> +
> >> "glCompressedTextureSubImage3D")) {
> >> +      return;
> >> +   }
> >> +
> >>     if (compressed_subtexture_error_check(ctx, 3, texObj,
> texObj->Target,
> >>                                           level, xoffset, yoffset,
> >> zoffset,
> >>                                           width, height, depth,
> >> --
> >> 2.1.0
> >>
> >> _______________________________________________
> >> mesa-dev mailing list
> >> mesa-dev at lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
> > Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
> >
> >
> > _______________________________________________
> > mesa-stable mailing list
> > mesa-stable at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-stable
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-stable/attachments/20150304/f22a7403/attachment-0001.html>


More information about the mesa-stable mailing list