summaryrefslogtreecommitdiff
path: root/src/sna/gen4_render.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-09-26 15:14:29 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2013-09-27 10:47:17 +0100
commitbbfbe229542cc3278fea3c1865f28d65d3c154e8 (patch)
treee75dc5ff56e082e2a8cdd4717194ec75b618eb5c /src/sna/gen4_render.c
parent4d2840919fd00e4ae0bf1957f66009f55a01eb7b (diff)
sna/gen4+: Handle very large copies more gracefully
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/sna/gen4_render.c')
-rw-r--r--src/sna/gen4_render.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index b0feb9f7..416452b4 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2413,8 +2413,12 @@ fallback_blt:
if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
- goto fallback_tiled_src;
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL)) {
+ kgem_bo_destroy(&sna->kgem, tmp.src.bo);
+ if (tmp.redirect.real_bo)
+ kgem_bo_destroy(&sna->kgem, tmp.dst.bo);
+ goto fallback_blt;
+ }
}
dst_dx += tmp.dst.x;
@@ -2440,8 +2444,6 @@ fallback_blt:
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
return true;
-fallback_tiled_src:
- kgem_bo_destroy(&sna->kgem, tmp.src.bo);
fallback_tiled_dst:
if (tmp.redirect.real_bo)
kgem_bo_destroy(&sna->kgem, tmp.dst.bo);