From 2575cd0d236b4e1694e3185a487ebfd8bfe6499f Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 13 Sep 2012 20:08:37 +0100 Subject: [PATCH] sna: Avoid corrupting the CPU bo when compositing fallback data through BLT Signed-off-by: Chris Wilson --- src/sna/sna_blt.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c index c2869182..120d9a50 100644 --- a/src/sna/sna_blt.c +++ b/src/sna/sna_blt.c @@ -1866,10 +1866,11 @@ clear: __FUNCTION__)); } else { ret = prepare_blt_copy(sna, tmp, bo, alpha_fixup); - if (fallback) - ret = prepare_blt_put(sna, tmp, alpha_fixup); + if (fallback && !ret) + goto put; } } else { +put: if (!tmp->dst.bo) { RegionRec region; @@ -1879,6 +1880,14 @@ clear: if (!sna_drawable_move_region_to_cpu(dst->pDrawable, ®ion, MOVE_INPLACE_HINT | MOVE_WRITE)) return false; + } else { + if (tmp->dst.bo == sna_pixmap(tmp->dst.pixmap)->cpu_bo) { + assert(kgem_bo_is_busy(tmp->dst.bo)); + tmp->dst.bo = sna_drawable_use_bo(dst->pDrawable, + FORCE_GPU | PREFER_GPU, + &dst_box, + &tmp->damage); + } } ret = prepare_blt_put(sna, tmp, alpha_fixup); }