Mesa (10.2): meta/blit: Add stencil texturing mode save and restore
Ian Romanick
idr at kemper.freedesktop.org
Thu May 29 23:02:05 UTC 2014
Module: Mesa
Branch: 10.2
Commit: 75ae4fff35c623b79e4f3b940bfa0702a26dab62
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=75ae4fff35c623b79e4f3b940bfa0702a26dab62
Author: Topi Pohjolainen <topi.pohjolainen at intel.com>
Date: Wed May 21 11:43:56 2014 +0300
meta/blit: Add stencil texturing mode save and restore
v2 (Ken): Only restore the mode if it has changed.
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
Cc: "10.2" <mesa-stable at lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
(cherry picked from commit c246828c4d59025bf4e1d5d9de5d9bc5517b3a7b)
---
src/mesa/drivers/common/meta.h | 4 ++--
src/mesa/drivers/common/meta_blit.c | 13 ++++++++++++-
2 files changed, 14 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 753afff..a352a49 100644
--- a/src/mesa/drivers/common/meta_blit.c
+++ b/src/mesa/drivers/common/meta_blit.c
@@ -444,6 +444,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);
@@ -574,7 +575,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
@@ -583,6 +584,16 @@ _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) {
+ const struct gl_texture_object *texObj =
+ _mesa_get_current_tex_object(ctx, target);
+
+ if (texObj->StencilSampling != blit->stencilSamplingSave)
+ _mesa_TexParameteri(target, GL_DEPTH_STENCIL_TEXTURE_MODE,
+ blit->stencilSamplingSave ?
+ GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
+ }
}
_mesa_BindSampler(ctx->Texture.CurrentUnit, blit->samplerSave);
More information about the mesa-commit
mailing list