diff -up Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_state.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_state.c --- Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_state.c.radeon-231787 2006-11-15 09:55:48.000000000 -0500 +++ Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_state.c 2007-07-09 14:35:28.000000000 -0400 @@ -185,6 +185,8 @@ void radeonSetCliprects(radeonContextPtr if (radeon->state.scissor.enabled) radeonRecalcScissorRects(radeon); + + radeon->lastStamp = drawable->lastStamp; } diff -up Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_context.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_context.c --- Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_context.c.radeon-231787 2006-11-15 09:55:48.000000000 -0500 +++ Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_context.c 2007-07-09 14:37:08.000000000 -0400 @@ -51,6 +51,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DE #include "radeon_macros.h" #include "radeon_reg.h" +#include "radeon_state.h" #include "r300_state.h" #include "utils.h" @@ -272,11 +273,13 @@ GLboolean radeonMakeCurrent(__DRIcontext &radeon->vbl_seq); } + radeon->dri.readable = driReadPriv; + if (radeon->dri.drawable != driDrawPriv || - radeon->dri.readable != driReadPriv) { + radeon->lastStamp != driDrawPriv->lastStamp) { radeon->dri.drawable = driDrawPriv; - radeon->dri.readable = driReadPriv; + radeonSetCliprects(radeon); r300UpdateWindow(radeon->glCtx); r300UpdateViewportOffset(radeon->glCtx); } diff -up Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_lock.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_lock.c --- Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_lock.c.radeon-231787 2006-11-01 13:52:11.000000000 -0500 +++ Mesa-6.5.2/src/mesa/drivers/dri/r300/radeon_lock.c 2007-07-09 14:35:28.000000000 -0400 @@ -90,7 +90,6 @@ static void r300RegainedLock(radeonConte #else radeonUpdateScissor(radeon->glCtx); #endif - radeon->lastStamp = drawable->lastStamp; } if (sarea->ctx_owner != radeon->dri.hwContext) { diff -up Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_state.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_state.c --- Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_state.c.radeon-231787 2006-11-01 13:52:11.000000000 -0500 +++ Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_state.c 2007-07-09 14:35:28.000000000 -0400 @@ -1676,6 +1676,8 @@ void radeonSetCliprects( radeonContextPt if (rmesa->state.scissor.enabled) radeonRecalcScissorRects( rmesa ); + + rmesa->lastStamp = drawable->lastStamp; } diff -up Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_context.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_context.c --- Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_context.c.radeon-231787 2007-07-09 14:35:28.000000000 -0400 +++ Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_context.c 2007-07-09 14:35:28.000000000 -0400 @@ -615,12 +615,14 @@ radeonMakeCurrent( __DRIcontextPrivate * 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 -up Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_lock.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_lock.c --- Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_lock.c.radeon-231787 2006-10-19 10:32:06.000000000 -0400 +++ Mesa-6.5.2/src/mesa/drivers/dri/radeon/radeon_lock.c 2007-07-09 14:35:28.000000000 -0400 @@ -96,7 +96,6 @@ void radeonGetLock( radeonContextPtr rme radeonSetCliprects( rmesa ); radeonUpdateViewportOffset( rmesa->glCtx ); driUpdateFramebufferSize(rmesa->glCtx, drawable); - rmesa->lastStamp = drawable->lastStamp; } RADEON_STATECHANGE( rmesa, ctx ); diff -up Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_state.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_state.c --- Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_state.c.radeon-231787 2006-11-15 14:54:40.000000000 -0500 +++ Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_state.c 2007-07-09 14:35:28.000000000 -0400 @@ -1890,6 +1890,8 @@ void r200SetCliprects( r200ContextPtr rm if (rmesa->state.scissor.enabled) r200RecalcScissorRects( rmesa ); + + rmesa->lastStamp = drawable->lastStamp; } diff -up Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_context.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_context.c --- Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_context.c.radeon-231787 2007-07-09 14:35:28.000000000 -0400 +++ Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_context.c 2007-07-09 14:35:28.000000000 -0400 @@ -694,11 +694,13 @@ r200MakeCurrent( __DRIcontextPrivate *dr &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 -up Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_lock.c.radeon-231787 Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_lock.c --- Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_lock.c.radeon-231787 2006-11-15 14:54:40.000000000 -0500 +++ Mesa-6.5.2/src/mesa/drivers/dri/r200/r200_lock.c 2007-07-09 14:35:28.000000000 -0400 @@ -98,7 +98,6 @@ void r200GetLock( r200ContextPtr rmesa, r200SetCliprects( rmesa, GL_FRONT_LEFT ); r200UpdateViewportOffset( rmesa->glCtx ); driUpdateFramebufferSize(rmesa->glCtx, drawable); - rmesa->lastStamp = drawable->lastStamp; } R200_STATECHANGE( rmesa, ctx ); diff -up Mesa-6.5.2/src/mesa/main/texstore.c.radeon-231787 Mesa-6.5.2/src/mesa/main/texstore.c --- Mesa-6.5.2/src/mesa/main/texstore.c.radeon-231787 2006-11-02 17:57:11.000000000 -0500 +++ Mesa-6.5.2/src/mesa/main/texstore.c 2007-07-09 14:35:28.000000000 -0400 @@ -808,7 +808,8 @@ _mesa_swizzle_ubyte_image(GLcontext *ctx /* _mesa_printf("map %d %d %d %d\n", map[0], map[1], map[2], map[3]); */ - if (srcRowStride == srcWidth * srcComponents && + if (srcRowStride == dstRowStride && + srcRowStride == srcWidth * srcComponents && dimensions < 3) { /* 1 and 2D images only */ GLubyte *dstImage = (GLubyte *) dstAddr