[Mesa-dev] [PATCH 3/3] mesa: Validate the target argument earlier in glGenerateMipmap()

Laura Ekstrand laura at jlekstrand.net
Mon Mar 23 11:18:35 PDT 2015


Looks good to me.

Reviewed-by: Laura Ekstrand <laura at jlekstrand.net>

On Mon, Mar 23, 2015 at 4:30 AM, Eduardo Lima Mitev <elima at igalia.com>
wrote:

> glGenerateMipmap() queries the current texture object corresponding to the
> target
> argument before ever validating it. It does so by calling
> _mesa_get_current_tex_object() which explicitly states that target must
> have been
> validated before. However, the target validation occurs later on in
> _mesa_generate_texture_mipmap().
>
> This patch takes the target validation from
> _mesa_generate_texture_mipmap() and
> creates a new function generate_mipmap_is_valid_target(), that is called by
> both glGenerateMipmap() and glGenerateTextureMipmap().
>
> This gives the correct GL user error when an invalid target is given to
> glGenerateMipmap.
> ---
>  src/mesa/main/genmipmap.c | 52
> +++++++++++++++++++++++++++++++++--------------
>  1 file changed, 37 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/main/genmipmap.c b/src/mesa/main/genmipmap.c
> index 9aef090..163901f 100644
> --- a/src/mesa/main/genmipmap.c
> +++ b/src/mesa/main/genmipmap.c
> @@ -39,19 +39,16 @@
>  #include "hash.h"
>
>  /**
> - * Implements glGenerateMipmap and glGenerateTextureMipmap.
> - * Generates all the mipmap levels below the base level.
> + * Validates the target argument in glGenerateMipmap and
> + * glGenerateTextureMipmap.
> + * Returns true if target is valid, otherwise returns false and sets GL
> error
> + * accordingly.
>   */
> -void
> -_mesa_generate_texture_mipmap(struct gl_context *ctx,
> -                              struct gl_texture_object *texObj, GLenum
> target,
> -                              bool dsa)
> +static bool
> +generate_mipmap_is_valid_target(struct gl_context *ctx, GLenum target,
> +                                const char *caller)
>  {
> -   struct gl_texture_image *srcImage;
> -   GLboolean error;
> -   const char *suffix = dsa ? "Texture" : "";
> -
> -   FLUSH_VERTICES(ctx, 0);
> +  bool error;
>
>     switch (target) {
>     case GL_TEXTURE_1D:
> @@ -78,15 +75,32 @@ _mesa_generate_texture_mipmap(struct gl_context *ctx,
>                !ctx->Extensions.ARB_texture_cube_map_array;
>        break;
>     default:
> -      error = GL_TRUE;
> +      error = true;
>     }
>
>     if (error) {
> -      _mesa_error(ctx, GL_INVALID_ENUM, "glGenerate%sMipmap(target=%s)",
> -                  suffix, _mesa_lookup_enum_by_nr(target));
> -      return;
> +      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target=%s)",
> +                  caller, _mesa_lookup_enum_by_nr(target));
> +      return false;
>     }
>
> +   return true;
> +}
> +
> +/**
> + * Implements glGenerateMipmap and glGenerateTextureMipmap.
> + * Generates all the mipmap levels below the base level.
> + */
> +void
> +_mesa_generate_texture_mipmap(struct gl_context *ctx,
> +                              struct gl_texture_object *texObj, GLenum
> target,
> +                              bool dsa)
> +{
> +   struct gl_texture_image *srcImage;
> +   const char *suffix = dsa ? "Texture" : "";
> +
> +   FLUSH_VERTICES(ctx, 0);
> +
>     if (texObj->BaseLevel >= texObj->MaxLevel) {
>        /* nothing to do */
>        return;
> @@ -142,6 +156,9 @@ _mesa_GenerateMipmap(GLenum target)
>     struct gl_texture_object *texObj;
>     GET_CURRENT_CONTEXT(ctx);
>
> +   if (!generate_mipmap_is_valid_target(ctx, target, "glGenerateMipmap"))
> +      return;
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -162,5 +179,10 @@ _mesa_GenerateTextureMipmap(GLuint texture)
>     if (!texObj)
>        return;
>
> +   if (!generate_mipmap_is_valid_target(ctx, texObj->Target,
> +                                        "glGenerateTextureMipmap")) {
> +      return;
> +   }
> +
>     _mesa_generate_texture_mipmap(ctx, texObj, texObj->Target, true);
>  }
> --
> 2.1.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150323/9a271e07/attachment.html>


More information about the mesa-dev mailing list