summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-12-18 09:58:08 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2011-12-18 09:58:08 +0000
commitdcfcf438a511ee43e5969d01e41b3040a08cac3a (patch)
tree7549a2e32a2852bf50a4db2e367e5f1ef7057716
parent507debe8015ee10734a0b8a6ddf4aa251b7dddc5 (diff)
sna/gen2+: If we use the BLT to prepare the target, try using BLT for op
If we incurred a context switch to the BLT in order to prepare the target (uploading damage for instance), we should recheck whether we can continue the operation on the BLT rather than force a switch back to RENDER. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen2_render.c9
-rw-r--r--src/sna/gen3_render.c9
-rw-r--r--src/sna/gen5_render.c9
-rw-r--r--src/sna/gen6_render.c9
-rw-r--r--src/sna/gen7_render.c9
5 files changed, 45 insertions, 0 deletions
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index fb6b75c9..9f8e6db9 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1427,6 +1427,15 @@ gen2_render_composite(struct sna *sna,
__FUNCTION__));
return FALSE;
}
+
+ if (mask == NULL && sna->kgem.mode == KGEM_BLT &&
+ sna_blt_composite(sna, op,
+ src, dst,
+ src_x, src_y,
+ dst_x, dst_y,
+ width, height, tmp))
+ return TRUE;
+
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
tmp->op = op;
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 3fb98bce..28029301 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2417,6 +2417,15 @@ gen3_render_composite(struct sna *sna,
__FUNCTION__));
return FALSE;
}
+
+ if (mask == NULL && sna->kgem.mode == KGEM_BLT &&
+ sna_blt_composite(sna, op,
+ src, dst,
+ src_x, src_y,
+ dst_x, dst_y,
+ width, height, tmp))
+ return TRUE;
+
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
tmp->op = op;
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 41830fcb..da9de8df 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2077,6 +2077,15 @@ gen5_render_composite(struct sna *sna,
DBG(("%s: failed to set composite target\n", __FUNCTION__));
return FALSE;
}
+
+ if (mask == NULL && sna->kgem.mode == KGEM_BLT &&
+ sna_blt_composite(sna, op,
+ src, dst,
+ src_x, src_y,
+ dst_x, dst_y,
+ width, height, tmp))
+ return TRUE;
+
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (tmp->dst.width > 8192 || tmp->dst.height > 8192) {
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index aeb9dfeb..77671a4c 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2265,6 +2265,15 @@ gen6_render_composite(struct sna *sna,
tmp->op = op;
if (!gen6_composite_set_target(sna, tmp, dst))
return FALSE;
+
+ if (mask == NULL && sna->kgem.mode == KGEM_BLT &&
+ sna_blt_composite(sna, op,
+ src, dst,
+ src_x, src_y,
+ dst_x, dst_y,
+ width, height, tmp))
+ return TRUE;
+
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (too_large(tmp->dst.width, tmp->dst.height)) {
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 178b37ad..20945bcc 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2378,6 +2378,15 @@ gen7_render_composite(struct sna *sna,
tmp->op = op;
if (!gen7_composite_set_target(tmp, dst))
return FALSE;
+
+ if (mask == NULL && sna->kgem.mode == KGEM_BLT &&
+ sna_blt_composite(sna, op,
+ src, dst,
+ src_x, src_y,
+ dst_x, dst_y,
+ width, height, tmp))
+ return TRUE;
+
sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
if (too_large(tmp->dst.width, tmp->dst.height)) {