diff -ur mesa/src/mesa/drivers/dri/r200/r200_context.c mesa/src/mesa/drivers/dri/r200/r200_context.c --- mesa/src/mesa/drivers/dri/r200/r200_context.c 2007-02-02 12:59:03.000000000 +0000 +++ mesa/src/mesa/drivers/dri/r200/r200_context.c 2007-03-10 08:54:51.000000000 +0000 @@ -673,11 +673,13 @@ &newCtx->vbl_seq ); } + newCtx->dri.readable = driReadPriv; + if ( newCtx->dri.drawable != driDrawPriv || - newCtx->dri.readable != driReadPriv ) { + newCtx->lastStamp != driDrawPriv->lastStamp ) { newCtx->dri.drawable = driDrawPriv; - newCtx->dri.readable = driReadPriv; + r200SetCliprects(newCtx, GL_BACK_LEFT); r200UpdateWindow( newCtx->glCtx ); r200UpdateViewportOffset( newCtx->glCtx ); } diff -ur mesa/src/mesa/drivers/dri/r200/r200_lock.c mesa/src/mesa/drivers/dri/r200/r200_lock.c --- mesa/src/mesa/drivers/dri/r200/r200_lock.c 2006-12-05 23:42:18.000000000 +0000 +++ mesa/src/mesa/drivers/dri/r200/r200_lock.c 2007-03-10 08:54:38.000000000 +0000 @@ -98,7 +98,6 @@ r200SetCliprects( rmesa, GL_FRONT_LEFT ); r200UpdateViewportOffset( rmesa->glCtx ); driUpdateFramebufferSize(rmesa->glCtx, drawable); - rmesa->lastStamp = drawable->lastStamp; } R200_STATECHANGE( rmesa, ctx ); diff -ur mesa/src/mesa/drivers/dri/r200/r200_state.c mesa/src/mesa/drivers/dri/r200/r200_state.c --- mesa/src/mesa/drivers/dri/r200/r200_state.c 2007-02-03 06:58:27.000000000 +0000 +++ mesa/src/mesa/drivers/dri/r200/r200_state.c 2007-03-10 08:54:38.000000000 +0000 @@ -1889,6 +1889,8 @@ if (rmesa->state.scissor.enabled) r200RecalcScissorRects( rmesa ); + + rmesa->lastStamp = drawable->lastStamp; } diff -ur mesa/src/mesa/drivers/dri/radeon/radeon_context.c mesa/src/mesa/drivers/dri/radeon/radeon_context.c --- mesa/src/mesa/drivers/dri/radeon/radeon_context.c 2007-02-02 12:59:03.000000000 +0000 +++ mesa/src/mesa/drivers/dri/radeon/radeon_context.c 2007-03-10 09:07:21.000000000 +0000 @@ -594,12 +594,14 @@ driDrawableInitVBlank( driDrawPriv, newCtx->vblank_flags, &newCtx->vbl_seq ); } - - if ( (newCtx->dri.drawable != driDrawPriv) - || (newCtx->dri.readable != driReadPriv) ) { + + newCtx->dri.readable = driReadPriv; + + if ( (newCtx->dri.drawable != driDrawPriv) || + newCtx->lastStamp != driDrawPriv->lastStamp ) { newCtx->dri.drawable = driDrawPriv; - newCtx->dri.readable = driReadPriv; + radeonSetCliprects(newCtx); radeonUpdateWindow( newCtx->glCtx ); radeonUpdateViewportOffset( newCtx->glCtx ); } diff -ur mesa/src/mesa/drivers/dri/radeon/radeon_lock.c mesa/src/mesa/drivers/dri/radeon/radeon_lock.c --- mesa/src/mesa/drivers/dri/radeon/radeon_lock.c 2006-12-05 23:42:18.000000000 +0000 +++ mesa/src/mesa/drivers/dri/radeon/radeon_lock.c 2007-03-10 09:00:47.000000000 +0000 @@ -96,7 +96,6 @@ radeonSetCliprects( rmesa ); radeonUpdateViewportOffset( rmesa->glCtx ); driUpdateFramebufferSize(rmesa->glCtx, drawable); - rmesa->lastStamp = drawable->lastStamp; } RADEON_STATECHANGE( rmesa, ctx ); diff -ur mesa/src/mesa/drivers/dri/radeon/radeon_state.c mesa/src/mesa/drivers/dri/radeon/radeon_state.c --- mesa/src/mesa/drivers/dri/radeon/radeon_state.c 2007-02-02 12:59:03.000000000 +0000 +++ mesa/src/mesa/drivers/dri/radeon/radeon_state.c 2007-03-10 08:58:29.000000000 +0000 @@ -1675,6 +1675,8 @@ if (rmesa->state.scissor.enabled) radeonRecalcScissorRects( rmesa ); + + rmesa->lastStamp = drawable->lastStamp; }