sna: Perform CopyArea directly onto a CPU bo if available
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
57d7d5de78
commit
18726a4975
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue