From 34efb7314612cedcda4f866bc33f3ad5b6929ae2 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 18 Dec 2011 16:58:04 +0000 Subject: [PATCH] sna: Hint likely usage of CPU bo If we are going to transfer GPU damage back to the CPU bo, then we can reuse an active buffer and so improve the recycling. Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index fdd3e905..976066ef 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -187,7 +187,8 @@ static void sna_pixmap_destroy_gpu_bo(struct sna *sna, struct sna_pixmap *priv) static bool must_check sna_pixmap_alloc_cpu(struct sna *sna, PixmapPtr pixmap, - struct sna_pixmap *priv) + struct sna_pixmap *priv, + bool from_gpu) { assert(priv->ptr == NULL); assert(pixmap->devKind); @@ -201,7 +202,7 @@ sna_pixmap_alloc_cpu(struct sna *sna, pixmap->drawable.height, pixmap->drawable.bitsPerPixel, I915_TILING_NONE, - CREATE_INACTIVE); + from_gpu ? 0 : CREATE_INACTIVE); DBG(("%s: allocated CPU handle=%d\n", __FUNCTION__, priv->cpu_bo->handle)); @@ -685,7 +686,7 @@ skip_inplace_map: } if (pixmap->devPrivate.ptr == NULL && - !sna_pixmap_alloc_cpu(sna, pixmap, priv)) + !sna_pixmap_alloc_cpu(sna, pixmap, priv, priv->gpu_damage != NULL)) return false; if (priv->gpu_bo == NULL) { @@ -856,7 +857,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable, } if (pixmap->devPrivate.ptr == NULL && - !sna_pixmap_alloc_cpu(sna, pixmap, priv)) + !sna_pixmap_alloc_cpu(sna, pixmap, priv, priv->gpu_damage != NULL)) return false; if (priv->gpu_bo == NULL) @@ -1680,7 +1681,7 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region, } if (pixmap->devPrivate.ptr == NULL && - !sna_pixmap_alloc_cpu(sna, pixmap, priv)) + !sna_pixmap_alloc_cpu(sna, pixmap, priv, false)) return true; if (region_subsumes_drawable(region, &pixmap->drawable)) { @@ -8974,7 +8975,7 @@ sna_pixmap_free_gpu(struct sna *sna, struct sna_pixmap *priv) assert (!priv->flush); if (pixmap->devPrivate.ptr == NULL && - !sna_pixmap_alloc_cpu(sna, pixmap, priv)) + !sna_pixmap_alloc_cpu(sna, pixmap, priv, priv->gpu_damage != NULL)) return false; if (priv->gpu_damage) {