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)) {