summaryrefslogtreecommitdiff
path: root/src/sna/gen8_render.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2015-02-27 13:56:03 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2015-02-27 17:01:18 +0000
commit9fb815462902a1d2047e135cf5037f47eb0d83d2 (patch)
tree3478fe8f9c6dd7afe954bd1690985fe25179c7fa /src/sna/gen8_render.c
parent445423170d24a8a9f57ac887921cdecf4377f7ca (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.c10
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,