xf86-video-intel: src/sna/fb

Chris Wilson ickle at kemper.freedesktop.org
Fri Sep 7 14:05:54 PDT 2012


 src/sna/fb/fbpoint.c     |   18 ++++++------------
 src/sna/fb/fbpointbits.h |   20 ++++++++++----------
 2 files changed, 16 insertions(+), 22 deletions(-)

New commits:
commit 6c9df48fa8f1ac93103ce771ae28f47faa321619
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Sep 7 22:05:19 2012 +0100

    sna: Fix PolyPoint fallback through a complex clip
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/fb/fbpoint.c b/src/sna/fb/fbpoint.c
index d3f796e..e3974fc 100644
--- a/src/sna/fb/fbpoint.c
+++ b/src/sna/fb/fbpoint.c
@@ -26,26 +26,19 @@
 
 #define DOTS	    fbDots8
 #define BITS	    BYTE
-#define BITS2	    CARD16
-#define BITS4	    CARD32
 #include "fbpointbits.h"
 #undef BITS
-#undef BITS2
-#undef BITS4
 #undef DOTS
 
 #define DOTS	    fbDots16
 #define BITS	    CARD16
-#define BITS2	    CARD32
 #include "fbpointbits.h"
 #undef BITS
-#undef BITS2
 #undef DOTS
 
 #define DOTS	    fbDots32
 #define BITS	    CARD32
 #include "fbpointbits.h"
-#undef ARC
 #undef BITS
 #undef DOTS
 
@@ -93,16 +86,16 @@ fbPolyPoint(DrawablePtr drawable, GCPtr gc,
 		     int xorg, int yorg,
 		     int xoff, int yoff,
 		     FbBits and, FbBits xor);
-	FbBits and, xor;
 
-	DBG(("%s x %d\n", __FUNCTION__, n));
+	DBG(("%s x %d, clip=[(%d, %d), (%d, %d)]x%d\n", __FUNCTION__, n,
+	     gc->pCompositeClip->extents.x1, gc->pCompositeClip->extents.y1,
+	     gc->pCompositeClip->extents.x2, gc->pCompositeClip->extents.y2,
+	     RegionNumRects(gc->pCompositeClip)));
 
 	if (mode == CoordModePrevious)
 		fbFixCoordModePrevious(n, pt);
 
 	fbGetDrawable(drawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
-	and = fb_gc(gc)->and;
-	xor = fb_gc(gc)->xor;
 	dots = fbDots;
 	switch (dstBpp) {
 	case 8:
@@ -116,5 +109,6 @@ fbPolyPoint(DrawablePtr drawable, GCPtr gc,
 		break;
 	}
 	dots(dst, dstStride, dstBpp, gc->pCompositeClip, pt, n,
-	     drawable->x, drawable->y, dstXoff, dstYoff, and, xor);
+	     drawable->x, drawable->y, dstXoff, dstYoff,
+	     fb_gc(gc)->and, fb_gc(gc)->xor);
 }
diff --git a/src/sna/fb/fbpointbits.h b/src/sna/fb/fbpointbits.h
index 40a25c6..2d71c1d 100644
--- a/src/sna/fb/fbpointbits.h
+++ b/src/sna/fb/fbpointbits.h
@@ -38,14 +38,13 @@ DOTS(FbBits * dst,
 	BITS band = (BITS) and;
 	FbStride bitsStride = dstStride * (sizeof(FbBits) / sizeof(BITS));
 
-	bits += bitsStride * (yorg + yoff) + (xorg + xoff);
-
 	if (region->data == NULL) {
 		INT32 ul = coordToInt(region->extents.x1 - xorg,
 				      region->extents.y1 - yorg);
 		INT32 lr = coordToInt(region->extents.x2 - xorg - 1,
 				      region->extents.y2 - yorg - 1);
 
+		bits += bitsStride * (yorg + yoff) + (xorg + xoff);
 		if (and == 0) {
 			while (npt >= 2) {
 				union {
@@ -82,23 +81,24 @@ DOTS(FbBits * dst,
 			}
 		}
 	} else {
+		bits += bitsStride * yoff + xoff;
 		if (and == 0) {
 			while (npt--) {
 				uint32_t pt = *pts++;
-				if (RegionContainsPoint(region,
-							intToX(pt), intToY(pt),
-							NULL)) {
-					BITS *point = bits + intToY(pt) * bitsStride + intToX(pt);
+				int x = intToX(pt) + xorg;
+				int y = intToY(pt) + yorg;
+				if (RegionContainsPoint(region, x, y, NULL)) {
+					BITS *point = bits + y * bitsStride + x;
 					WRITE(point, bxor);
 				}
 			}
 		} else {
 			while (npt--) {
 				uint32_t pt = *pts++;
-				if (RegionContainsPoint(region,
-							intToX(pt), intToY(pt),
-							NULL)) {
-					BITS *point = bits + intToY(pt) * bitsStride + intToX(pt);
+				int x = intToX(pt) + xorg;
+				int y = intToY(pt) + yorg;
+				if (RegionContainsPoint(region, x, y, NULL)) {
+					BITS *point = bits + y * bitsStride + x;
 					RROP(point, band, bxor);
 				}
 			}


More information about the xorg-commit mailing list