xf86-video-intel: 10 commits - src/sna/gen6_render.c src/sna/kgem.c src/sna/kgem.h src/sna/sna_accel.c src/sna/sna_display.c src/sna/sna_render.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Jan 5 16:05:18 PST 2012


 src/sna/gen6_render.c |   56 ++++++++++++++++++++++++++++++++++++++++++-----
 src/sna/kgem.c        |    6 +++--
 src/sna/kgem.h        |    2 +
 src/sna/sna_accel.c   |   59 +++++++++++++++++++++++++++++++++++---------------
 src/sna/sna_display.c |    4 +++
 src/sna/sna_render.c  |   34 +++++++++++++++++++++-------
 6 files changed, 127 insertions(+), 34 deletions(-)

New commits:
commit 34c4dbe825a45315b05f0bd49539cbcf5de276f1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 23:18:37 2012 +0000

    sna/gen6: Only force BLT if the src and dst overlaps for self-copy
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index aeef29d..37b1016 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2817,6 +2817,37 @@ static inline bool prefer_blt_copy(struct sna *sna,
 		untiled_tlb_miss(dst_bo));
 }
 
+static inline bool
+overlaps(struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
+	 struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
+	 const BoxRec *box, int n)
+{
+	BoxRec extents;
+
+	if (src_bo != dst_bo)
+		return false;
+
+	extents = box[0];
+	while (--n) {
+		box++;
+
+		if (box->x1 < extents.x1)
+			extents.x1 = box->x1;
+		if (box->x2 > extents.x2)
+			extents.x2 = box->x2;
+
+		if (box->y1 < extents.y1)
+			extents.y1 = box->y1;
+		if (box->y2 > extents.y2)
+			extents.y2 = box->y2;
+	}
+
+	return (extents.x2 + src_dx > extents.x1 + dst_dx &&
+		extents.x1 + src_dx < extents.x2 + dst_dx &&
+		extents.y2 + src_dy > extents.y1 + dst_dy &&
+		extents.y1 + src_dy < extents.y2 + dst_dy);
+}
+
 static Bool
 gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
 		       PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
@@ -2836,9 +2867,12 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
 				  box, n);
 #endif
 
-	DBG(("%s (%d, %d)->(%d, %d) x %d, alu=%x, self-copy=%d\n",
+	DBG(("%s (%d, %d)->(%d, %d) x %d, alu=%x, self-copy=%d, overlaps? %d\n",
 	     __FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n, alu,
-	     src_bo == dst_bo));
+	     src_bo == dst_bo,
+	     overlaps(src_bo, src_dx, src_dy,
+		      dst_bo, dst_dx, dst_dy,
+		      box, n)));
 
 	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
@@ -2849,7 +2883,10 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
 			       box, n))
 		return TRUE;
 
-	if (!(alu == GXcopy || alu == GXclear) || src_bo == dst_bo ||
+	if (!(alu == GXcopy || alu == GXclear) ||
+	    overlaps(src_bo, src_dx, src_dy,
+		     dst_bo, dst_dx, dst_dy,
+		     box, n) ||
 	    too_large(src->drawable.width, src->drawable.height) ||
 	    too_large(dst->drawable.width, dst->drawable.height))
 		return sna_blt_copy_boxes_fallback(sna, alu,
commit fc79af7a4abf1f0ceccacf23e8467ee2872eec09
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 23:06:17 2012 +0000

    sna: Only force a batch continuation if the scanout is written to
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 24a47aa..58df935 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -725,6 +725,7 @@ void _kgem_add_bo(struct kgem *kgem, struct kgem_bo *bo)
 	/* XXX is it worth working around gcc here? */
 	kgem->flush |= bo->flush;
 	kgem->sync |= bo->sync;
+	kgem->scanout |= bo->scanout;
 }
 
 static uint32_t kgem_end_batch(struct kgem *kgem)
@@ -840,7 +841,7 @@ static void __kgem_bo_destroy(struct kgem *kgem, struct kgem_bo *bo)
 	}
 
 	assert(bo->vmap == false && bo->sync == false);
-	bo->flush = false;
+	bo->scanout = bo->flush = false;
 
 	if (bo->rq) {
 		DBG(("%s: handle=%d -> active\n", __FUNCTION__, bo->handle));
@@ -1192,6 +1193,7 @@ void kgem_reset(struct kgem *kgem)
 	kgem->surface = kgem->max_batch_size;
 	kgem->mode = KGEM_NONE;
 	kgem->flush = 0;
+	kgem->scanout = 0;
 
 	kgem->next_request = __kgem_request_alloc();
 
@@ -1388,8 +1390,8 @@ void _kgem_submit(struct kgem *kgem)
 	if (kgem->wedged)
 		kgem_cleanup(kgem);
 
+	kgem->flush_now = kgem->scanout;
 	kgem_reset(kgem);
-	kgem->flush_now = 1;
 
 	assert(kgem->next_request != NULL);
 }
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 6aeb1fe..e5b7ccf 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -75,6 +75,7 @@ struct kgem_bo {
 	uint32_t vmap : 1;
 	uint32_t io : 1;
 	uint32_t flush : 1;
+	uint32_t scanout : 1;
 	uint32_t sync : 1;
 	uint32_t purged : 1;
 };
@@ -124,6 +125,7 @@ struct kgem {
 	uint32_t need_expire:1;
 	uint32_t need_purge:1;
 	uint32_t need_retire:1;
+	uint32_t scanout:1;
 	uint32_t flush_now:1;
 	uint32_t busy:1;
 
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 8e141c6..2b0dbc6 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -428,6 +428,7 @@ sna_crtc_restore(struct sna *sna)
 		return;
 
 	assert(bo->tiling != I915_TILING_Y);
+	bo->scanout = true;
 
 	DBG(("%s: create fb %dx%d@%d/%d\n",
 	     __FUNCTION__,
@@ -646,6 +647,7 @@ sna_crtc_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
 		     scrn->depth, scrn->bitsPerPixel));
 
 		assert(bo->tiling != I915_TILING_Y);
+		bo->scanout = true;
 		ret = drmModeAddFB(sna->kgem.fd,
 				   scrn->virtualX, scrn->virtualY,
 				   scrn->depth, scrn->bitsPerPixel,
@@ -762,6 +764,7 @@ sna_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
 	}
 
 	assert(bo->tiling != I915_TILING_Y);
+	bo->scanout = true;
 	if (drmModeAddFB(sna->kgem.fd,
 			 width, height, scrn->depth, scrn->bitsPerPixel,
 			 bo->pitch, bo->handle,
@@ -1670,6 +1673,7 @@ sna_crtc_resize(ScrnInfoPtr scrn, int width, int height)
 		goto fail;
 
 	assert(bo->tiling != I915_TILING_Y);
+	bo->scanout = true;
 	if (drmModeAddFB(sna->kgem.fd, width, height,
 			 scrn->depth, scrn->bitsPerPixel,
 			 bo->pitch, bo->handle,
commit c16c16d2553aa9a8bf9b0b0b367715b59020a357
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 22:51:55 2012 +0000

    sna/gen6: Enable reuse of source Picture
    
    Check if the source and mask are identical pictures and just copy the
    source channel to the mask in that case.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 2cd4173..aeef29d 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2230,14 +2230,21 @@ reuse_source(struct sna *sna,
 	     PicturePtr src, struct sna_composite_channel *sc, int src_x, int src_y,
 	     PicturePtr mask, struct sna_composite_channel *mc, int msk_x, int msk_y)
 {
-	if (src->pDrawable == NULL || mask->pDrawable != src->pDrawable)
+	if (src_x != msk_x || src_y != msk_y)
 		return FALSE;
 
-	DBG(("%s: mask reuses source drawable\n", __FUNCTION__));
+	if (mask == src) {
+		DBG(("%s: mask is source picture\n", __FUNCTION__));
+		*mc = *sc;
+		kgem_bo_reference(mc->bo);
+		return TRUE;
+	}
 
-	if (src_x != msk_x || src_y != msk_y)
+	if (src->pDrawable == NULL || mask->pDrawable != src->pDrawable)
 		return FALSE;
 
+	DBG(("%s: mask reuses source drawable\n", __FUNCTION__));
+
 	if (!sna_transform_equal(src->transform, mask->transform))
 		return FALSE;
 
commit f642b08870c6d7686368e053962075c153f76f86
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 22:26:09 2012 +0000

    sna: Quickly handle the common case of using a CPU source pixmap
    
    For the common case (at least with llc bo) where we are immediately
    using an uploaded image from its linear buffer, check upfront before
    computing the sampled region for transfer to the GPU.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index cd01b68..5155681 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -456,9 +456,18 @@ sna_render_pixmap_bo(struct sna *sna,
 	channel->offset[1] = y - dst_y;
 
 	priv = sna_pixmap(pixmap);
-	if (priv && priv->gpu_damage && priv->gpu_damage->mode == DAMAGE_ALL) {
-		channel->bo = kgem_bo_reference(priv->gpu_bo);
-		return 1;
+	if (priv) {
+		if (priv->gpu_damage && priv->gpu_damage->mode == DAMAGE_ALL) {
+			channel->bo = kgem_bo_reference(priv->gpu_bo);
+			return 1;
+		}
+
+		if (priv->cpu_bo &&
+		    priv->cpu_damage && priv->cpu_damage->mode == DAMAGE_ALL &&
+		    priv->cpu_bo->pitch < 4096) {
+			channel->bo = kgem_bo_reference(priv->cpu_bo);
+			return 1;
+		}
 	}
 
 	/* XXX handle transformed repeat */
commit 8a9baa59e9d0c0761b82f23734514f6847a9bcc1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 22:16:31 2012 +0000

    sna: Quickly handle the common case of using a GPU source pixmap
    
    For the common case of glyphs, the pixmap is entirely on the GPU which
    can be quickly tested before performing the more complex transformations
    to determine how much pixel data we need to upload.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index 8355d40..cd01b68 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -441,11 +441,25 @@ sna_render_pixmap_bo(struct sna *sna,
 		     int16_t w, int16_t h,
 		     int16_t dst_x, int16_t dst_y)
 {
-	struct kgem_bo *bo = NULL;
+	struct kgem_bo *bo;
 	struct sna_pixmap *priv;
 	BoxRec box;
 
-	DBG(("%s (%d, %d)x(%d, %d)\n", __FUNCTION__, x, y, w,h));
+	DBG(("%s (%d, %d)x(%d, %d)/(%d, %d)\n", __FUNCTION__,
+	     x, y, w,h, pixmap->drawable.height, pixmap->drawable.width));
+
+	channel->height = pixmap->drawable.height;
+	channel->width  = pixmap->drawable.width;
+	channel->scale[0] = 1.f / pixmap->drawable.width;
+	channel->scale[1] = 1.f / pixmap->drawable.height;
+	channel->offset[0] = x - dst_x;
+	channel->offset[1] = y - dst_y;
+
+	priv = sna_pixmap(pixmap);
+	if (priv && priv->gpu_damage && priv->gpu_damage->mode == DAMAGE_ALL) {
+		channel->bo = kgem_bo_reference(priv->gpu_bo);
+		return 1;
+	}
 
 	/* XXX handle transformed repeat */
 	if (w == 0 || h == 0 || channel->transform) {
@@ -490,13 +504,6 @@ sna_render_pixmap_bo(struct sna *sna,
 		return 0;
 	}
 
-	channel->height = pixmap->drawable.height;
-	channel->width  = pixmap->drawable.width;
-	channel->scale[0] = 1.f / pixmap->drawable.width;
-	channel->scale[1] = 1.f / pixmap->drawable.height;
-	channel->offset[0] = x - dst_x;
-	channel->offset[1] = y - dst_y;
-
 	DBG(("%s: offset=(%d, %d), size=(%d, %d)\n",
 	     __FUNCTION__,
 	     channel->offset[0], channel->offset[1],
commit d4dad6e3723d70d78247f29f86079862af175266
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 21:39:24 2012 +0000

    sna: Check that the GTT is no longer mapped before ensuring the shadow pointer
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 9bf21fb..598e0ce 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1968,6 +1968,11 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
 			kgem_bo_sync__cpu(&sna->kgem, priv->cpu_bo);
 	}
 
+	if (priv->mapped) {
+		pixmap->devPrivate.ptr = NULL;
+		priv->mapped = 0;
+	}
+
 	if (pixmap->devPrivate.ptr == NULL &&
 	    !sna_pixmap_alloc_cpu(sna, pixmap, priv, false))
 		return true;
@@ -9560,6 +9565,11 @@ sna_pixmap_free_gpu(struct sna *sna, struct sna_pixmap *priv)
 
 	assert (!priv->flush);
 
+	if (priv->mapped) {
+		pixmap->devPrivate.ptr = NULL;
+		priv->mapped = 0;
+	}
+
 	if (pixmap->devPrivate.ptr == NULL &&
 	    !sna_pixmap_alloc_cpu(sna, pixmap, priv, priv->gpu_damage != NULL))
 		return false;
commit 352f0a3ffb8ae8503bb2fab779ea84f4e6d76317
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 21:33:26 2012 +0000

    sna: Only mark the pixmap as GTT mapped if the private owns the pixels
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 77288ff..9bf21fb 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1914,11 +1914,13 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
 		}
 
 		/* And mark as having a valid GTT mapping for future uploads */
-		pixmap->devPrivate.ptr =
-			kgem_bo_map(&sna->kgem, priv->gpu_bo, PROT_WRITE);
-		if (pixmap->devPrivate.ptr) {
-			priv->mapped = 1;
-			pixmap->devKind = priv->gpu_bo->pitch;
+		if (priv->stride) {
+			pixmap->devPrivate.ptr =
+				kgem_bo_map(&sna->kgem, priv->gpu_bo, PROT_WRITE);
+			if (pixmap->devPrivate.ptr) {
+				priv->mapped = 1;
+				pixmap->devKind = priv->gpu_bo->pitch;
+			}
 		}
 
 		return true;
commit 3061382f98c0b284c250c1a36f7a4fee22046664
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 21:05:52 2012 +0000

    sna: Make sure that we do not attach to SHM pixmaps in ignorance
    
    Without xserver support for notification of when scratch pixmaps are
    reused, we simply cannot attach our privates to them lest we cause
    corruption with SHM pixmaps.
    
    This is a recent regression back unto an old, old xserver issue.
    
    Reported-by: Paul Neumann <paul104x at yahoo.de>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44503
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 75b817f..77288ff 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -440,6 +440,8 @@ struct sna_pixmap *_sna_pixmap_attach(PixmapPtr pixmap)
 #if FAKE_CREATE_PIXMAP_USAGE_SCRATCH_HEADER
 	case CREATE_PIXMAP_USAGE_SCRATCH_HEADER:
 #endif
+		DBG(("%s: not attaching due to crazy usage: %d\n",
+		     __FUNCTION__, pixmap->usage_hint));
 		return NULL;
 
 	case SNA_CREATE_FB:
@@ -597,6 +599,12 @@ static PixmapPtr sna_create_pixmap(ScreenPtr screen,
 				     width, height, depth,
 				     usage);
 
+#if FAKE_CREATE_PIXMAP_USAGE_SCRATCH_HEADER
+	if (width == 0 || height == 0)
+		return create_pixmap(sna, screen, width, height, depth,
+				     CREATE_PIXMAP_USAGE_SCRATCH_HEADER);
+#endif
+
 	if (usage == CREATE_PIXMAP_USAGE_SCRATCH)
 #if USE_BO_FOR_SCRATCH_PIXMAP
 		return sna_pixmap_create_scratch(screen,
@@ -623,11 +631,6 @@ static PixmapPtr sna_create_pixmap(ScreenPtr screen,
 				BitsPerPixel(depth), I915_TILING_NONE))
 		return create_pixmap(sna, screen, width, height, depth, usage);
 
-#if FAKE_CREATE_PIXMAP_USAGE_SCRATCH_HEADER
-	if (width == 0 || height == 0)
-		return create_pixmap(sna, screen, width, height, depth, usage);
-#endif
-
 	pad = PixmapBytePad(width, depth);
 	size = pad * height;
 	if (size <= 4096) {
commit f7431726338e72d7a989e838f48aecdab15ab366
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 20:26:30 2012 +0000

    sna: Add more debugging to use-gpu-bo
    
    To aide debugging in conjunction with compositors and their crazy
    offsets.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 9bb257f..75b817f 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1251,14 +1251,18 @@ _sna_drawable_use_gpu_bo(DrawablePtr drawable,
 	BoxRec extents;
 	int16_t dx, dy;
 
-	if (priv == NULL)
+	if (priv == NULL) {
+		DBG(("%s: not attached\n", __FUNCTION__));
 		return FALSE;
+	}
 
 	if (priv->gpu_bo == NULL &&
 	    (sna_pixmap_choose_tiling(pixmap) == I915_TILING_NONE ||
 	     (priv->cpu_damage && !box_inplace(pixmap, box)) ||
-	     !sna_pixmap_move_to_gpu(pixmap, MOVE_WRITE | MOVE_READ)))
+	     !sna_pixmap_move_to_gpu(pixmap, MOVE_WRITE | MOVE_READ))) {
+		DBG(("%s: no GPU bo allocated\n", __FUNCTION__));
 		return FALSE;
+	}
 
 	get_drawable_deltas(drawable, pixmap, &dx, &dy);
 
@@ -1268,6 +1272,9 @@ _sna_drawable_use_gpu_bo(DrawablePtr drawable,
 	extents.y1 += dy;
 	extents.y2 += dy;
 
+	DBG(("%s extents (%d, %d), (%d, %d)\n", __FUNCTION__,
+	     extents.x1, extents.y1, extents.x2, extents.y2));
+
 	if (priv->gpu_damage) {
 		int ret = sna_damage_contains_box(priv->gpu_damage, &extents);
 		if (ret == PIXMAN_REGION_IN) {
@@ -1305,8 +1312,10 @@ _sna_drawable_use_gpu_bo(DrawablePtr drawable,
 	}
 
 move_to_gpu:
-	if (!sna_pixmap_move_area_to_gpu(pixmap, &extents))
+	if (!sna_pixmap_move_area_to_gpu(pixmap, &extents)) {
+		DBG(("%s: failed to move-to-gpu, fallback\n", __FUNCTION__));
 		return FALSE;
+	}
 
 	*damage = &priv->gpu_damage;
 	return TRUE;
commit 53c943b551b86402067ea96cd9fcca2848e84387
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jan 5 18:41:26 2012 +0000

    sna: Check for usable pixmap before deference its private
    
    Beware the NULL pointer and early deference.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index b14d2e9..9bb257f 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2157,7 +2157,7 @@ sna_put_xypixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
 	struct sna *sna = to_sna_from_pixmap(pixmap);
 	struct sna_pixmap *priv = sna_pixmap(pixmap);
 	struct sna_damage **damage;
-	struct kgem_bo *bo = priv->gpu_bo;
+	struct kgem_bo *bo;
 	int16_t dx, dy;
 	unsigned i, skip;
 
@@ -2169,6 +2169,7 @@ sna_put_xypixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
 				     &damage))
 		return false;
 
+	bo = priv->gpu_bo;
 	if (bo->tiling == I915_TILING_Y) {
 		DBG(("%s: converting bo from Y-tiling\n", __FUNCTION__));
 		if (!sna_pixmap_change_tiling(pixmap, I915_TILING_X))
@@ -8977,15 +8978,15 @@ sna_push_pixels_solid_blt(GCPtr gc,
 	int n;
 	uint8_t rop = copy_ROP[gc->alu];
 
+	if (!sna_drawable_use_gpu_bo(drawable, &region->extents, &damage))
+		return false;
+
 	if (priv->gpu_bo->tiling == I915_TILING_Y) {
 		DBG(("%s: converting bo from Y-tiling\n", __FUNCTION__));
 		if (!sna_pixmap_change_tiling(pixmap, I915_TILING_X))
 			return false;
 	}
 
-	if (!sna_drawable_use_gpu_bo(drawable, &region->extents, &damage))
-		return false;
-
 	get_drawable_deltas(drawable, pixmap, &dx, &dy);
 	RegionTranslate(region, dx, dy);
 


More information about the xorg-commit mailing list