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

Tapani Pälli tapani.palli at intel.com
Thu Aug 13 05:01:38 PDT 2015



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.

// Tapani


More information about the mesa-dev mailing list