[Mesa-dev] [PATCH 4/4] meta: Use internal functions to set texture parameters

Jason Ekstrand jason at jlekstrand.net
Wed Jan 20 20:31:39 PST 2016


On Jan 20, 2016 6:18 PM, "Ian Romanick" <idr at freedesktop.org> wrote:
>
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> _mesa_texture_parameteriv is used because (the more obvious)
> _mesa_texture_parameteri just stuffs the parameter in an array and calls
> _mesa_texture_parameteriv.  This just cuts out the middleman.
>
> As a side bonus we no longer need check that ARB_stencil_texturing is
> supported.  The test doesn't allow non-supporting implementations to
> avoid any work, and it's redundant with the value-changed test.
>
> Fix bug #93717 because the state restore commands at the bottom of
> _mesa_meta_GenerateMipmap no longer depend on the bound state.
>
> Fixes  piglit   arb_direct_state_access-generatetexturemipmap  with  the
> changes  recently sent  to the  piglit mailing  list.  See  the bugzilla
> entry for more info.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93717
> Cc: "11.0 11.1" <mesa-stable at lists.freedesktop.org>
> ---
>  src/mesa/drivers/common/meta.c                 | 12 ++++++----
>  src/mesa/drivers/common/meta.h                 |  2 +-
>  src/mesa/drivers/common/meta_blit.c            | 33
++++++++++++++++----------
>  src/mesa/drivers/common/meta_generate_mipmap.c | 26 ++++++++++++++------
>  4 files changed, 49 insertions(+), 24 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c
b/src/mesa/drivers/common/meta.c
> index 1ed0e4d..5f2e796 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -3179,8 +3179,10 @@ decompress_texture_image(struct gl_context *ctx,
>
>        /* restrict sampling to the texture level of interest */
>        if (target != GL_TEXTURE_RECTANGLE_ARB) {
> -         _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL,
texImage->Level);
> -         _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL,
texImage->Level);
> +         _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_BASE_LEVEL,
> +                                   (GLint *) &texImage->Level, false);
> +         _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
> +                                   (GLint *) &texImage->Level, false);
>        }
>
>        /* render quad w/ texture into renderbuffer */
> @@ -3190,8 +3192,10 @@ decompress_texture_image(struct gl_context *ctx,
>         * be restored by _mesa_meta_end().
>         */
>        if (target != GL_TEXTURE_RECTANGLE_ARB) {
> -         _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL,
baseLevelSave);
> -         _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, maxLevelSave);
> +         _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_BASE_LEVEL,
> +                                   &baseLevelSave, false);
> +         _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
> +                                   &maxLevelSave, false);
>        }
>
>     }
> diff --git a/src/mesa/drivers/common/meta.h
b/src/mesa/drivers/common/meta.h
> index 3691e7d..074f70d 100644
> --- a/src/mesa/drivers/common/meta.h
> +++ b/src/mesa/drivers/common/meta.h
> @@ -469,7 +469,7 @@ _mesa_meta_bind_rb_as_tex_image(struct gl_context
*ctx,
>
>  struct gl_sampler_object *
>  _mesa_meta_setup_sampler(struct gl_context *ctx,
> -                         const struct gl_texture_object *texObj,
> +                         struct gl_texture_object *texObj,

Wow... Good work us.  It's const because the only thing we do with the
pointer is look up the name so we can change it some other way.  *sigh*

Series is

Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>

>                           GLenum target, GLenum filter, GLuint srcLevel);
>
>  extern GLbitfield
> diff --git a/src/mesa/drivers/common/meta_blit.c
b/src/mesa/drivers/common/meta_blit.c
> index 78ecfe2..5d80f7d 100644
> --- a/src/mesa/drivers/common/meta_blit.c
> +++ b/src/mesa/drivers/common/meta_blit.c
> @@ -828,22 +828,29 @@ void
>  _mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
>                             struct fb_tex_blit_state *blit)
>  {
> +   struct gl_texture_object *const texObj =
> +      _mesa_get_current_tex_object(ctx, target);
> +
>     /* Restore texture object state, the texture binding will
>      * be restored by _mesa_meta_end().
>      */
>     if (target != GL_TEXTURE_RECTANGLE_ARB) {
> -      _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL,
blit->baseLevelSave);
> -      _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL,
blit->maxLevelSave);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_BASE_LEVEL,
> +                                &blit->baseLevelSave, false);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
> +                                &blit->maxLevelSave, false);
>     }
>
> -   if (ctx->Extensions.ARB_stencil_texturing) {
> -      const struct gl_texture_object *texObj =
> -         _mesa_get_current_tex_object(ctx, target);
> +   /* If ARB_stencil_texturing is not supported, the mode won't have
changed. */
> +   if (texObj->StencilSampling != blit->stencilSamplingSave) {
> +      /* GLint so the compiler won't complain about type signedness
mismatch
> +       * in the call to _mesa_texture_parameteriv below.
> +       */
> +      const GLint param = blit->stencilSamplingSave ?
> +         GL_STENCIL_INDEX : GL_DEPTH_COMPONENT;
>
> -      if (texObj->StencilSampling != blit->stencilSamplingSave)
> -         _mesa_TexParameteri(target, GL_DEPTH_STENCIL_TEXTURE_MODE,
> -                             blit->stencilSamplingSave ?
> -                             GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
> +      _mesa_texture_parameteriv(ctx, texObj,
GL_DEPTH_STENCIL_TEXTURE_MODE,
> +                                &param, false);
>     }
>
>     _mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit,
blit->samp_obj_save);
> @@ -895,7 +902,7 @@ _mesa_meta_bind_rb_as_tex_image(struct gl_context
*ctx,
>
>  struct gl_sampler_object *
>  _mesa_meta_setup_sampler(struct gl_context *ctx,
> -                         const struct gl_texture_object *texObj,
> +                         struct gl_texture_object *texObj,
>                           GLenum target, GLenum filter, GLuint srcLevel)
>  {
>     struct gl_sampler_object *samp_obj;
> @@ -915,8 +922,10 @@ _mesa_meta_setup_sampler(struct gl_context *ctx,
>     /* Prepare src texture state */
>     _mesa_BindTexture(target, texObj->Name);
>     if (target != GL_TEXTURE_RECTANGLE_ARB) {
> -      _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, srcLevel);
> -      _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, srcLevel);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_BASE_LEVEL,
> +                                (GLint *) &srcLevel, false);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
> +                                (GLint *) &srcLevel, false);
>     }
>
>     return samp_obj;
> diff --git a/src/mesa/drivers/common/meta_generate_mipmap.c
b/src/mesa/drivers/common/meta_generate_mipmap.c
> index f20fcac..27435b2 100644
> --- a/src/mesa/drivers/common/meta_generate_mipmap.c
> +++ b/src/mesa/drivers/common/meta_generate_mipmap.c
> @@ -185,6 +185,12 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx,
GLenum target,
>     GLint swizzle[4];
>     GLboolean swizzleSaved = GL_FALSE;
>
> +   /* GLint so the compiler won't complain about type signedness
mismatch in
> +    * the calls to _mesa_texture_parameteriv below.
> +    */
> +   static const GLint always_false = GL_FALSE;
> +   static const GLint always_true = GL_TRUE;
> +
>     if (fallback_required(ctx, target, texObj)) {
>        _mesa_generate_mipmap(ctx, target, texObj);
>        return;
> @@ -248,13 +254,14 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx,
GLenum target,
>     assert(mipmap->FBO != 0);
>     _mesa_BindFramebuffer(GL_FRAMEBUFFER_EXT, mipmap->FBO);
>
> -   _mesa_TexParameteri(target, GL_GENERATE_MIPMAP, GL_FALSE);
> +   _mesa_texture_parameteriv(ctx, texObj, GL_GENERATE_MIPMAP,
&always_false, false);
>
>     if (texObj->_Swizzle != SWIZZLE_NOOP) {
>        static const GLint swizzleNoop[4] = { GL_RED, GL_GREEN, GL_BLUE,
GL_ALPHA };
>        memcpy(swizzle, texObj->Swizzle, sizeof(swizzle));
>        swizzleSaved = GL_TRUE;
> -      _mesa_TexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzleNoop);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_SWIZZLE_RGBA,
> +                                swizzleNoop, false);
>     }
>
>     /* Silence valgrind warnings about reading uninitialized stack. */
> @@ -309,7 +316,8 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx,
GLenum target,
>        /* Allocate storage for the destination mipmap image(s) */
>
>        /* Set MaxLevel large enough to hold the new level when we
allocate it */
> -      _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, dstLevel);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
> +                                (GLint *) &dstLevel, false);
>
>        if (!prepare_mipmap_level(ctx, texObj, dstLevel,
>                                  dstWidth, dstHeight, dstDepth,
> @@ -323,7 +331,8 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx,
GLenum target,
>        dstImage = _mesa_select_tex_image(texObj, faceTarget, dstLevel);
>
>        /* limit minification to src level */
> -      _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, srcLevel);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
> +                                (GLint *) &srcLevel, false);
>
>        /* setup viewport */
>        _mesa_set_viewport(ctx, 0, 0, 0, dstWidth, dstHeight);
> @@ -373,9 +382,12 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx,
GLenum target,
>
>     _mesa_meta_end(ctx);
>
> -   _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, maxLevelSave);
> +   _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
&maxLevelSave,
> +                             false);
>     if (genMipmapSave)
> -      _mesa_TexParameteri(target, GL_GENERATE_MIPMAP, genMipmapSave);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_GENERATE_MIPMAP,
&always_true,
> +                                false);
>     if (swizzleSaved)
> -      _mesa_TexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
> +      _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_SWIZZLE_RGBA,
swizzle,
> +                                false);
>  }
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20160120/19b233e3/attachment-0001.html>


More information about the mesa-dev mailing list