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, &region->extents))
 		return damage;
 
-	assert(RegionNotEmpty(&damage->region));
 
 	if (region_is_singular(region) &&
 	    box_contains(&region->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