On 05/21/2014 02:57 AM, Topi Pohjolainen wrote:
> Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com>
> Cc: "10.2" <mesa-sta...@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.
> +          */
> +         if (texObj)
> +            texObj->StencilSampling = blit->stencilSamplingSave;
> +      }
>     }
>  
>     _mesa_BindSampler(ctx->Texture.CurrentUnit, blit->samplerSave);
> 


Hey Topi,

The usual pattern for this kind of stuff is:

if (texObj->StencilSampling != blit->stencilSamplingSave) {
   _mesa_TexParameteri(target, GL_DEPTH_STENCIL_TEXTURE_MODE,
                       blit->stencilSamplingSave ? GL_STENCIL_INDEX :
GL_DEPTH_COMPONENT);
}

In other words, if we changed it, put the old value back.  Presumably,
we shouldn't be changing it for RGBA buffers and the like (where it
would be invalid).

Would that work instead?

--Ken

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to