diff options
Diffstat (limited to 'src/sna/gen4_render.c')
-rw-r--r-- | src/sna/gen4_render.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c index 8e039102..cc6ee1dd 100644 --- a/src/sna/gen4_render.c +++ b/src/sna/gen4_render.c @@ -1585,7 +1585,8 @@ static bool gen4_composite_set_target(struct sna *sna, struct sna_composite_op *op, PicturePtr dst, - int x, int y, int w, int h) + int x, int y, int w, int h, + bool partial) { BoxRec box; @@ -1621,7 +1622,7 @@ gen4_composite_set_target(struct sna *sna, assert(op->dst.bo->proxy == NULL); if (too_large(op->dst.width, op->dst.height) && - !sna_render_composite_redirect(sna, op, x, y, w, h)) + !sna_render_composite_redirect(sna, op, x, y, w, h, partial)) return false; return true; @@ -1903,7 +1904,8 @@ gen4_render_composite(struct sna *sna, tmp); if (!gen4_composite_set_target(sna, tmp, dst, - dst_x, dst_y, width, height)) { + dst_x, dst_y, width, height, + op > PictOpSrc || dst->pCompositeClip->data)) { DBG(("%s: failed to set composite target\n", __FUNCTION__)); return false; } @@ -2203,7 +2205,7 @@ gen4_render_composite_spans(struct sna *sna, tmp->base.op = op; if (!gen4_composite_set_target(sna, &tmp->base, dst, - dst_x, dst_y, width, height)) + dst_x, dst_y, width, height, true)) return false; switch (gen4_composite_picture(sna, src, &tmp->base.src, @@ -2389,7 +2391,8 @@ fallback_blt: extents.x1 + dst_dx, extents.y1 + dst_dy, extents.x2 - extents.x1, - extents.y2 - extents.y1)) + extents.y2 - extents.y1, + n > 1)) goto fallback_tiled; } |