[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