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

Tapani Pälli tapani.palli at intel.com
Thu Aug 13 07:02:43 PDT 2015


On 08/13/2015 03:47 PM, Timothy Arceri wrote:
> On Thu, 2015-08-13 at 15:01 +0300, Tapani Pälli wrote:
>> On 08/13/2015 02:51 PM, Timothy Arceri wrote:
>>> On Thu, 2015-08-13 at 14:05 +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. For dsa functions, we do not need this check. Texture
>>>> has been created already with a proper target value.
>>>>
>>>> Fixes failures in:
>>>>      ES31-CTS.texture_storage_multisample.APIGLGetTexLevelParameterifv.*
>>>>
>>>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>>>> ---
>>>>    src/mesa/main/texparam.c | 26 +++++++++++++++++++-------
>>>>    1 file changed, 19 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
>>>> index c0611c3..81c209f 100644
>>>> --- a/src/mesa/main/texparam.c
>>>> +++ b/src/mesa/main/texparam.c
>>>> @@ -1562,6 +1562,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
>>>> @@ -1585,13 +1598,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;
>>>> -   }
>>>> -_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;
>>>> @@ -1636,6 +1645,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;
>>>
>>> I think you forgot to add calls to the new validation for the dsa
>>> functions.
>>>
>> Nope, the motivation for leaving out the checks for dsa functions is
>> that the texture target enum has been validated already for existing
>> textures, it cannot be invalid at this point. At least this is how I
>> understand it.
> I don't think thats right. The dsa functions are just passed a texture id, the
> id may find you a texture that exists but you need to make sure the texture is
> a valid type for use with the LevelParameter*

Ah right, yep a check is required. I'll send a v2

>
>> // Tapani



More information about the mesa-dev mailing list