summaryrefslogtreecommitdiff
path: root/src/sna/gen4_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sna/gen4_render.c')
-rw-r--r--src/sna/gen4_render.c13
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;
}