[Mesa-dev] [PATCH 1/2] meta/blit: Add stencil texturing mode save and restore

Eric Anholt eric at anholt.net
Wed May 21 11:29:02 PDT 2014


Topi Pohjolainen <topi.pohjolainen at intel.com> writes:

> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> Cc: "10.2" <mesa-stable at lists.freedesktop.org>
> ---
>  src/mesa/drivers/common/meta.h      |  4 ++--
>  src/mesa/drivers/common/meta_blit.c | 15 ++++++++++++++-
>  2 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h
> index 007f104..765f8df 100644
> --- a/src/mesa/drivers/common/meta.h
> +++ b/src/mesa/drivers/common/meta.h
> @@ -270,7 +270,7 @@ struct blit_state
>  struct fb_tex_blit_state
>  {
>     GLint baseLevelSave, maxLevelSave;
> -   GLuint sampler, samplerSave;
> +   GLuint sampler, samplerSave, stencilSamplingSave;
>     GLuint tempTex;
>  };
>  
> @@ -407,7 +407,7 @@ _mesa_meta_fb_tex_blit_begin(const struct gl_context *ctx,
>                               struct fb_tex_blit_state *blit);
>  
>  extern void
> -_mesa_meta_fb_tex_blit_end(const struct gl_context *ctx, GLenum target,
> +_mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
>                             struct fb_tex_blit_state *blit);
>  
>  extern GLboolean
> diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
> index e10a181..59f7e70 100644
> --- a/src/mesa/drivers/common/meta_blit.c
> +++ b/src/mesa/drivers/common/meta_blit.c
> @@ -441,6 +441,7 @@ blitframebuffer_texture(struct gl_context *ctx,
>  
>     fb_tex_blit.baseLevelSave = texObj->BaseLevel;
>     fb_tex_blit.maxLevelSave = texObj->MaxLevel;
> +   fb_tex_blit.stencilSamplingSave = texObj->StencilSampling;
>  
>     if (glsl_version) {
>        setup_glsl_blit_framebuffer(ctx, blit, rb, target);
> @@ -567,7 +568,7 @@ _mesa_meta_fb_tex_blit_begin(const struct gl_context *ctx,
>  }
>  
>  void
> -_mesa_meta_fb_tex_blit_end(const struct gl_context *ctx, GLenum target,
> +_mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
>                             struct fb_tex_blit_state *blit)
>  {
>     /* Restore texture object state, the texture binding will
> @@ -576,6 +577,18 @@ _mesa_meta_fb_tex_blit_end(const struct gl_context *ctx, GLenum target,
>     if (target != GL_TEXTURE_RECTANGLE_ARB) {
>        _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, blit->baseLevelSave);
>        _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, blit->maxLevelSave);
> +
> +      if (ctx->Extensions.ARB_stencil_texturing) {
> +         struct gl_texture_object *texObj =
> +            _mesa_get_current_tex_object(ctx, target);
> +
> +         /* One cannot use _mesa_TexParameteri() in case the stencil indexing
> +          * wasn't modified during the blit. Hence write the saved value
> +          * directly.
> +          */

Can you explain that some more?  I'm uncomfortable with direct
modification of the values instead of _mesa_TexParameteri, becuase it
means that any other state update handling (like making sure that the
call to Driver.TexParameter() has happened, or any necessary flushes)
isn't getting done.

> +         if (texObj)
> +            texObj->StencilSampling = blit->stencilSamplingSave;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140521/c9ac992b/attachment-0001.sig>


More information about the mesa-dev mailing list