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>
This commit is contained in:
parent
d36623aaeb
commit
54ee41bf05
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue