operations are based on read drawable. fix bug#10136.tags/mesa_7_1_rc1
@@ -576,6 +576,10 @@ GLboolean intelMakeCurrent(__DRIcontextPrivate *driContextPriv, | |||
if (driContextPriv) { | |||
struct intel_context *intel = (struct intel_context *) driContextPriv->driverPrivate; | |||
if (intel->driReadDrawable != driReadPriv) { | |||
intel->driReadDrawable = driReadPriv; | |||
} | |||
if ( intel->driDrawable != driDrawPriv ) { | |||
/* Shouldn't the readbuffer be stored also? */ | |||
driDrawableInitVBlank( driDrawPriv, intel->vblank_flags, |
@@ -234,6 +234,7 @@ struct intel_context | |||
int driFd; | |||
__DRIdrawablePrivate *driDrawable; | |||
__DRIdrawablePrivate *driReadDrawable; | |||
__DRIscreenPrivate *driScreen; | |||
intelScreenPrivate *intelScreen; | |||
volatile drmI830Sarea *sarea; |
@@ -231,6 +231,7 @@ do_blit_copypixels(GLcontext * ctx, | |||
if (intel->driDrawable->numClipRects) { | |||
__DRIdrawablePrivate *dPriv = intel->driDrawable; | |||
__DRIdrawablePrivate *dReadPriv = intel->driReadDrawable; | |||
drm_clip_rect_t *box = dPriv->pClipRects; | |||
drm_clip_rect_t dest_rect; | |||
GLint nbox = dPriv->numClipRects; | |||
@@ -262,8 +263,8 @@ do_blit_copypixels(GLcontext * ctx, | |||
srcy = dPriv->h - srcy - height; | |||
dstx += dPriv->x; | |||
dsty += dPriv->y; | |||
srcx += dPriv->x; | |||
srcy += dPriv->y; | |||
srcx += dReadPriv->x; | |||
srcy += dReadPriv->y; | |||
/* Clip against the source region. This is the only source | |||
* clipping we do. Dst is clipped with cliprects below. |