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

Emil Velikov emil.l.velikov at gmail.com
Tue Mar 3 18:00:55 PST 2015


Hi Laura,

This commit does not pick cleanly against the 10.4 tree. Upon closer
look it seems that it depends on your Texture{Sub,}Image rework from
earlier this year. Can you confirm if want this for 10.4 and if so
send over a backport.

Thanks
Emil

On 28 February 2015 at 00:38, Laura Ekstrand <laura at jlekstrand.net> wrote:
> CC: 10.4, 10.5
>
>
> ---------- Forwarded message ----------
> From: Laura Ekstrand <laura at jlekstrand.net>
> Date: Wed, Feb 25, 2015 at 6:04 PM
> Subject: [PATCH] main: Fix target checking for CopyTexSubImage*D.
> To: mesa-dev at lists.freedesktop.org
> Cc: Laura Ekstrand <laura at jlekstrand.net>
>
>
> This fixes a dEQP test failure.  In the test,
> glCopyTexSubImage2D 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 separated from the main error-checking function and
> called prior to _mesa_get_current_tex_object.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89312
> ---
>  src/mesa/main/teximage.c | 62
> +++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 54 insertions(+), 8 deletions(-)
>
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 87231df..475dc54 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -2815,14 +2815,6 @@ copytexsubimage_error_check(struct gl_context *ctx,
> GLuint dimensions,
>        }
>     }
>
> -   /* check target (proxies not allowed) */
> -   if (!legal_texsubimage_target(ctx, dimensions, target, dsa)) {
> -      _mesa_error(ctx, GL_INVALID_ENUM,
> "glCopyTex%sSubImage%uD(target=%s)",
> -                  suffix, dimensions,
> -                  _mesa_lookup_enum_by_nr(target));
> -      return GL_TRUE;
> -   }
> -
>     /* Check level */
>     if (level < 0 || level >= _mesa_max_texture_levels(ctx, target)) {
>        _mesa_error(ctx, GL_INVALID_VALUE,
> @@ -4090,6 +4082,16 @@ _mesa_CopyTexSubImage1D( GLenum target, GLint level,
>     struct gl_texture_object* texObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> +   /* Check target (proxies not allowed). Target must be checked prior to
> +    * calling _mesa_get_current_tex_object.
> +    */
> +   if (!legal_texsubimage_target(ctx, 1, target, false)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glCopyTexSubImage1D(invalid target %s)",
> +                  _mesa_lookup_enum_by_nr(target));
> +      return;
> +   }
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -4108,6 +4110,16 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level,
>     struct gl_texture_object* texObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> +   /* Check target (proxies not allowed). Target must be checked prior to
> +    * calling _mesa_get_current_tex_object.
> +    */
> +   if (!legal_texsubimage_target(ctx, 2, target, false)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glCopyTexSubImage2D(invalid target %s)",
> +                  _mesa_lookup_enum_by_nr(target));
> +      return;
> +   }
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -4127,6 +4139,16 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level,
>     struct gl_texture_object* texObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> +   /* Check target (proxies not allowed). Target must be checked prior to
> +    * calling _mesa_get_current_tex_object.
> +    */
> +   if (!legal_texsubimage_target(ctx, 3, target, false)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glCopyTexSubImage3D(invalid target %s)",
> +                  _mesa_lookup_enum_by_nr(target));
> +      return;
> +   }
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -4147,6 +4169,14 @@ _mesa_CopyTextureSubImage1D(GLuint texture, GLint
> level,
>     if (!texObj)
>        return;
>
> +   /* Check target (proxies not allowed). */
> +   if (!legal_texsubimage_target(ctx, 1, texObj->Target, true)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glCopyTextureSubImage1D(invalid target %s)",
> +                  _mesa_lookup_enum_by_nr(texObj->Target));
> +      return;
> +   }
> +
>     _mesa_copy_texture_sub_image(ctx, 1, texObj, texObj->Target, level,
>                                  xoffset, 0, 0, x, y, width, 1, true);
>  }
> @@ -4163,6 +4193,14 @@ _mesa_CopyTextureSubImage2D(GLuint texture, GLint
> level,
>     if (!texObj)
>        return;
>
> +   /* Check target (proxies not allowed). */
> +   if (!legal_texsubimage_target(ctx, 2, texObj->Target, true)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glCopyTextureSubImage2D(invalid target %s)",
> +                  _mesa_lookup_enum_by_nr(texObj->Target));
> +      return;
> +   }
> +
>     _mesa_copy_texture_sub_image(ctx, 2, texObj, texObj->Target, level,
>                                  xoffset, yoffset, 0,
>                                  x, y, width, height, true);
> @@ -4182,6 +4220,14 @@ _mesa_CopyTextureSubImage3D(GLuint texture, GLint
> level,
>     if (!texObj)
>        return;
>
> +   /* Check target (proxies not allowed). */
> +   if (!legal_texsubimage_target(ctx, 3, texObj->Target, true)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glCopyTextureSubImage3D(invalid target %s)",
> +                  _mesa_lookup_enum_by_nr(texObj->Target));
> +      return;
> +   }
> +
>     _mesa_copy_texture_sub_image(ctx, 3, texObj, texObj->Target, level,
>                                  xoffset, yoffset, zoffset,
>                                  x, y, width, height, true);
> --
> 2.1.0
>
>
>
> _______________________________________________
> mesa-stable mailing list
> mesa-stable at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-stable
>


More information about the mesa-stable mailing list