summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-12-18 01:45:47 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2011-12-18 01:47:27 +0000
commit507debe8015ee10734a0b8a6ddf4aa251b7dddc5 (patch)
tree4b3ede300b1d7a831f8074aba50d013ded2fabcf
parentde530f89a36a80b652ed01001e6f0d4c8b1dc11a (diff)
sna/gen5: If we need to flush the composite op, check to see if we can blit
If we need to halt the 3D engine in order to flush the pipeline for a dirty source, we may as well re-evaluate whether we can use the BLT instead. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen5_render.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 42703c53..41830fcb 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2174,8 +2174,19 @@ gen5_render_composite(struct sna *sna,
tmp->dst.bo, tmp->src.bo, tmp->mask.bo, NULL))
kgem_submit(&sna->kgem);
- if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo))
+ if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo)) {
+ if (mask == NULL &&
+ tmp->redirect.real_bo == NULL &&
+ sna_blt_composite(sna, op,
+ src, dst,
+ src_x, src_y,
+ dst_x, dst_y,
+ width, height, tmp)) {
+ kgem_bo_destroy(&sna->kgem, tmp->src.bo);
+ return TRUE;
+ }
kgem_emit_flush(&sna->kgem);
+ }
gen5_bind_surfaces(sna, tmp);
gen5_align_vertex(sna, tmp);