summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-07-04 17:40:58 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-07-04 17:40:58 +0100
commit54ee41bf05e328ed2f2cd2a64c21afe3efe2556a (patch)
tree5bbda36ff620b2f637c763a94a22bf9c5b2a56b6 /src
parentd36623aaebdc454bd281f34332edcad5d94f34c0 (diff)
sna: Pass a hint to the backends when using copy_boxes for readback
If we expect to only emit this set of copy_boxes() and then submit the batch, we would prefer to use the BLT for its lower latency. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src')
-rw-r--r--src/sna/gen2_render.c8
-rw-r--r--src/sna/gen3_render.c2
-rw-r--r--src/sna/gen4_render.c15
-rw-r--r--src/sna/gen5_render.c2
-rw-r--r--src/sna/gen6_render.c10
-rw-r--r--src/sna/gen7_render.c10
-rw-r--r--src/sna/sna_accel.c30
-rw-r--r--src/sna/sna_display.c7
-rw-r--r--src/sna/sna_dri.c6
-rw-r--r--src/sna/sna_io.c12
-rw-r--r--src/sna/sna_render.c2
-rw-r--r--src/sna/sna_render.h4
-rw-r--r--src/sna/sna_tiling.c8
-rw-r--r--src/sna/sna_trapezoids.c4
14 files changed, 69 insertions, 51 deletions
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index 5fd995b3..b41c3865 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -2409,7 +2409,7 @@ static inline Bool prefer_blt_fill(struct sna *sna)
#endif
}
-static inline Bool prefer_blt_copy(struct sna *sna)
+static inline Bool prefer_blt_copy(struct sna *sna, unsigned flags)
{
#if PREFER_BLT_COPY
return true;
@@ -2864,7 +2864,7 @@ static Bool
gen2_render_copy_boxes(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n)
+ const BoxRec *box, int n, unsigned flags)
{
struct sna_composite_op tmp;
@@ -2882,7 +2882,7 @@ gen2_render_copy_boxes(struct sna *sna, uint8_t alu,
DBG(("%s (%d, %d)->(%d, %d) x %d\n",
__FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n));
- if (prefer_blt_copy(sna) &&
+ if (prefer_blt_copy(sna, flags) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
@@ -3048,7 +3048,7 @@ gen2_render_copy(struct sna *sna, uint8_t alu,
#endif
/* Prefer to use the BLT */
- if (prefer_blt_copy(sna) &&
+ if (prefer_blt_copy(sna, 0) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy(sna, alu,
src_bo, dst_bo,
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 63bbd766..cfc8c63e 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -4040,7 +4040,7 @@ static Bool
gen3_render_copy_boxes(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n)
+ const BoxRec *box, int n, unsigned flags)
{
struct sna_composite_op tmp;
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index c3a82046..c5775360 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2576,11 +2576,22 @@ gen4_render_copy_one(struct sna *sna,
FLUSH(op);
}
+static inline bool prefer_blt_copy(struct sna *sna, unsigned flags)
+{
+#if PREFER_BLT
+ return true;
+ (void)sna;
+#else
+ return sna->kgem.mode != KGEM_RENDER;
+#endif
+ (void)flags;
+}
+
static Bool
gen4_render_copy_boxes(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n)
+ const BoxRec *box, int n, unsigned flags)
{
struct sna_composite_op tmp;
@@ -2597,7 +2608,7 @@ gen4_render_copy_boxes(struct sna *sna, uint8_t alu,
box, n);
#endif
- if (prefer_blt(sna) &&
+ if (prefer_blt_copy(sna, flags) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 46a37a0b..49cc17ed 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2909,7 +2909,7 @@ static Bool
gen5_render_copy_boxes(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n)
+ const BoxRec *box, int n, unsigned flags)
{
struct sna_composite_op tmp;
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 81fad355..778a0722 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -3238,9 +3238,11 @@ static bool prefer_blt_bo(struct sna *sna,
static inline bool prefer_blt_copy(struct sna *sna,
PixmapPtr src, struct kgem_bo *src_bo,
- PixmapPtr dst, struct kgem_bo *dst_bo)
+ PixmapPtr dst, struct kgem_bo *dst_bo,
+ unsigned flags)
{
return (sna->kgem.ring == KGEM_BLT ||
+ (flags & COPY_LAST && sna->kgem.mode == KGEM_NONE) ||
prefer_blt_bo(sna, src, src_bo) ||
prefer_blt_bo(sna, dst, dst_bo));
}
@@ -3280,7 +3282,7 @@ static Bool
gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n)
+ const BoxRec *box, int n, unsigned flags)
{
struct sna_composite_op tmp;
@@ -3302,7 +3304,7 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
dst_bo, dst_dx, dst_dy,
box, n)));
- if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo) &&
+ if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo, flags) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
@@ -3537,7 +3539,7 @@ gen6_render_copy(struct sna *sna, uint8_t alu,
src->drawable.width, src->drawable.height,
dst->drawable.width, dst->drawable.height));
- if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo) &&
+ if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo, 0) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy(sna, alu,
src_bo, dst_bo,
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index d3032869..f9b2e9e5 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -3322,9 +3322,11 @@ static bool prefer_blt_bo(struct sna *sna,
static inline bool prefer_blt_copy(struct sna *sna,
PixmapPtr src, struct kgem_bo *src_bo,
- PixmapPtr dst, struct kgem_bo *dst_bo)
+ PixmapPtr dst, struct kgem_bo *dst_bo,
+ unsigned flags)
{
return (sna->kgem.ring == KGEM_BLT ||
+ (flags & COPY_LAST && sna->kgem.mode == KGEM_NONE) ||
prefer_blt_bo(sna, src, src_bo) ||
prefer_blt_bo(sna, dst, dst_bo));
}
@@ -3364,7 +3366,7 @@ static Bool
gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n)
+ const BoxRec *box, int n, unsigned flags)
{
struct sna_composite_op tmp;
@@ -3386,7 +3388,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
dst_bo, dst_dx, dst_dy,
box, n)));
- if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo) &&
+ if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo, flags) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy_boxes(sna, alu,
src_bo, src_dx, src_dy,
@@ -3644,7 +3646,7 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
src->drawable.width, src->drawable.height,
dst->drawable.width, dst->drawable.height));
- if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo) &&
+ if (prefer_blt_copy(sna, src, src_bo, dst, dst_bo, 0) &&
sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
sna_blt_copy(sna, alu,
src_bo, dst_bo,
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 537b2871..1919b2ef 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -594,7 +594,7 @@ struct kgem_bo *sna_pixmap_change_tiling(PixmapPtr pixmap, uint32_t tiling)
if (!sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->gpu_bo, 0, 0,
pixmap, bo, 0, 0,
- &box, 1)) {
+ &box, 1, 0)) {
DBG(("%s: copy failed\n", __FUNCTION__));
kgem_bo_destroy(&sna->kgem, bo);
return NULL;
@@ -1232,7 +1232,7 @@ skip_inplace_map:
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->gpu_bo, 0, 0,
pixmap, priv->cpu_bo, 0, 0,
- box, n);
+ box, n, COPY_LAST);
if (!ok)
sna_read_boxes(sna,
priv->gpu_bo, 0, 0,
@@ -1690,7 +1690,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->gpu_bo, 0, 0,
pixmap, priv->cpu_bo, 0, 0,
- box, n);
+ box, n, COPY_LAST);
if (!ok)
sna_read_boxes(sna,
priv->gpu_bo, 0, 0,
@@ -1798,7 +1798,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->gpu_bo, 0, 0,
pixmap, priv->cpu_bo, 0, 0,
- box, n);
+ box, n, COPY_LAST);
if (!ok)
sna_read_boxes(sna,
@@ -1823,7 +1823,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->gpu_bo, 0, 0,
pixmap, priv->cpu_bo, 0, 0,
- box, n);
+ box, n, COPY_LAST);
if (!ok)
sna_read_boxes(sna,
priv->gpu_bo, 0, 0,
@@ -1848,7 +1848,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->gpu_bo, 0, 0,
pixmap, priv->cpu_bo, 0, 0,
- box, n);
+ box, n, COPY_LAST);
if (!ok)
sna_read_boxes(sna,
priv->gpu_bo, 0, 0,
@@ -2096,7 +2096,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->cpu_bo, 0, 0,
pixmap, priv->gpu_bo, 0, 0,
- box, n);
+ box, n, 0);
if (!ok) {
if (pixmap->devPrivate.ptr == NULL) {
assert(priv->stride && priv->ptr);
@@ -2134,7 +2134,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->cpu_bo, 0, 0,
pixmap, priv->gpu_bo, 0, 0,
- box, 1);
+ box, 1, 0);
if (!ok) {
if (pixmap->devPrivate.ptr == NULL) {
assert(priv->stride && priv->ptr);
@@ -2163,7 +2163,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->cpu_bo, 0, 0,
pixmap, priv->gpu_bo, 0, 0,
- box, n);
+ box, n,0);
if (!ok) {
if (pixmap->devPrivate.ptr == NULL) {
assert(priv->stride && priv->ptr);
@@ -2641,7 +2641,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
ok = sna->render.copy_boxes(sna, GXcopy,
pixmap, priv->cpu_bo, 0, 0,
pixmap, priv->gpu_bo, 0, 0,
- box, n);
+ box, n, 0);
if (!ok) {
if (pixmap->devPrivate.ptr == NULL) {
assert(priv->stride && priv->ptr);
@@ -3657,7 +3657,7 @@ sna_self_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (!sna->render.copy_boxes(sna, alu,
pixmap, priv->gpu_bo, dx, dy,
pixmap, priv->gpu_bo, tx, ty,
- box, n)) {
+ box, n, 0)) {
DBG(("%s: fallback - accelerated copy boxes failed\n",
__FUNCTION__));
goto fallback;
@@ -3874,7 +3874,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (!sna->render.copy_boxes(sna, alu,
src_pixmap, src_priv->gpu_bo, src_dx, src_dy,
dst_pixmap, bo, dst_dx, dst_dy,
- box, n)) {
+ box, n, 0)) {
DBG(("%s: fallback - accelerated copy boxes failed\n",
__FUNCTION__));
goto fallback;
@@ -3909,7 +3909,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (!sna->render.copy_boxes(sna, alu,
src_pixmap, src_priv->gpu_bo, src_dx, src_dy,
dst_pixmap, bo, dst_dx, dst_dy,
- box, n)) {
+ box, n, 0)) {
DBG(("%s: fallback - accelerated copy boxes failed\n",
__FUNCTION__));
goto fallback;
@@ -3945,7 +3945,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (!sna->render.copy_boxes(sna, alu,
src_pixmap, src_priv->cpu_bo, src_dx, src_dy,
dst_pixmap, bo, dst_dx, dst_dy,
- box, n)) {
+ box, n, 0)) {
DBG(("%s: fallback - accelerated copy boxes failed\n",
__FUNCTION__));
goto fallback;
@@ -4005,7 +4005,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
if (!sna->render.copy_boxes(sna, alu,
tmp, sna_pixmap_get_bo(tmp), dx, dy,
dst_pixmap, bo, dst_dx, dst_dy,
- box, n)) {
+ box, n, 0)) {
DBG(("%s: fallback - accelerated copy boxes failed\n",
__FUNCTION__));
tmp->drawable.pScreen->DestroyPixmap(tmp);
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index f1a0b841..f59eed52 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -814,7 +814,7 @@ void sna_copy_fbcon(struct sna *sna)
ok = sna->render.copy_boxes(sna, GXcopy,
scratch, bo, sx, sy,
sna->front, priv->gpu_bo, dx, dy,
- &box, 1);
+ &box, 1, 0);
if (!DAMAGE_IS_ALL(priv->gpu_damage))
sna_damage_add_box(&priv->gpu_damage, &box);
@@ -2780,7 +2780,7 @@ sna_crtc_redisplay(xf86CrtcPtr crtc, RegionPtr region)
if (sna->render.copy_boxes(sna, GXcopy,
sna->front, sna_pixmap_get_bo(sna->front), 0, 0,
&tmp, sna_crtc->bo, -tx, -ty,
- REGION_RECTS(region), REGION_NUM_RECTS(region)))
+ REGION_RECTS(region), REGION_NUM_RECTS(region), 0))
return;
}
@@ -2909,7 +2909,8 @@ disable:
sna->front, new, 0, 0,
sna->front, old, 0, 0,
REGION_RECTS(region),
- REGION_NUM_RECTS(region));
+ REGION_NUM_RECTS(region),
+ COPY_LAST);
kgem_submit(&sna->kgem);
sna_pixmap(sna->front)->gpu_bo = old;
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 4519f170..a10efc7b 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -568,7 +568,7 @@ sna_dri_copy_to_front(struct sna *sna, DrawablePtr draw, RegionPtr region,
sna->render.copy_boxes(sna, GXcopy,
(PixmapPtr)draw, src_bo, -draw->x, -draw->y,
pixmap, dst_bo, dx, dy,
- boxes, n);
+ boxes, n, COPY_LAST);
DBG(("%s: flushing? %d\n", __FUNCTION__, flush));
if (flush) { /* STAT! */
@@ -654,7 +654,7 @@ sna_dri_copy_from_front(struct sna *sna, DrawablePtr draw, RegionPtr region,
sna->render.copy_boxes(sna, GXcopy,
pixmap, src_bo, dx, dy,
(PixmapPtr)draw, dst_bo, -draw->x, -draw->y,
- boxes, n);
+ boxes, n, COPY_LAST);
if (region == &clip)
pixman_region_fini(&clip);
@@ -697,7 +697,7 @@ sna_dri_copy(struct sna *sna, DrawablePtr draw, RegionPtr region,
sna->render.copy_boxes(sna, GXcopy,
(PixmapPtr)draw, src_bo, 0, 0,
(PixmapPtr)draw, dst_bo, 0, 0,
- boxes, n);
+ boxes, n, COPY_LAST);
if (region == &clip)
pixman_region_fini(&clip);
diff --git a/src/sna/sna_io.c b/src/sna/sna_io.c
index 8d045484..ffa86b10 100644
--- a/src/sna/sna_io.c
+++ b/src/sna/sna_io.c
@@ -276,7 +276,7 @@ fallback:
if (!sna->render.copy_boxes(sna, GXcopy,
dst, src_bo, src_dx, src_dy,
&tmp, dst_bo, -tile.x1, -tile.y1,
- clipped, c-clipped)) {
+ clipped, c-clipped, COPY_LAST)) {
kgem_bo_destroy(&sna->kgem, dst_bo);
if (clipped != stack)
free(clipped);
@@ -316,7 +316,7 @@ fallback:
if (!sna->render.copy_boxes(sna, GXcopy,
dst, src_bo, src_dx, src_dy,
&tmp, dst_bo, -extents.x1, -extents.y1,
- box, nbox)) {
+ box, nbox, COPY_LAST)) {
kgem_bo_destroy(&sna->kgem, dst_bo);
goto fallback;
}
@@ -689,7 +689,7 @@ tile:
n = sna->render.copy_boxes(sna, GXcopy,
&tmp, src_bo, -tile.x1, -tile.y1,
dst, dst_bo, dst_dx, dst_dy,
- clipped, c - clipped);
+ clipped, c - clipped, 0);
else
n = 1;
@@ -736,7 +736,7 @@ tile:
n = sna->render.copy_boxes(sna, GXcopy,
&tmp, src_bo, -extents.x1, -extents.y1,
dst, dst_bo, dst_dx, dst_dy,
- box, nbox);
+ box, nbox, 0);
kgem_bo_destroy(&sna->kgem, src_bo);
@@ -973,7 +973,7 @@ fallback:
n = sna->render.copy_boxes(sna, GXcopy,
&tmp, src_bo, -extents.x1, -extents.y1,
dst, dst_bo, dst_dx, dst_dy,
- box, nbox);
+ box, nbox, 0);
kgem_bo_destroy(&sna->kgem, src_bo);
@@ -1144,7 +1144,7 @@ indirect_replace(struct sna *sna,
ret = sna->render.copy_boxes(sna, GXcopy,
pixmap, src_bo, 0, 0,
pixmap, bo, 0, 0,
- &box, 1);
+ &box, 1, 0);
kgem_bo_destroy(kgem, src_bo);
diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index a072994a..c22965c7 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -1167,7 +1167,7 @@ sna_render_picture_extract(struct sna *sna,
if (!sna->render.copy_boxes(sna, GXcopy,
pixmap, src_bo, 0, 0,
&tmp, bo, -box.x1, -box.y1,
- &box, 1)) {
+ &box, 1, 0)) {
kgem_bo_destroy(&sna->kgem, bo);
bo = NULL;
}
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index 1cc3af19..0eb7e90a 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -237,7 +237,9 @@ struct sna_render {
Bool (*copy_boxes)(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
PixmapPtr dst, struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
- const BoxRec *box, int n);
+ const BoxRec *box, int n, unsigned flags);
+#define COPY_LAST 0x1
+
Bool (*copy)(struct sna *sna, uint8_t alu,
PixmapPtr src, struct kgem_bo *src_bo,
PixmapPtr dst, struct kgem_bo *dst_bo,
diff --git a/src/sna/sna_tiling.c b/src/sna/sna_tiling.c
index 27a9dc81..b20eceb8 100644
--- a/src/sna/sna_tiling.c
+++ b/src/sna/sna_tiling.c
@@ -659,7 +659,7 @@ sna_tiling_fill_boxes(struct sna *sna,
if (!sna->render.copy_boxes(sna, GXcopy,
dst, dst_bo, 0, 0,
&tmp, bo, -dx, -dy,
- REGION_RECTS(&this), REGION_NUM_RECTS(&this)))
+ REGION_RECTS(&this), REGION_NUM_RECTS(&this), 0))
goto err;
RegionTranslate(&this, -dx, -dy);
@@ -671,7 +671,7 @@ sna_tiling_fill_boxes(struct sna *sna,
if (!sna->render.copy_boxes(sna, GXcopy,
&tmp, bo, 0, 0,
dst, dst_bo, dx, dy,
- REGION_RECTS(&this), REGION_NUM_RECTS(&this)))
+ REGION_RECTS(&this), REGION_NUM_RECTS(&this), 0))
goto err;
kgem_bo_destroy(&sna->kgem, bo);
@@ -898,11 +898,11 @@ sna_tiling_copy_boxes(struct sna *sna, uint8_t alu,
i = (sna->render.copy_boxes(sna, GXcopy,
src, src_bo, src_dx, src_dy,
&p, tmp_bo, -tile.x1, -tile.y1,
- clipped, c - clipped) &&
+ clipped, c - clipped, 0) &&
sna->render.copy_boxes(sna, alu,
&p, tmp_bo, -tile.x1, -tile.y1,
dst, dst_bo, dst_dx, dst_dy,
- clipped, c - clipped));
+ clipped, c - clipped, 0));
kgem_bo_destroy(&sna->kgem, tmp_bo);
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 36defa10..d83c083c 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -5779,7 +5779,7 @@ trap_mask_converter(PicturePtr picture,
sna->render.copy_boxes(sna, GXcopy,
scratch, sna_pixmap_get_bo(scratch), -extents.x1, -extents.x1,
pixmap, priv->gpu_bo, x, y,
- &extents, 1);
+ &extents, 1, 0);
mark_damaged(pixmap, priv, &extents ,x, y);
screen->DestroyPixmap(scratch);
@@ -5857,7 +5857,7 @@ trap_upload(PicturePtr picture,
sna->render.copy_boxes(sna, GXcopy,
scratch, sna_pixmap_get_bo(scratch), -extents.x1, -extents.x1,
pixmap, priv->gpu_bo, x, y,
- &extents, 1);
+ &extents, 1, 0);
mark_damaged(pixmap, priv, &extents, x, y);
screen->DestroyPixmap(scratch);