summaryrefslogtreecommitdiff
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2007-08-29 15:11:10 -0400
committerXiang, Haihao <haihao.xiang@intel.com>2007-08-29 15:11:10 -0400
commitbad6e175cf59cce630c37d73f6e71f3a4de50ae6 (patch)
tree87078b6e05a6113715a2d7768083c32f2b2dedad /src/mesa/drivers
parentf6a89e1884535a6136900febc163ee930c1d2179 (diff)
i965: store read drawable info in intel_context. Some OpenGL
operations are based on read drawable. fix bug#10136.
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/intel_context.c4
-rw-r--r--src/mesa/drivers/dri/i965/intel_context.h1
-rw-r--r--src/mesa/drivers/dri/i965/intel_pixel_copy.c5
3 files changed, 8 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_context.c b/src/mesa/drivers/dri/i965/intel_context.c
index eafe809d3a..1fbf571184 100644
--- a/src/mesa/drivers/dri/i965/intel_context.c
+++ b/src/mesa/drivers/dri/i965/intel_context.c
@@ -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,
diff --git a/src/mesa/drivers/dri/i965/intel_context.h b/src/mesa/drivers/dri/i965/intel_context.h
index 406f8483dc..ae25592908 100644
--- a/src/mesa/drivers/dri/i965/intel_context.h
+++ b/src/mesa/drivers/dri/i965/intel_context.h
@@ -234,6 +234,7 @@ struct intel_context
int driFd;
__DRIdrawablePrivate *driDrawable;
+ __DRIdrawablePrivate *driReadDrawable;
__DRIscreenPrivate *driScreen;
intelScreenPrivate *intelScreen;
volatile drmI830Sarea *sarea;
diff --git a/src/mesa/drivers/dri/i965/intel_pixel_copy.c b/src/mesa/drivers/dri/i965/intel_pixel_copy.c
index 58dc49505f..3bdf2fb479 100644
--- a/src/mesa/drivers/dri/i965/intel_pixel_copy.c
+++ b/src/mesa/drivers/dri/i965/intel_pixel_copy.c
@@ -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.