From 97003b1a2d6c8beb5c4df4bece5a2d5b03b5ae2f Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 13 Jun 2014 12:32:12 +0100 Subject: sna/gen6+: Prefer the BLT for large overlapping copies Signed-off-by: Chris Wilson --- src/sna/gen6_render.c | 8 +++++--- src/sna/gen7_render.c | 8 +++++--- src/sna/gen8_render.c | 8 +++++--- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c index 8668d124..b141b2a0 100644 --- a/src/sna/gen6_render.c +++ b/src/sna/gen6_render.c @@ -2725,10 +2725,9 @@ fallback_blt: src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, box, n, &extents)) { - if (too_large(extents.x2-extents.x1, extents.y2-extents.y1)) - goto fallback_blt; + bool big = too_large(extents.x2-extents.x1, extents.y2-extents.y1); - if (can_switch_to_blt(sna, dst_bo, flags) && + if ((big || can_switch_to_blt(sna, dst_bo, flags)) && sna_blt_copy_boxes(sna, alu, src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, @@ -2736,6 +2735,9 @@ fallback_blt: box, n)) return true; + if (big) + goto fallback_blt; + return sna_render_copy_boxes__overlap(sna, alu, src, src_bo, src_dx, src_dy, dst, dst_bo, dst_dx, dst_dy, diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c index 3fcca3e5..80c785d9 100644 --- a/src/sna/gen7_render.c +++ b/src/sna/gen7_render.c @@ -2962,10 +2962,9 @@ fallback_blt: src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, box, n, &extents)) { - if (too_large(extents.x2-extents.x1, extents.y2-extents.y1)) - goto fallback_blt; + bool big = too_large(extents.x2-extents.x1, extents.y2-extents.y1); - if (can_switch_to_blt(sna, dst_bo, flags) && + if ((big || can_switch_to_blt(sna, dst_bo, flags)) && sna_blt_copy_boxes(sna, alu, src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, @@ -2973,6 +2972,9 @@ fallback_blt: box, n)) return true; + if (big) + goto fallback_blt; + return sna_render_copy_boxes__overlap(sna, alu, src, src_bo, src_dx, src_dy, dst, dst_bo, dst_dx, dst_dy, diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c index 7ac883b8..1bde3ad7 100644 --- a/src/sna/gen8_render.c +++ b/src/sna/gen8_render.c @@ -2786,10 +2786,9 @@ fallback_blt: src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, box, n, &extents)) { - if (too_large(extents.x2-extents.x1, extents.y2-extents.y1)) - goto fallback_blt; + bool big = too_large(extents.x2-extents.x1, extents.y2-extents.y1); - if (can_switch_to_blt(sna, dst_bo, flags) && + if ((big || can_switch_to_blt(sna, dst_bo, flags)) && sna_blt_copy_boxes(sna, alu, src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, @@ -2797,6 +2796,9 @@ fallback_blt: box, n)) return true; + if (big) + goto fallback_blt; + return sna_render_copy_boxes__overlap(sna, alu, src, src_bo, src_dx, src_dy, dst, dst_bo, dst_dx, dst_dy, -- cgit v1.2.3