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

Chris Wilson ickle at kemper.freedesktop.org
Mon Apr 7 00:01:46 PDT 2014


 src/sna/sna_accel.c  |   25 +++++++++++++++----------
 src/sna/sna_damage.c |    4 ++--
 2 files changed, 17 insertions(+), 12 deletions(-)

New commits:
commit 8ef81d676c52e42a6d9048fd92b2843470b62945
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Apr 7 07:59:42 2014 +0100

    sna: Simplify checking for singular damage
    
    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 47e8883..f80ce22 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -641,7 +641,7 @@ static struct sna_damage *__sna_damage_add_box(struct sna_damage *damage,
 		break;
 	}
 
-	if (REGION_NUM_RECTS(&damage->region) <= 1 ||
+	if (damage->region.data == NULL ||
 	    box_contains_region(box, &damage->region)) {
 		_pixman_region_union_box(&damage->region, box);
 		assert(damage->region.extents.x2 > damage->region.extents.x1);
@@ -679,7 +679,7 @@ inline static struct sna_damage *__sna_damage_add(struct sna_damage *damage,
 	if (region->data == NULL)
 		return __sna_damage_add_box(damage, &region->extents);
 
-	if (REGION_NUM_RECTS(&damage->region) <= 1) {
+	if (damage->region.data == NULL) {
 		pixman_region_union(&damage->region, &damage->region, region);
 		assert(damage->region.extents.x2 > damage->region.extents.x1);
 		assert(damage->region.extents.y2 > damage->region.extents.y1);
commit f5014b3fddf6c79f5ca01a91eec5ca92184c8829
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Apr 7 07:59:01 2014 +0100

    sna: Avoid double application of pixel widening for degenerate lines
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=77074
    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 71ba34d..55eef79 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -8849,7 +8849,7 @@ sna_poly_line_blt(DrawablePtr drawable,
 	DDXPointRec last;
 	int16_t dx, dy;
 
-	DBG(("%s: alu=%d, fg=%08x\n", __FUNCTION__, gc->alu, (unsigned)pixel));
+	DBG(("%s: alu=%d, fg=%08x, clipped=%d\n", __FUNCTION__, gc->alu, (unsigned)pixel, clipped));
 
 	if (!sna_fill_init_blt(&fill, sna, pixmap, bo, gc->alu, pixel, FILL_BOXES))
 		return false;
@@ -8875,6 +8875,8 @@ sna_poly_line_blt(DrawablePtr drawable,
 				p.x += dx;
 				p.y += dy;
 			}
+			DBG(("%s: line (%d, %d) -> (%d, %d)\n", __FUNCTION__, last.x, last.y, p.x, p.y));
+
 			if (last.x == p.x) {
 				b->x1 = last.x;
 				b->x2 = last.x + 1;
@@ -8885,6 +8887,7 @@ sna_poly_line_blt(DrawablePtr drawable,
 				b->x1 = p.x;
 				b->x2 = last.x;
 			}
+
 			if (last.y == p.y) {
 				b->y1 = last.y;
 				b->y2 = last.y + 1;
@@ -8895,11 +8898,12 @@ sna_poly_line_blt(DrawablePtr drawable,
 				b->y1 = p.y;
 				b->y2 = last.y;
 			}
-			b->y2 += last.x == p.x;
-			b->x2 += last.y == p.y;
+			b->y2 += last.x == p.x && last.y != p.y;
+			b->x2 += last.y == p.y && last.x != p.x;
 			DBG(("%s: blt (%d, %d), (%d, %d)\n",
 			     __FUNCTION__,
 			     b->x1, b->y1, b->x2, b->y2));
+
 			if (++b == last_box) {
 				assert_pixmap_contains_boxes(pixmap, boxes, last_box-boxes, 0, 0);
 				fill.boxes(sna, &fill, boxes, last_box - boxes);
@@ -8953,8 +8957,8 @@ sna_poly_line_blt(DrawablePtr drawable,
 					b->y1 = p.y;
 					b->y2 = last.y;
 				}
-				b->y2 += last.x == p.x;
-				b->x2 += last.y == p.y;
+				b->y2 += last.x == p.x && last.y != p.y;
+				b->x2 += last.y == p.y && last.x != p.x;
 				DBG(("%s: blt (%d, %d), (%d, %d)\n",
 				     __FUNCTION__,
 				     b->x1, b->y1, b->x2, b->y2));
@@ -9011,8 +9015,8 @@ sna_poly_line_blt(DrawablePtr drawable,
 					box.y1 = p.y;
 					box.y2 = last.y;
 				}
-				b->y2 += last.x == p.x;
-				b->x2 += last.y == p.y;
+				b->y2 += last.x == p.x && last.y != p.y;
+				b->x2 += last.y == p.y && last.x != p.x;
 				DBG(("%s: blt (%d, %d), (%d, %d)\n",
 				     __FUNCTION__,
 				     box.x1, box.y1, box.x2, box.y2));
@@ -9183,9 +9187,10 @@ sna_poly_line(DrawablePtr drawable, GCPtr gc,
 	if (data.flags == 0)
 		return;
 
-	DBG(("%s: extents (%d, %d), (%d, %d)\n", __FUNCTION__,
+	DBG(("%s: extents (%d, %d), (%d, %d), flags=%x\n", __FUNCTION__,
 	     data.region.extents.x1, data.region.extents.y1,
-	     data.region.extents.x2, data.region.extents.y2));
+	     data.region.extents.x2, data.region.extents.y2,
+	     data.flags));
 
 	data.region.data = NULL;
 
@@ -9202,7 +9207,7 @@ sna_poly_line(DrawablePtr drawable, GCPtr gc,
 		goto fallback;
 	}
 
-	DBG(("%s: fill=%d [%d], line=%d [%d], width=%d, mask=%lu [%d], rectlinear=%d\n",
+	DBG(("%s: fill=%d [%d], line=%d [%d], width=%d, mask=%lx [%d], rectlinear=%d\n",
 	     __FUNCTION__,
 	     gc->fillStyle, gc->fillStyle == FillSolid,
 	     gc->lineStyle, gc->lineStyle == LineSolid,


More information about the xorg-commit mailing list