[Mesa-dev] [PATCH 23/41] main: Added entry points for glGetTextureLevelParameteriv, fv.

Laura Ekstrand laura at jlekstrand.net
Mon Jan 5 17:58:27 PST 2015


This has been fairly extensively updated, per your comments:
http://cgit.freedesktop.org/~ldeks/mesa/commit/?h=adsa-textures&id=9a3a8c4fcc95cc6e8834cd7af6b5d8c262942d9a

Thanks.

Laura

On Tue, Dec 16, 2014 at 7:46 AM, Brian Paul <brianp at vmware.com> wrote:

> On 12/15/2014 06:22 PM, Laura Ekstrand wrote:
>
>> ---
>>   src/mapi/glapi/gen/ARB_direct_state_access.xml |  14 +++
>>   src/mesa/main/texparam.c                       | 136
>> ++++++++++++++++++++-----
>>   src/mesa/main/texparam.h                       |   9 ++
>>   3 files changed, 131 insertions(+), 28 deletions(-)
>>
>> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
>> b/src/mapi/glapi/gen/ARB_direct_state_access.xml
>> index 9658fd1..c4213eb 100644
>> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
>> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
>> @@ -116,5 +116,19 @@
>>         <param name="texture" type="GLuint" />
>>      </function>
>>
>> +   <function name="GetTextureLevelParameterfv" offset="assign">
>> +      <param name="texture" type="GLuint" />
>> +      <param name="level" type="GLint" />
>> +      <param name="pname" type="GLenum" />
>> +      <param name="params" type="GLfloat *" />
>> +   </function>
>> +
>> +   <function name="GetTextureLevelParameteriv" offset="assign">
>> +      <param name="texture" type="GLuint" />
>> +      <param name="level" type="GLint" />
>> +      <param name="pname" type="GLenum" />
>> +      <param name="params" type="GLint *" />
>> +   </function>
>> +
>>   </category>
>>   </OpenGLAPI>
>> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
>> index 6e3a877..51fbd2a 100644
>> --- a/src/mesa/main/texparam.c
>> +++ b/src/mesa/main/texparam.c
>> @@ -1285,7 +1285,8 @@ static void
>>   get_tex_level_parameter_image(struct gl_context *ctx,
>>                                 const struct gl_texture_object *texObj,
>>                                 GLenum target, GLint level,
>> -                              GLenum pname, GLint *params)
>> +                              GLenum pname, GLint *params,
>> +                              const char *func)
>>   {
>>      const struct gl_texture_image *img = NULL;
>>      struct gl_texture_image dummy_image;
>> @@ -1400,7 +1401,7 @@ get_tex_level_parameter_image(struct gl_context
>> *ctx,
>>          }
>>          else {
>>             _mesa_error(ctx, GL_INVALID_OPERATION,
>> -                       "glGetTexLevelParameter[if]v(pname)");
>> +                       "%s(pname)", func);
>>          }
>>            break;
>>         case GL_TEXTURE_COMPRESSED:
>> @@ -1448,7 +1449,7 @@ get_tex_level_parameter_image(struct gl_context
>> *ctx,
>>
>>   invalid_pname:
>>      _mesa_error(ctx, GL_INVALID_ENUM,
>> -               "glGetTexLevelParameter[if]v(pname=%s)",
>> +               "%s(pname=%s)", func,
>>                  _mesa_lookup_enum_by_nr(pname));
>>   }
>>
>> @@ -1456,7 +1457,8 @@ invalid_pname:
>>   static void
>>   get_tex_level_parameter_buffer(struct gl_context *ctx,
>>                                  const struct gl_texture_object *texObj,
>> -                               GLenum pname, GLint *params)
>> +                               GLenum pname, GLint *params,
>> +                               const char *func)
>>   {
>>      const struct gl_buffer_object *bo = texObj->BufferObject;
>>      mesa_format texFormat = texObj->_BufferObjectFormat;
>> @@ -1531,7 +1533,7 @@ get_tex_level_parameter_buffer(struct gl_context
>> *ctx,
>>         case GL_TEXTURE_COMPRESSED_IMAGE_SIZE:
>>            /* Always illegal for GL_TEXTURE_BUFFER */
>>            _mesa_error(ctx, GL_INVALID_OPERATION,
>> -                     "glGetTexLevelParameter[if]v(pname)");
>> +                     "%s(pname)", func);
>>            break;
>>
>>         /* GL_ARB_texture_float */
>> @@ -1559,57 +1561,135 @@ get_tex_level_parameter_buffer(struct
>> gl_context *ctx,
>>
>>   invalid_pname:
>>      _mesa_error(ctx, GL_INVALID_ENUM,
>> -               "glGetTexLevelParameter[if]v(pname=%s)",
>> +               "%s(pname=%s)", func,
>>                  _mesa_lookup_enum_by_nr(pname));
>>   }
>>
>>
>> +static bool
>> +levels_valid( struct gl_context *ctx, GLenum target, GLint level,
>> +              const char *func)
>>
>
> s/levels/level/  and add a comment on the function?
>
>
>  +{
>> +   GLint maxLevels;
>> +
>> +   /* Need this because glGetTexLevelParameteri and f are different. We
>> don't
>> +    * want to keep track of both the dsa flag and iv, i, f, etc. That's
>> too
>> +    * much work. */
>> +   bool dsa = strstr(func, "Texture") ? true : false;
>>
>
> This seems kind of clunky.
>
>
>
>  +
>> +   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxCombinedTextureImageUnits)
>> {
>> +      _mesa_error(ctx, GL_INVALID_OPERATION,
>> +                  "%s(current unit)", func);
>> +      return false;
>> +   }
>> +
>> +   if (!legal_get_tex_level_parameter_target(ctx, target, dsa)) {
>> +      _mesa_error(ctx, GL_INVALID_ENUM,
>> +                  "%s(target=0x%x)", func, target);
>> +      return false;
>> +   }
>> +
>> +   maxLevels = _mesa_max_texture_levels(ctx, target);
>> +   assert(maxLevels != 0);
>> +
>> +   if (level < 0 || level >= maxLevels) {
>> +      _mesa_error( ctx, GL_INVALID_VALUE, "%s", func );
>> +      return false;
>> +   }
>> +
>> +   return true;
>> +}
>> +
>> +/**
>> + * This isn't exposed to the rest of the driver because it is a part of
>> the
>> + * OpenGL API that is rarely used.
>> + */
>> +static void
>> +get_tex_level_parameteriv( struct gl_context *ctx,
>> +                           struct gl_texture_object *texObj,
>> +                           GLenum target, GLint level,
>> +                           GLenum pname, GLint *params,
>> +                           const char *func )
>> +{
>> +   if (!levels_valid(ctx, target, level, func))
>> +      return;
>> +
>> +   if (target == GL_TEXTURE_BUFFER) {
>> +      get_tex_level_parameter_buffer(ctx, texObj, pname, params, func);
>> +   }
>> +   else {
>> +      get_tex_level_parameter_image(ctx, texObj, target,
>> +                                    level, pname, params, func);
>> +   }
>> +}
>> +
>>   void GLAPIENTRY
>>   _mesa_GetTexLevelParameterfv( GLenum target, GLint level,
>>                                 GLenum pname, GLfloat *params )
>>   {
>> +   struct gl_texture_object *texObj;
>>      GLint iparam;
>> -   _mesa_GetTexLevelParameteriv( target, level, pname, &iparam );
>> +   GET_CURRENT_CONTEXT(ctx);
>> +
>> +   texObj = _mesa_get_current_tex_object(ctx, target);
>> +   if (!texObj)
>> +      return;
>> +
>> +   get_tex_level_parameteriv(ctx, texObj, target, level,
>> +                             pname, &iparam, "glGetTexLevelParameterfv");
>> +
>>      *params = (GLfloat) iparam;
>>   }
>>
>> -
>>   void GLAPIENTRY
>>   _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
>>                                 GLenum pname, GLint *params )
>>   {
>>      struct gl_texture_object *texObj;
>> -   GLint maxLevels;
>>      GET_CURRENT_CONTEXT(ctx);
>>
>> -   if (ctx->Texture.CurrentUnit >= ctx->Const.MaxCombinedTextureImageUnits)
>> {
>> -      _mesa_error(ctx, GL_INVALID_OPERATION,
>> -                  "glGetTexLevelParameteriv(current unit)");
>> +   texObj = _mesa_get_current_tex_object(ctx, target);
>> +   if (!texObj)
>>         return;
>> -   }
>>
>> -   if (!legal_get_tex_level_parameter_target(ctx, target, false)) {
>> -      _mesa_error(ctx, GL_INVALID_ENUM,
>> -                  "glGetTexLevelParameter[if]v(target=0x%x)", target);
>> -      return;
>> -   }
>> +   get_tex_level_parameteriv(ctx, texObj, target, level,
>> +                             pname, params, "glGetTexLevelParameteriv");
>> +}
>>
>> -   maxLevels = _mesa_max_texture_levels(ctx, target);
>> -   assert(maxLevels != 0);
>> +void GLAPIENTRY
>> +_mesa_GetTextureLevelParameterfv( GLuint texture, GLint level,
>> +                                  GLenum pname, GLfloat *params )
>> +{
>> +   struct gl_texture_object *texObj;
>> +   GLint iparam;
>> +   GET_CURRENT_CONTEXT(ctx);
>>
>> -   if (level < 0 || level >= maxLevels) {
>> -      _mesa_error( ctx, GL_INVALID_VALUE, "glGetTexLevelParameter[if]v"
>> );
>> +   texObj = _mesa_lookup_texture_err(ctx, texture,
>> +                                     "glGetTextureLevelParameterfv");
>> +   if (!texObj)
>>         return;
>> -   }
>>
>> -   texObj = _mesa_get_current_tex_object(ctx, target);
>> +   get_tex_level_parameteriv(ctx, texObj, texObj->Target, level,
>> +                             pname, &iparam,
>> "glGetTextureLevelParameterfv");
>>
>> -   if (target == GL_TEXTURE_BUFFER)
>> -      get_tex_level_parameter_buffer(ctx, texObj, pname, params);
>> -   else
>> -      get_tex_level_parameter_image(ctx, texObj, target, level, pname,
>> params);
>> +   *params = (GLfloat) iparam;
>>   }
>>
>> +void GLAPIENTRY
>> +_mesa_GetTextureLevelParameteriv( GLuint texture, GLint level,
>> +                                  GLenum pname, GLint *params )
>> +{
>> +   struct gl_texture_object *texObj;
>> +   GET_CURRENT_CONTEXT(ctx);
>> +
>> +   texObj = _mesa_lookup_texture_err(ctx, texture,
>> +                                     "glGetTextureLevelParameteriv");
>> +   if (!texObj)
>> +      return;
>> +
>> +   get_tex_level_parameteriv(ctx, texObj, texObj->Target, level,
>> +                             pname, params,
>> "glGetTextureLevelParameteriv");
>> +}
>>
>>   void GLAPIENTRY
>>   _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
>> diff --git a/src/mesa/main/texparam.h b/src/mesa/main/texparam.h
>> index a2fb3ff..05aeb8a 100644
>> --- a/src/mesa/main/texparam.h
>> +++ b/src/mesa/main/texparam.h
>> @@ -81,6 +81,15 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint
>> level,
>>                                 GLenum pname, GLint *params );
>>
>>   extern void GLAPIENTRY
>> +_mesa_GetTextureLevelParameterfv( GLuint texture, GLint level,
>> +                                  GLenum pname, GLfloat *params );
>> +
>> +extern void GLAPIENTRY
>> +_mesa_GetTextureLevelParameteriv( GLuint texture, GLint level,
>> +                                  GLenum pname, GLint *params );
>> +
>> +
>> +extern void GLAPIENTRY
>>   _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params );
>>
>>   extern void GLAPIENTRY
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150105/28bf678b/attachment.html>


More information about the mesa-dev mailing list