[Mesa-dev] [PATCH v2] mesa: refactor target error checking in glGetTexLevelParameter

Timothy Arceri t_arceri at yahoo.com.au
Fri Aug 14 06:07:39 PDT 2015


Change the commit message to "mesa: fix target error checking in
glGetTexLevelParameter" and Reviewed-by: Timothy Arceri
<t_arceri at yahoo.com.au>


On Thu, 2015-08-13 at 17:03 +0300, Tapani Pälli wrote:
> With non-dsa functions we need to do target error checking before
> _mesa_get_current_tex_object which would just call _mesa_problem 
> without
> raising GL_INVALID_ENUM error. In other places of Mesa, target gets 
> checked
> before this call.
> 
> Fixes failures in:
>    ES31
> -CTS.texture_storage_multisample.APIGLGetTexLevelParameterifv.*
> 
> v2: do the check also for dsa functions (Timothy)
> 
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
>  src/mesa/main/texparam.c | 32 +++++++++++++++++++++++++-------
>  1 file changed, 25 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> index d9efd15..76edcca 100644
> --- a/src/mesa/main/texparam.c
> +++ b/src/mesa/main/texparam.c
> @@ -1574,6 +1574,19 @@ invalid_pname:
>                 _mesa_enum_to_string(pname));
>  }
>  
> +static bool
> +valid_tex_level_parameteriv_target(struct gl_context *ctx, GLenum 
> target,
> +                                   bool dsa)
> +{
> +   const char *suffix = dsa ? "ture" : "";
> +   if (!legal_get_tex_level_parameter_target(ctx, target, dsa)) {
> +      _mesa_error(ctx, GL_INVALID_ENUM,
> +                  "glGetTex%sLevelParameter[if]v(target=%s)", 
> suffix,
> +                  _mesa_enum_to_string(target));
> +      return false;
> +   }
> +   return true;
> +}
>  
>  /**
>   * This isn't exposed to the rest of the driver because it is a part 
> of the
> @@ -1597,13 +1610,6 @@ get_tex_level_parameteriv(struct gl_context 
> *ctx,
>        return;
>     }
>  
> -   if (!legal_get_tex_level_parameter_target(ctx, target, dsa)) {
> -      _mesa_error(ctx, GL_INVALID_ENUM,
> -                  "glGetTex%sLevelParameter[if]v(target=%s)", 
> suffix,
> -                  _mesa_enum_to_string(target));
> -      return;
> -   }
> -
>     maxLevels = _mesa_max_texture_levels(ctx, target);
>     assert(maxLevels != 0);
>  
> @@ -1631,6 +1637,9 @@ _mesa_GetTexLevelParameterfv( GLenum target, 
> GLint level,
>     GLint iparam;
>     GET_CURRENT_CONTEXT(ctx);
>  
> +   if (!valid_tex_level_parameteriv_target(ctx, target, false))
> +      return;
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -1648,6 +1657,9 @@ _mesa_GetTexLevelParameteriv( GLenum target, 
> GLint level,
>     struct gl_texture_object *texObj;
>     GET_CURRENT_CONTEXT(ctx);
>  
> +   if (!valid_tex_level_parameteriv_target(ctx, target, false))
> +      return;
> +
>     texObj = _mesa_get_current_tex_object(ctx, target);
>     if (!texObj)
>        return;
> @@ -1669,6 +1681,9 @@ _mesa_GetTextureLevelParameterfv(GLuint 
> texture, GLint level,
>     if (!texObj)
>        return;
>  
> +   if (!valid_tex_level_parameteriv_target(ctx, texObj->Target, 
> true))
> +      return;
> +
>     get_tex_level_parameteriv(ctx, texObj, texObj->Target, level,
>                               pname, &iparam, true);
>  
> @@ -1687,6 +1702,9 @@ _mesa_GetTextureLevelParameteriv(GLuint 
> texture, GLint level,
>     if (!texObj)
>        return;
>  
> +   if (!valid_tex_level_parameteriv_target(ctx, texObj->Target, 
> true))
> +      return;
> +
>     get_tex_level_parameteriv(ctx, texObj, texObj->Target, level,
>                               pname, params, true);
>  }


More information about the mesa-dev mailing list