meta: Fix restoring of fixed function texture enables.

If they were disabled on entry, and we enabled one (like for
BlitFramebuffer), we wouldn't disable it on the way out.  Retain the
attempted optimization here (don't keep calling to set each bit for
changes that won't matter) by just setting the bits directly with
appropriate flushing.

Fixes misrendering on the second draw of piglit fbo-blit.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Eric Anholt 2011-11-10 12:44:47 -08:00
parent 95a826bed3
commit 196c6d4adf

View file

@ -887,35 +887,17 @@ _mesa_meta_end(struct gl_context *ctx)
_mesa_reference_texobj(&save->CurrentTexture[tgt], NULL);
}
/* Re-enable textures, texgen */
/* Restore fixed function texture enables, texgen */
for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {
if (save->TexEnabled[u]) {
_mesa_ActiveTextureARB(GL_TEXTURE0 + u);
if (ctx->Texture.Unit[u].Enabled != save->TexEnabled[u]) {
FLUSH_VERTICES(ctx, _NEW_TEXTURE);
ctx->Texture.Unit[u].Enabled = save->TexEnabled[u];
}
if (save->TexEnabled[u] & TEXTURE_1D_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_1D, GL_TRUE);
if (save->TexEnabled[u] & TEXTURE_2D_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_2D, GL_TRUE);
if (save->TexEnabled[u] & TEXTURE_3D_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_3D, GL_TRUE);
if (save->TexEnabled[u] & TEXTURE_CUBE_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP, GL_TRUE);
if (save->TexEnabled[u] & TEXTURE_RECT_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_RECTANGLE, GL_TRUE);
}
if (save->TexGenEnabled[u]) {
_mesa_ActiveTextureARB(GL_TEXTURE0 + u);
if (save->TexGenEnabled[u] & S_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_GEN_S, GL_TRUE);
if (save->TexGenEnabled[u] & T_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_GEN_T, GL_TRUE);
if (save->TexGenEnabled[u] & R_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_GEN_R, GL_TRUE);
if (save->TexGenEnabled[u] & Q_BIT)
_mesa_set_enable(ctx, GL_TEXTURE_GEN_Q, GL_TRUE);
}
if (ctx->Texture.Unit[u].TexGenEnabled != save->TexGenEnabled[u]) {
FLUSH_VERTICES(ctx, _NEW_TEXTURE);
ctx->Texture.Unit[u].TexGenEnabled = save->TexGenEnabled[u];
}
}
/* restore current unit state */