x2 = x1 + r->width;
y2 = y1 + r->height;
- src_x = r->src.x - x1;
- src_y = r->src.y - y1;
+ src_x = r->src.x - x1 + op->u.blt.sx;
+ src_y = r->src.y - y1 + op->u.blt.sy;
/* clip against dst */
if (x1 < 0)
assert(kgem_bo_can_blt(&sna->kgem, op->dst.bo));
assert(kgem_bo_can_blt(&sna->kgem, bo));
+ kgem_set_mode(&sna->kgem, KGEM_BLT, op->dst.bo);
if (!kgem_check_many_bo_fenced(&sna->kgem, op->dst.bo, bo, NULL)) {
kgem_submit(&sna->kgem);
if (!kgem_check_many_bo_fenced(&sna->kgem,
return false;
}
+ kgem_set_mode(&sna->kgem, KGEM_BLT, tmp->dst.bo);
if (!kgem_check_many_bo_fenced(&sna->kgem, tmp->dst.bo, tmp->src.bo, NULL)) {
kgem_submit(&sna->kgem);
if (!kgem_check_many_bo_fenced(&sna->kgem,
DBG(("%s: blt dst offset (%d, %d), source offset (%d, %d), with alpha fixup? %x\n",
__FUNCTION__,
- tmp->dst.x, tmp->dst.y, tmp->u.blt.sx, tmp->u.blt.sy, alpha_fixup));
+ tmp->dst.x, tmp->dst.y, sx, sy, alpha_fixup));
tmp->u.blt.src_pixmap = NULL;
tmp->u.blt.sx = sx;
int width = step;
if (x + width > tile->width)
width = tile->width - x;
- memset(&tmp, 0, sizeof(tmp));
if (sna->render.composite(sna, tile->op,
tile->src, tile->mask, tile->dst,
tile->src_x + x, tile->src_y + y,
tile->mask_x + x, tile->mask_y + y,
tile->dst_x + x, tile->dst_y + y,
width, height,
- &tmp)) {
+ memset(&tmp, 0, sizeof(tmp)))) {
for (n = 0; n < tile->rect_count; n++) {
const struct sna_composite_rectangles *r = &tile->rects[n];
int x1, x2, dx, y1, y2, dy;