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); -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev