xf86-video-intel: 3 commits - src/sna/sna_damage.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Jun 12 14:55:14 PDT 2012
src/sna/sna_damage.c | 71 +++++++++++++++++++++++++++++++++------------------
1 file changed, 47 insertions(+), 24 deletions(-)
New commits:
commit 572745eb243a96819c8fa248f4ffdd703ed13b0f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 12 22:49:05 2012 +0100
sna/damage: Remove unused return value
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index e563db2..1ea9e3c 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -154,7 +154,7 @@ static const char *_debug_describe_damage(char *buf, int max,
#endif
-static struct sna_damage_box *
+static void
reset_embedded_box(struct sna_damage *damage)
{
damage->dirty = false;
@@ -162,8 +162,6 @@ reset_embedded_box(struct sna_damage *damage)
damage->embedded_box.size =
damage->remain = ARRAY_SIZE(damage->embedded_box.box);
list_init(&damage->embedded_box.list);
-
- return (struct sna_damage_box *)&damage->embedded_box;
}
static struct sna_damage *_sna_damage_create(void)
commit aefc0417dde8b2137a787459a69d91c14902f22b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 12 22:47:41 2012 +0100
sna/damage: Simplify initialisation of damage extents
Just use the already computed region->extents when adding the first box.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index 1cdfe22..e563db2 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -251,7 +251,7 @@ _sna_damage_create_elt(struct sna_damage *damage,
}
assert(damage->remain >= 0);
- return damage;
+ return damage;
}
static struct sna_damage *
@@ -530,7 +530,12 @@ done:
static void damage_union(struct sna_damage *damage, const BoxRec *box)
{
- assert(box->x2 > box->x1 && box->y2 > box>y1);
+ DBG(("%s: extending damage (%d, %d), (%d, %d) by (%d, %d), (%d, %d)\n",
+ __FUNCTION__,
+ damage->extents.x1, damage->extents.y1,
+ damage->extents.x2, damage->extents.y2,
+ box->x1, box->y1, box->x2, box->y2));
+ assert(box->x2 > box->x1 && box->y2 > box->y1);
if (damage->extents.x2 < damage->extents.x1) {
damage->extents = *box;
} else {
@@ -574,11 +579,11 @@ static struct sna_damage *__sna_damage_add_box(struct sna_damage *damage,
switch (REGION_NUM_RECTS(&damage->region)) {
case 0:
pixman_region_init_rects(&damage->region, box, 1);
- damage_union(damage, box);
+ damage->extents = *box;
return damage;
case 1:
_pixman_region_union_box(&damage->region, box);
- damage_union(damage, box);
+ damage->extents = damage->region.extents;
return damage;
}
@@ -613,7 +618,7 @@ inline static struct sna_damage *__sna_damage_add(struct sna_damage *damage,
if (REGION_NUM_RECTS(&damage->region) <= 1) {
pixman_region_union(&damage->region, &damage->region, region);
- damage_union(damage, ®ion->extents);
+ damage->extents = damage->region.extents;
return damage;
}
commit 78a96e812b912c5b25a02670f603f455f93e9d00
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 12 21:43:31 2012 +0100
sna: Refresh the damage self-tests
They had bitrotted with the revamp and needed some massaging to update
to the new interfaces.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index dd67364..1cdfe22 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -236,7 +236,7 @@ _sna_damage_create_elt(struct sna_damage *damage,
damage->box += n;
damage->remain -= n;
- count -=n;
+ count -= n;
boxes += n;
if (count == 0)
return damage;
@@ -249,6 +249,7 @@ _sna_damage_create_elt(struct sna_damage *damage,
damage->box += count;
damage->remain -= count;
}
+ assert(damage->remain >= 0);
return damage;
}
@@ -276,7 +277,7 @@ _sna_damage_create_elt_from_boxes(struct sna_damage *damage,
damage->box += n;
damage->remain -= n;
- count -=n;
+ count -= n;
boxes += n;
if (count == 0)
return damage;
@@ -295,6 +296,7 @@ _sna_damage_create_elt_from_boxes(struct sna_damage *damage,
}
damage->box += count;
damage->remain -= count;
+ assert(damage->remain >= 0);
return damage;
}
@@ -323,7 +325,7 @@ _sna_damage_create_elt_from_rectangles(struct sna_damage *damage,
damage->box += n;
damage->remain -= n;
- count -=n;
+ count -= n;
r += n;
if (count == 0)
return damage;
@@ -342,6 +344,7 @@ _sna_damage_create_elt_from_rectangles(struct sna_damage *damage,
}
damage->box += count;
damage->remain -= count;
+ assert(damage->remain >= 0);
return damage;
}
@@ -370,7 +373,7 @@ _sna_damage_create_elt_from_points(struct sna_damage *damage,
damage->box += n;
damage->remain -= n;
- count -=n;
+ count -= n;
p += n;
if (count == 0)
return damage;
@@ -389,6 +392,7 @@ _sna_damage_create_elt_from_points(struct sna_damage *damage,
}
damage->box += count;
damage->remain -= count;
+ assert(damage->remain >= 0);
return damage;
}
@@ -526,6 +530,7 @@ done:
static void damage_union(struct sna_damage *damage, const BoxRec *box)
{
+ assert(box->x2 > box->x1 && box->y2 > box>y1);
if (damage->extents.x2 < damage->extents.x1) {
damage->extents = *box;
} else {
@@ -1004,7 +1009,6 @@ static struct sna_damage *__sna_damage_subtract(struct sna_damage *damage,
if (!sna_damage_overlaps_box(damage, ®ion->extents))
return damage;
-
if (region_is_singular(region) &&
box_contains(®ion->extents, &damage->extents)) {
__sna_damage_destroy(damage);
@@ -1481,7 +1485,8 @@ static void st_damage_add(struct sna_damage_selftest *test,
st_damage_init_random_region1(test, &tmp);
- sna_damage_add(damage, &tmp);
+ if (!DAMAGE_IS_ALL(*damage))
+ sna_damage_add(damage, &tmp);
pixman_region_union(region, region, &tmp);
}
@@ -1489,15 +1494,14 @@ static void st_damage_add_box(struct sna_damage_selftest *test,
struct sna_damage **damage,
pixman_region16_t *region)
{
- BoxRec box;
+ RegionRec r;
- st_damage_init_random_box(test, &box);
+ st_damage_init_random_box(test, &r.extents);
+ r.data = NULL;
- sna_damage_add_box(damage, &box);
- pixman_region_union_rectangle(region, region,
- box.x1, box.y2,
- box.x2 - box.x1,
- box.y2 - box.y1);
+ if (!DAMAGE_IS_ALL(*damage))
+ sna_damage_add_box(damage, &r.extents);
+ pixman_region_union(region, region, &r);
}
static void st_damage_subtract(struct sna_damage_selftest *test,
@@ -1512,6 +1516,19 @@ static void st_damage_subtract(struct sna_damage_selftest *test,
pixman_region_subtract(region, region, &tmp);
}
+static void st_damage_subtract_box(struct sna_damage_selftest *test,
+ struct sna_damage **damage,
+ pixman_region16_t *region)
+{
+ RegionRec r;
+
+ st_damage_init_random_box(test, &r.extents);
+ r.data = NULL;
+
+ sna_damage_subtract_box(damage, &r.extents);
+ pixman_region_subtract(region, region, &r);
+}
+
static void st_damage_all(struct sna_damage_selftest *test,
struct sna_damage **damage,
pixman_region16_t *region)
@@ -1520,7 +1537,8 @@ static void st_damage_all(struct sna_damage_selftest *test,
pixman_region_init_rect(&tmp, 0, 0, test->width, test->height);
- sna_damage_all(damage, test->width, test->height);
+ if (!DAMAGE_IS_ALL(*damage))
+ sna_damage_all(damage, test->width, test->height);
pixman_region_union(region, region, &tmp);
}
@@ -1531,7 +1549,7 @@ static bool st_check_equal(struct sna_damage_selftest *test,
int d_num, r_num;
BoxPtr d_boxes, r_boxes;
- d_num = sna_damage_get_boxes(*damage, &d_boxes);
+ d_num = *damage ? sna_damage_get_boxes(*damage, &d_boxes) : 0;
r_boxes = pixman_region_rectangles(region, &r_num);
if (d_num != r_num) {
@@ -1557,6 +1575,7 @@ void sna_damage_selftest(void)
st_damage_add,
st_damage_add_box,
st_damage_subtract,
+ st_damage_subtract_box,
st_damage_all
};
bool (*const check[])(struct sna_damage_selftest *test,
@@ -1569,13 +1588,14 @@ void sna_damage_selftest(void)
char damage_buf[1000];
int pass;
- for (pass = 0; pass < 1024; pass++) {
+ for (pass = 0; pass < 16384; pass++) {
struct sna_damage_selftest test;
struct sna_damage *damage;
pixman_region16_t ref;
int iter, i;
- iter = rand() % 1024;
+ iter = 1 + rand() % (1 + (pass / 64));
+ ErrorF("%s: pass %d, iters=%d\n", __FUNCTION__, pass, iter);
test.width = 1 + rand() % 2048;
test.height = 1 + rand() % 2048;
More information about the xorg-commit
mailing list