[Mesa-dev] [PATCH 09/17] mesa: Validate target before resolving tex obj in glTex(ture)SubImageXD

Ian Romanick idr at freedesktop.org
Wed Jul 29 12:52:24 PDT 2015


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

This patch should definitely be tagged for the 10.6.x series.  I suspect
this problem was introduced when the DSA work landed.

On 07/29/2015 07:01 AM, Samuel Iglesias Gonsalvez wrote:
> From: Eduardo Lima Mitev <elima at igalia.com>
> 
> Currently, glTexSubImageXD attempt to resolve the texture object
> (by calling _mesa_get_current_tex_object()) before validating the given
> target. However, that method explicitly states that target must have been
> validated before calling it, so it never returns a user error.
> 
> The target validation occurs later when texsubimage_error_check() is called.
> 
> This patch reorganizes target validation, taking it out from the error check
> function and into a point before the texture object is resolved.
> ---
>  src/mesa/main/teximage.c | 29 ++++++++++++++---------------
>  1 file changed, 14 insertions(+), 15 deletions(-)
> 
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 949eef0..c71b818 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -2487,13 +2487,6 @@ texsubimage_error_check(struct gl_context *ctx, GLuint dimensions,
>        return GL_TRUE;
>     }
>  
> -   /* check target (proxies not allowed) */
> -   if (!legal_texsubimage_target(ctx, dimensions, target, dsa)) {
> -      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target=%s)",
> -                  callerName, _mesa_enum_to_string(target));
> -      return GL_TRUE;
> -   }
> -
>     /* level check */
>     if (level < 0 || level >= _mesa_max_texture_levels(ctx, target)) {
>        _mesa_error(ctx, GL_INVALID_VALUE, "%s(level=%d)", callerName, level);
> @@ -3522,14 +3515,6 @@ _mesa_texture_sub_image(struct gl_context *ctx, GLuint dims,
>  {
>     FLUSH_VERTICES(ctx, 0);
>  
> -   /* check target (proxies not allowed) */
> -   if (!legal_texsubimage_target(ctx, dims, target, dsa)) {
> -      _mesa_error(ctx, GL_INVALID_ENUM, "glTex%sSubImage%uD(target=%s)",
> -                  dsa ? "ture" : "",
> -                  dims, _mesa_enum_to_string(target));
> -      return;
> -   }
> -
>     if (ctx->NewState & _NEW_PIXEL)
>        _mesa_update_state(ctx);
>  
> @@ -3579,6 +3564,13 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
>     struct gl_texture_object *texObj;
>     struct gl_texture_image *texImage;
>  
> +   /* check target (proxies not allowed) */
> +   if (!legal_texsubimage_target(ctx, dims, target, false)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage%uD(target=%s)",
> +                  dims, _mesa_enum_to_string(target));
> +      return;
> +   }
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -3639,6 +3631,13 @@ texturesubimage(struct gl_context *ctx, GLuint dims,
>        return;
>     }
>  
> +   /* check target (proxies not allowed) */
> +   if (!legal_texsubimage_target(ctx, dims, texObj->Target, true)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target=%s)",
> +                  callerName, _mesa_enum_to_string(texObj->Target));
> +      return;
> +   }
> +
>     if (texsubimage_error_check(ctx, dims, texObj, texObj->Target, level,
>                                 xoffset, yoffset, zoffset,
>                                 width, height, depth, format, type,
> 



More information about the mesa-dev mailing list