diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-04-01 19:43:15 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-04-01 19:43:15 +0100 |
commit | 0b2651dc04cef8f9692b2557684f044b4980700f (patch) | |
tree | a94e561a3bda2b432c0b83a2d08a6aa7172c061e | |
parent | 4ea9ab9303d21a62683055b75eaed66c97a5f289 (diff) |
sna: Apply composite offset to damage for spans fast paths
Reported-by: Jiri Slaby <jirislaby@gmail.com>
References: https://bugs.freedesktop.org/show_bug.cgi?id=47597
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_accel.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 20d9166c..9829adac 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -6665,8 +6665,12 @@ spans_fallback: gc->ops = (GCOps *)&sna_gc_ops; assert_pixmap_contains_box(data.pixmap, &data.region.extents); - if (data.damage) + if (data.damage) { + if (data.dx | data.dy) + pixman_region_translate(&data.region, data.dx, data.dy); + assert_pixmap_contains_box(data.pixmap, &data.region.extents); sna_damage_add(data.damage, &data.region); + } RegionUninit(&data.region); return; } @@ -7579,8 +7583,12 @@ spans_fallback: } gc->ops = (GCOps *)&sna_gc_ops; - if (data.damage) + if (data.damage) { + if (data.dx | data.dy) + pixman_region_translate(&data.region, data.dx, data.dy); + assert_pixmap_contains_box(data.pixmap, &data.region.extents); sna_damage_add(data.damage, &data.region); + } RegionUninit(&data.region); return; } @@ -8299,8 +8307,12 @@ sna_poly_arc(DrawablePtr drawable, GCPtr gc, int n, xArc *arc) gc->ops = (GCOps *)&sna_gc_ops; fill.done(data.sna, &fill); - if (data.damage) + if (data.damage) { + if (data.dx | data.dy) + pixman_region_translate(&data.region, data.dx, data.dy); + assert_pixmap_contains_box(data.pixmap, &data.region.extents); sna_damage_add(data.damage, &data.region); + } RegionUninit(&data.region); return; } @@ -8645,8 +8657,12 @@ sna_poly_fill_polygon(DrawablePtr draw, GCPtr gc, } gc->ops = (GCOps *)&sna_gc_ops; - if (data.damage) + if (data.damage) { + if (data.dx | data.dy) + pixman_region_translate(&data.region, data.dx, data.dy); + assert_pixmap_contains_box(data.pixmap, &data.region.extents); sna_damage_add(data.damage, &data.region); + } RegionUninit(&data.region); return; } @@ -10207,8 +10223,12 @@ sna_poly_fill_arc(DrawablePtr draw, GCPtr gc, int n, xArc *arc) } gc->ops = (GCOps *)&sna_gc_ops; - if (data.damage) + if (data.damage) { + if (data.dx | data.dy) + pixman_region_translate(&data.region, data.dx, data.dy); + assert_pixmap_contains_box(data.pixmap, &data.region.extents); sna_damage_add(data.damage, &data.region); + } RegionUninit(&data.region); return; } |