[Mesa-dev] [PATCH 2/2] meta: Fix restoring of fixed function texture enables.
Brian Paul
brianp at vmware.com
Fri Nov 11 12:46:40 PST 2011
On 11/11/2011 11:31 AM, Eric Anholt wrote:
> 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.
> ---
> src/mesa/drivers/common/meta.c | 36 +++++++++---------------------------
> 1 files changed, 9 insertions(+), 27 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index f9b582d..259041f 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -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 (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 (ctx->Texture.Unit[u].Enabled != save->TexEnabled[u]) {
> + FLUSH_VERTICES(ctx, _NEW_TEXTURE);
> + ctx->Texture.Unit[u].Enabled = save->TexEnabled[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 */
That's much nicer.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list