summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-04-01 19:43:15 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-04-01 19:43:15 +0100
commit0b2651dc04cef8f9692b2557684f044b4980700f (patch)
treea94e561a3bda2b432c0b83a2d08a6aa7172c061e
parent4ea9ab9303d21a62683055b75eaed66c97a5f289 (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.c30
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;
}