From 2d087eadd9cd3aa2e2ccd73a568286d21702d29a Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 3 Jul 2012 11:54:02 +0100 Subject: [PATCH] sna: Also prefer to use the dst GPU bo if CopyArea reduces to an inplace upload Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index b4748646..65d09b98 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -3716,16 +3716,24 @@ source_prefer_gpu(struct sna_pixmap *priv) { unsigned flags; - if (priv == NULL) + if (priv == NULL) { + DBG(("%s: source unattached, use cpu\n", __FUNCTION__)); return 0; + } - if (priv->gpu_damage) + if (priv->gpu_damage) { + DBG(("%s: source has gpu damage, force gpu\n", __FUNCTION__)); return PREFER_GPU | FORCE_GPU; + } - if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) + if (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)) { + DBG(("%s: source has busy CPU bo, force gpu\n", __FUNCTION__)); return PREFER_GPU | FORCE_GPU; + } - return PREFER_GPU; + DBG(("%s: source has GPU bo? %d\n", + __FUNCTION__, priv->gpu_bo != NULL)); + return priv->gpu_bo != NULL; } static void @@ -3811,7 +3819,9 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc, } bo = sna_drawable_use_bo(&dst_pixmap->drawable, - source_prefer_gpu(src_priv), + source_prefer_gpu(src_priv) ?: + region_inplace(sna, dst_pixmap, ®ion, + dst_priv, alu_overwrites(alu)), ®ion.extents, &damage); if (bo) { if (src_priv && src_priv->clear) {