diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-14 14:11:56 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-14 14:13:10 +0000 |
commit | 5647e2981d81fd2b5cdb22d544f83d2d0f9445c9 (patch) | |
tree | ae569e4afe4bbc961f4d4939ec039305676df05f | |
parent | 405b015fe255c75f91b0f3fe93f06bd14faee5a1 (diff) |
sna/damage: Always reduce damage for testing PIXMAN_REGION_OUT
Reported-by: Clemens Eisserer <linuxhippy@gmail.com>
References: https://bugs.freedesktop.org/show_bug.cgi?id=42414
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_damage.c | 9 | ||||
-rw-r--r-- | src/sna/sna_damage.h | 2 |
2 files changed, 5 insertions, 6 deletions
diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c index 95a92a53..bc5740de 100644 --- a/src/sna/sna_damage.c +++ b/src/sna/sna_damage.c @@ -1138,10 +1138,11 @@ static int _sna_damage_contains_box(struct sna_damage *damage, __sna_damage_reduce(damage); ret = pixman_region_contains_rectangle(&damage->region, (BoxPtr)box); - if (damage->n == 0) + if (ret != PIXMAN_REGION_OUT || damage->n == 0) return ret; - return ret == PIXMAN_REGION_IN ? PIXMAN_REGION_IN : PIXMAN_REGION_OUT; + __sna_damage_reduce(damage); + return pixman_region_contains_rectangle(&damage->region, (BoxPtr)box); } #if DEBUG_DAMAGE @@ -1246,9 +1247,7 @@ struct sna_damage *_sna_damage_reduce(struct sna_damage *damage) { DBG(("%s\n", __FUNCTION__)); - if (damage->n) - __sna_damage_reduce(damage); - + __sna_damage_reduce(damage); if (!pixman_region_not_empty(&damage->region)) { __sna_damage_destroy(damage); damage = NULL; diff --git a/src/sna/sna_damage.h b/src/sna/sna_damage.h index 7fc6d024..5c88cf6e 100644 --- a/src/sna/sna_damage.h +++ b/src/sna/sna_damage.h @@ -133,7 +133,7 @@ static inline void sna_damage_reduce(struct sna_damage **damage) if (*damage == NULL) return; - if ((*damage)->mode != DAMAGE_ALL) + if ((*damage)->n) *damage = _sna_damage_reduce(*damage); } |