xf86-video-intel: 3 commits - src/sna/sna_accel.c src/sna/sna_damage.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Dec 27 07:37:46 PST 2011


 src/sna/sna_accel.c  |   13 ++++++++-----
 src/sna/sna_damage.c |   35 ++++++++++++++++-------------------
 2 files changed, 24 insertions(+), 24 deletions(-)

New commits:
commit 8fc21328a0bdf87fde35d68d2b27834011acde7b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Dec 27 15:26:46 2011 +0000

    sna: Don't discard empty glyphs, just skip them
    
    A space is encoded as a 1x1 blank glyph, but we still need to advance by
    its character width and so we cannot simply discard the glyph.
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=44091id=44091
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index a03e0bc..746464b 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -7786,6 +7786,9 @@ sna_glyph_blt(DrawablePtr drawable, GCPtr gc,
 			int w8 = (w + 7) >> 3;
 			int x1, y1, len;
 
+			if (c->bits == (void *)1)
+				goto skip;
+
 			len = (w8 * h + 7) >> 3 << 1;
 			DBG(("%s glyph: (%d, %d) x (%d[%d], %d), len=%d\n" ,__FUNCTION__,
 			     x,y, w, w8, h, len));
@@ -7920,9 +7923,9 @@ static bool sna_set_glyph(CharInfoPtr in, CharInfoPtr out)
 	}
 
 	/* Skip empty glyphs */
-	if (w == 1 && h == 1 && (in->bits[0] & 1) == 0) {
-		out->bits = (void *)-1;
-		return false;
+	if ((w|h) == 1 && (in->bits[0] & 1) == 0) {
+		out->bits = (void *)1;
+		return true;
 	}
 
 	w = (w + 7) >> 3;
commit 726290ea2a54716d3d8fb998fe7d2ab252421de7
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Dec 27 13:16:34 2011 +0000

    sna: Rearrange damage for tail-call optimisations
    
    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 b34c7a5..02c125a 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -213,7 +213,7 @@ static bool _sna_damage_create_boxes(struct sna_damage *damage,
 	return true;
 }
 
-static void
+static struct sna_damage *
 _sna_damage_create_elt(struct sna_damage *damage,
 		       const BoxRec *boxes, int count)
 {
@@ -233,17 +233,18 @@ _sna_damage_create_elt(struct sna_damage *damage,
 		count -=n;
 		boxes += n;
 		if (count == 0)
-			return;
+			return damage;
 	}
 
 	DBG(("    %s(): new elt\n", __FUNCTION__));
 
-	if (!_sna_damage_create_boxes(damage, count))
-		return;
+	if (_sna_damage_create_boxes(damage, count)) {
+		memcpy(damage->box, boxes, count * sizeof(BoxRec));
+		damage->box += count;
+		damage->remain -= count;
+	}
 
-	 memcpy(damage->box, boxes, count * sizeof(BoxRec));
-	 damage->box += count;
-	 damage->remain -= count;
+	 return damage;
 }
 
 static void
@@ -470,8 +471,6 @@ inline static struct sna_damage *__sna_damage_add(struct sna_damage *damage,
 					     &region->extents) == PIXMAN_REGION_IN)
 		return damage;
 
-	_sna_damage_create_elt(damage,
-			       REGION_RECTS(region), REGION_NUM_RECTS(region));
 
 	if (damage->extents.x1 > region->extents.x1)
 		damage->extents.x1 = region->extents.x1;
@@ -483,7 +482,9 @@ inline static struct sna_damage *__sna_damage_add(struct sna_damage *damage,
 	if (damage->extents.y2 < region->extents.y2)
 		damage->extents.y2 = region->extents.y2;
 
-	return damage;
+	return _sna_damage_create_elt(damage,
+				      REGION_RECTS(region),
+				      REGION_NUM_RECTS(region));
 }
 
 #if DEBUG_DAMAGE
@@ -843,8 +844,6 @@ inline static struct sna_damage *__sna_damage_add_box(struct sna_damage *damage,
 					     (BoxPtr)box) == PIXMAN_REGION_IN)
 		return damage;
 
-	_sna_damage_create_elt(damage, box, 1);
-
 	if (damage->extents.x1 > box->x1)
 		damage->extents.x1 = box->x1;
 	if (damage->extents.x2 < box->x2)
@@ -855,7 +854,7 @@ inline static struct sna_damage *__sna_damage_add_box(struct sna_damage *damage,
 	if (damage->extents.y2 < box->y2)
 		damage->extents.y2 = box->y2;
 
-	return damage;
+	return _sna_damage_create_elt(damage, box, 1);
 }
 
 #if DEBUG_DAMAGE
@@ -997,10 +996,9 @@ static struct sna_damage *__sna_damage_subtract(struct sna_damage *damage,
 		damage->mode = DAMAGE_SUBTRACT;
 	}
 
-	_sna_damage_create_elt(damage,
-			       REGION_RECTS(region), REGION_NUM_RECTS(region));
-
-	return damage;
+	return _sna_damage_create_elt(damage,
+				      REGION_RECTS(region),
+				      REGION_NUM_RECTS(region));
 }
 
 #if DEBUG_DAMAGE
@@ -1072,8 +1070,7 @@ inline static struct sna_damage *__sna_damage_subtract_box(struct sna_damage *da
 		damage->mode = DAMAGE_SUBTRACT;
 	}
 
-	_sna_damage_create_elt(damage, box, 1);
-	return damage;
+	return _sna_damage_create_elt(damage, box, 1);
 }
 
 #if DEBUG_DAMAGE
commit 04396b6e5039c0cd1ac655a8a9afe88bb8a1ebde
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Dec 27 09:58:40 2011 +0000

    sna: Don't force the creation of a GPU bo if it will be untiled
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 449bc72..a03e0bc 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1169,8 +1169,8 @@ _sna_drawable_use_gpu_bo(DrawablePtr drawable,
 		return FALSE;
 
 	if (priv->gpu_bo == NULL &&
-	    sna_pixmap_choose_tiling(pixmap) != I915_TILING_NONE &&
-	    !box_inplace(pixmap, box))
+	    (sna_pixmap_choose_tiling(pixmap) == I915_TILING_NONE ||
+	     !box_inplace(pixmap, box)))
 		return FALSE;
 
 	get_drawable_deltas(drawable, pixmap, &dx, &dy);


More information about the xorg-commit mailing list