mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 04:30:10 +01:00
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@intel.com> Cc: "10.2" <mesa-stable@lists.freedesktop.org> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
328e7e7742
commit
c246828c4d
2 changed files with 14 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -446,6 +446,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);
|
||||
|
|
@ -576,7 +577,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
|
||||
|
|
@ -585,6 +586,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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue