From 18726a4975ab2ddf85eaa6eb1602dcbe599217f7 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 6 Jun 2012 10:58:49 +0100 Subject: [PATCH] sna: Perform CopyArea directly onto a CPU bo if available Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index e2a2c127..2ead80ad 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -3886,6 +3886,33 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc, } } + goto out; + } else if (dst_priv->cpu_bo && + src_priv && DAMAGE_IS_ALL(src_priv->gpu_damage) && !src_priv->clear) { + if (!sna->render.copy_boxes(sna, alu, + src_pixmap, src_priv->gpu_bo, src_dx, src_dy, + dst_pixmap, dst_priv->cpu_bo, dst_dx, dst_dy, + box, n)) { + DBG(("%s: fallback - accelerated copy boxes failed\n", + __FUNCTION__)); + goto fallback; + } + + if (replaces) { + sna_damage_all(&dst_priv->cpu_damage, + dst_pixmap->drawable.width, + dst_pixmap->drawable.height); + dst_priv->undamaged = false; + } else { + RegionTranslate(®ion, dst_dx, dst_dy); + assert_pixmap_contains_box(dst_pixmap, + RegionExtents(®ion)); + sna_damage_add(&dst_priv->cpu_damage, ®ion); + RegionTranslate(®ion, -dst_dx, -dst_dy); + } + if (dst_priv->flush) + list_move(&dst_priv->list, &sna->dirty_pixmaps); + goto out; }