[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