xf86-video-intel: 3 commits - src/sna/kgem.c src/sna/kgem.h src/sna/sna_damage.c
Chris Wilson
ickle at kemper.freedesktop.org
Wed Mar 14 16:48:55 PDT 2012
src/sna/kgem.c | 6 ++++++
src/sna/kgem.h | 2 +-
src/sna/sna_damage.c | 41 ++++++++++++++++++++++-------------------
3 files changed, 29 insertions(+), 20 deletions(-)
New commits:
commit 27f8f121b3d7433c6c3470b048428ca088acd2c9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Mar 14 23:43:20 2012 +0000
sna/damage: Handle a reduced damage rather than assert
As we may reduce a damage to empty along the migration paths and not
detect that reduced damage till later, handle those scenarios rather
asserting.
References: https://bugs.freedesktop.org/show_bug.cgi?42426
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 f52ecac..9c646d8 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -1005,12 +1005,16 @@ static struct sna_damage *__sna_damage_subtract(struct sna_damage *damage,
if (damage == NULL)
return NULL;
+ if (!RegionNotEmpty(&damage->region)) {
+ __sna_damage_destroy(damage);
+ return NULL;
+ }
+
assert(RegionNotEmpty(region));
if (!sna_damage_maybe_contains_box(damage, ®ion->extents))
return damage;
- assert(RegionNotEmpty(&damage->region));
if (region_is_singular(region) &&
box_contains(®ion->extents, &damage->extents)) {
@@ -1028,15 +1032,12 @@ static struct sna_damage *__sna_damage_subtract(struct sna_damage *damage,
}
if (damage->mode != DAMAGE_SUBTRACT) {
- if (damage->dirty)
+ if (damage->dirty) {
__sna_damage_reduce(damage);
-
- if (pixman_region_equal(region, &damage->region)) {
- __sna_damage_destroy(damage);
- return NULL;
+ assert(RegionNotEmpty(&damage->region));
}
- if (!pixman_region_not_empty(&damage->region)) {
+ if (pixman_region_equal(region, &damage->region)) {
__sna_damage_destroy(damage);
return NULL;
}
@@ -1091,23 +1092,23 @@ inline static struct sna_damage *__sna_damage_subtract_box(struct sna_damage *da
if (damage == NULL)
return NULL;
+ if (!RegionNotEmpty(&damage->region)) {
+ __sna_damage_destroy(damage);
+ return NULL;
+ }
+
if (!sna_damage_maybe_contains_box(damage, box))
return damage;
- assert(RegionNotEmpty(&damage->region));
-
if (box_contains(box, &damage->extents)) {
__sna_damage_destroy(damage);
return NULL;
}
if (damage->mode != DAMAGE_SUBTRACT) {
- if (damage->dirty)
+ if (damage->dirty) {
__sna_damage_reduce(damage);
-
- if (!pixman_region_not_empty(&damage->region)) {
- __sna_damage_destroy(damage);
- return NULL;
+ assert(RegionNotEmpty(&damage->region));
}
if (region_is_singular(&damage->region)) {
@@ -1163,6 +1164,11 @@ static struct sna_damage *__sna_damage_subtract_boxes(struct sna_damage *damage,
if (damage == NULL)
return NULL;
+ if (!RegionNotEmpty(&damage->region)) {
+ __sna_damage_destroy(damage);
+ return NULL;
+ }
+
assert(n);
extents = box[0];
@@ -1191,12 +1197,9 @@ static struct sna_damage *__sna_damage_subtract_boxes(struct sna_damage *damage,
return __sna_damage_subtract_box(damage, &extents);
if (damage->mode != DAMAGE_SUBTRACT) {
- if (damage->dirty)
+ if (damage->dirty) {
__sna_damage_reduce(damage);
-
- if (!pixman_region_not_empty(&damage->region)) {
- __sna_damage_destroy(damage);
- return NULL;
+ assert(RegionNotEmpty(&damage->region));
}
damage->mode = DAMAGE_SUBTRACT;
commit abd104600252f0ebd1eb77eb5419693e1c17deda
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Mar 14 23:08:31 2012 +0000
sna: Treat unmapped but CPU-mappable bo as available for mapping
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 7e5ffac..98534d9 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -443,7 +443,7 @@ static inline bool kgem_bo_mapped(struct kgem_bo *bo)
DBG_HDR(("%s: map=%p, tiling=%d\n", __FUNCTION__, bo->map, bo->tiling));
if (bo->map == NULL)
- return false;
+ return bo->tiling == I915_TILING_NONE && bo->domain == DOMAIN_CPU;
return IS_CPU_MAP(bo->map) == !bo->tiling;
}
commit 2c492c0064e23457bffdf4f9ab1a7c9f1be93a87
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Mar 14 23:05:58 2012 +0000
sna: Disable tiling for single row pixmaps (unless required for hw limits)
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index a1ed6ca..daca7af 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2330,6 +2330,12 @@ int kgem_choose_tiling(struct kgem *kgem, int tiling, int width, int height, int
if (tiling < 0)
return tiling;
+ if (tiling && height == 1) {
+ DBG(("%s: disabling tiling [%d] for single row\n",
+ __FUNCTION__,height));
+ tiling = I915_TILING_NONE;
+ goto done;
+ }
if (tiling == I915_TILING_Y && height <= 16) {
DBG(("%s: too short [%d] for TILING_Y\n",
__FUNCTION__,height));
More information about the xorg-commit
mailing list