From 821ef20b27f84cc26aec266b0f616a7f39ba9e3d Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 4 Jul 2014 10:43:35 +0100 Subject: sna: Promote tile pixmaps to GPU when reused Signed-off-by: Chris Wilson --- src/sna/sna_accel.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 0475f1eb..9191fe2f 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -11938,6 +11938,7 @@ static struct kgem_bo * sna_pixmap_get_source_bo(PixmapPtr pixmap) { struct sna_pixmap *priv = sna_pixmap(pixmap); + unsigned flags; BoxRec box; box.x1 = box.y1 = 0; @@ -11968,7 +11969,18 @@ sna_pixmap_get_source_bo(PixmapPtr pixmap) return kgem_bo_reference(priv->cpu_bo); } - if (!sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_ASYNC_HINT)) { + flags = MOVE_READ | MOVE_ASYNC_HINT; + if (priv->gpu_bo && priv->gpu_bo->proxy) { + struct kgem_bo *bo = priv->gpu_bo; + if (bo->rq == NULL && (bo->snoop || bo->pitch >= 4096)) + flags |= __MOVE_FORCE; + } + if (priv->gpu_bo == NULL) { + if (++priv->source_count > SOURCE_BIAS) + flags |= __MOVE_FORCE; + } + + if (!sna_pixmap_move_to_gpu(pixmap, flags)) { struct kgem_bo *upload; if (!sna_pixmap_move_to_cpu(pixmap, MOVE_READ)) -- cgit v1.2.3