summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-01-14 15:08:18 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-01-14 18:13:48 +0000
commitc1ce34d4509a3f3e963d82ac0569a21706892f8e (patch)
tree7eb6f03b68e22930de1aa13b9f977b667427fe2d
parentb64751dbdb1b88b91ad97aaf995b4261876cf860 (diff)
sna/gen6: Tidy markup for when using the BLT is truly preferrable
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen6_render.c14
-rw-r--r--src/sna/gen7_render.c12
2 files changed, 19 insertions, 7 deletions
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index c6fa134c..d1dd1ba4 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -3315,6 +3315,12 @@ gen6_emit_fill_state(struct sna *sna, const struct sna_composite_op *op)
gen6_emit_state(sna, op, offset);
}
+static inline bool prefer_blt_fill(struct sna *sna,
+ struct kgem_bo *bo)
+{
+ return sna->kgem.ring != KGEM_RENDER || untiled_tlb_miss(bo);
+}
+
static Bool
gen6_render_fill_boxes(struct sna *sna,
CARD8 op,
@@ -3336,7 +3342,7 @@ gen6_render_fill_boxes(struct sna *sna,
return FALSE;
}
- if (sna->kgem.ring != KGEM_RENDER ||
+ if (prefer_blt_fill(sna, dst_bo) ||
too_large(dst->drawable.width, dst->drawable.height) ||
!gen6_check_dst_format(format)) {
uint8_t alu = -1;
@@ -3558,7 +3564,7 @@ gen6_render_fill(struct sna *sna, uint8_t alu,
op);
#endif
- if (sna->kgem.ring != KGEM_RENDER &&
+ if (prefer_blt_fill(sna, dst_bo) &&
sna_blt_fill(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
color,
@@ -3652,7 +3658,7 @@ gen6_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
#endif
/* Prefer to use the BLT if already engaged */
- if (sna->kgem.ring != KGEM_RENDER &&
+ if (prefer_blt_fill(sna, bo) &&
gen6_render_fill_one_try_blt(sna, dst, bo, color,
x1, y1, x2, y2, alu))
return TRUE;
@@ -3756,7 +3762,7 @@ gen6_render_clear(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo)
dst->drawable.width,
dst->drawable.height));
- /* Prefer to use the BLT if already engaged */
+ /* Prefer to use the BLT if, and only if, already engaged */
if (sna->kgem.ring == KGEM_BLT &&
gen6_render_clear_try_blt(sna, dst, bo))
return TRUE;
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index a2ec7153..22038eab 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3280,6 +3280,12 @@ gen7_emit_fill_state(struct sna *sna, const struct sna_composite_op *op)
gen7_emit_state(sna, op, offset);
}
+static inline bool prefer_blt_fill(struct sna *sna,
+ struct kgem_bo *bo)
+{
+ return sna->kgem.ring != KGEM_RENDER || untiled_tlb_miss(bo);
+}
+
static Bool
gen7_render_fill_boxes(struct sna *sna,
CARD8 op,
@@ -3301,7 +3307,7 @@ gen7_render_fill_boxes(struct sna *sna,
return FALSE;
}
- if (sna->kgem.ring != KGEM_RENDER ||
+ if (prefer_blt_fill(sna, dst_bo) ||
too_large(dst->drawable.width, dst->drawable.height) ||
!gen7_check_dst_format(format)) {
uint8_t alu = -1;
@@ -3524,7 +3530,7 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
op);
#endif
- if (sna->kgem.ring != KGEM_RENDER &&
+ if (prefer_blt_fill(sna, dst_bo) &&
sna_blt_fill(sna, alu,
dst_bo, dst->drawable.bitsPerPixel,
color,
@@ -3618,7 +3624,7 @@ gen7_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
#endif
/* Prefer to use the BLT if already engaged */
- if (sna->kgem.ring != KGEM_RENDER &&
+ if (prefer_blt_fill(sna, bo) &&
gen7_render_fill_one_try_blt(sna, dst, bo, color,
x1, y1, x2, y2, alu))
return TRUE;