From 2ba8d40bf7e4d3e8fa541c001f82aa65f26bed3a Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 1 Feb 2014 18:13:04 +0000 Subject: [PATCH] sna: Don't discard the GPU prior to using it for stashing CPU damage Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 7d219a4a..1fbbddc6 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -2412,30 +2412,31 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable, if (sna_damage_is_all(&priv->cpu_damage, pixmap->drawable.width, pixmap->drawable.height)) { + bool discard_gpu = priv->cpu; + DBG(("%s: pixmap=%ld all damaged on CPU\n", __FUNCTION__, pixmap->drawable.serialNumber)); assert(!priv->clear); sna_damage_destroy(&priv->gpu_damage); - if (flags & MOVE_WRITE) - sna_pixmap_free_gpu(sna, priv); - if ((flags & MOVE_READ) == 0 && priv->cpu_bo && !priv->cpu_bo->flush && __kgem_bo_is_busy(&sna->kgem, priv->cpu_bo)) { if (!region_subsumes_pixmap(region, pixmap)) { - if (priv->gpu_bo) { - sna_damage_subtract(&priv->cpu_damage, region); - if (sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_ASYNC_HINT)) { - sna_pixmap_free_cpu(sna, priv, false); - sna_damage_add(&priv->cpu_damage, region); - } + sna_damage_subtract(&priv->cpu_damage, region); + if (sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_ASYNC_HINT)) { + sna_pixmap_free_cpu(sna, priv, false); + sna_damage_add(&priv->cpu_damage, region); + discard_gpu = false; } } else sna_pixmap_free_cpu(sna, priv, false); } + if (flags & MOVE_WRITE && discard_gpu) + sna_pixmap_free_gpu(sna, priv); + sna_pixmap_unmap(pixmap, priv); assert(priv->mapped == MAPPED_NONE); if (pixmap->devPrivate.ptr == NULL &&