diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2015-02-27 13:56:03 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2015-02-27 17:01:18 +0000 |
commit | 9fb815462902a1d2047e135cf5037f47eb0d83d2 (patch) | |
tree | 3478fe8f9c6dd7afe954bd1690985fe25179c7fa /src/sna/gen8_render.c | |
parent | 445423170d24a8a9f57ac887921cdecf4377f7ca (diff) |
sna/gen7+: Allow GT3 to overlapping copies via an intermediate
This benefits most when GT3 is coupled with eLLC and WT, but it is just
marginally a win over a BLT otherwise.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/sna/gen8_render.c')
-rw-r--r-- | src/sna/gen8_render.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c index 5f260883..f6747ef1 100644 --- a/src/sna/gen8_render.c +++ b/src/sna/gen8_render.c @@ -2704,9 +2704,6 @@ prefer_blt_copy(struct sna *sna, assert((flags & COPY_SYNC) == 0); - if (src_bo == dst_bo && can_switch_to_blt(sna, dst_bo, flags)) - return true; - if (untiled_tlb_miss(src_bo) || untiled_tlb_miss(dst_bo)) return true; @@ -2714,6 +2711,11 @@ prefer_blt_copy(struct sna *sna, if (force_blt_ring(sna)) return true; + if (sna->render_state.gt < 3 && + src_bo == dst_bo && + can_switch_to_blt(sna, dst_bo, flags)) + return true; + if (kgem_bo_is_render(dst_bo) || kgem_bo_is_render(src_bo)) return false; @@ -2774,7 +2776,7 @@ fallback_blt: &extents)) { bool big = too_large(extents.x2-extents.x1, extents.y2-extents.y1); - if ((big || can_switch_to_blt(sna, dst_bo, flags)) && + if ((big || !prefer_render_ring(sna, dst_bo)) && sna_blt_copy_boxes(sna, alu, src_bo, src_dx, src_dy, dst_bo, dst_dx, dst_dy, |