summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-01-31 20:02:44 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2014-01-31 20:42:51 +0000
commit1f9a6156e9240a1efa8785ab5bca0a3b1757d08e (patch)
tree45c6f39613e401aac8d4171b17d38fa3b54f41a1 /src
parent539b749416b275d84e05e2a5b62d946903aa3d29 (diff)
sna: remove short-circuit for move-to-CPU when damage covers region
The short-circuit path missed translating the damage from drawable space into the pixmap (for Composite setups) which may have resulted in corruption. The path was also failing to consider the impact of reusing an active CPU bo when it could be discarding the unwanted damage and reallocating. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src')
-rw-r--r--src/sna/sna_accel.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index c9033858..613b9c73 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2424,17 +2424,11 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
if (flags & MOVE_WRITE)
sna_pixmap_free_gpu(sna, priv);
- goto contains_damage;
- }
-
- if (priv->cpu &&
- priv->cpu_damage &&
- sna_damage_contains_box__no_reduce(priv->cpu_damage,
- &region->extents)) {
- DBG(("%s: pixmap=%ld CPU damage contains region\n",
- __FUNCTION__, pixmap->drawable.serialNumber));
+ if ((flags & MOVE_READ) == 0 &&
+ priv->cpu_bo && !priv->cpu_bo->flush &&
+ __kgem_bo_is_busy(&sna->kgem, priv->cpu_bo))
+ sna_pixmap_free_cpu(sna, priv, false);
-contains_damage:
sna_pixmap_unmap(pixmap, priv);
assert(priv->mapped == MAPPED_NONE);
if (pixmap->devPrivate.ptr == NULL &&