Hi,

I sent this message on 29 December, but I guess all the intel driver developers 
were busy with 
(well-earned) Yuletide relaxing. Here it is again with the graphics-related 
output from lspci 
added...

I recently upgraded from version 2.15.0 of the intel driver to 2.17.0 but found 
that with the latter 
a trail of 'droppings' was left in the otherwise blank areas of a konqueror 
window when an icon was 
dragged around in the window, under kde-3.5.10. The 'droppings' can be cleaned 
up by refreshing the 
window. Investigation showed that the fault is also present in 2.16.0. I cloned 
the git archive and 
through bisection identified the change that introduced the problem as:

commit ace324e4aa27effdd621156eec03f3f87b610732
Author: Eric Anholt <[email protected]>
Date:   Tue May 31 23:13:18 2011 -0700

    uxa: Simplify BLT solid acceleration for spans filling by only clipping 
once.

Due to subsequent changes that patch cannot be reverted but the attached patch 
reverts the 2.17.0 
driver to its old (2.15.0) behaviour  and eliminates the 'droppings'.

lspci -vvv gives:

00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset 
Integrated Graphics 
Controller (rev 07)(prog-if 00 [VGA controller])
        Subsystem: Hewlett-Packard Company Device 3069
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- 
DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- 
<MAbort- >SERR- 
<PERR- INTx-
        Latency: 0
        Interrupt: pin A routed to IRQ 16
        Region 0: Memory at d0000000 (64-bit, non-prefetchable) [size=4M]
        Region 2: Memory at c0000000 (64-bit, prefetchable) [size=256M]
        Region 4: I/O ports at 4110 [size=8]
        Expansion ROM at <unassigned> [disabled]
        Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit-
                Address: 00000000  Data: 0000
        Capabilities: [d0] Power Management version 3
                Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: i915

00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset 
Integrated Graphics Controller 
(rev 07)
        Subsystem: Hewlett-Packard Company Device 3069
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- 
DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- 
<MAbort- >SERR- 
<PERR- INTx-
        Latency: 0
        Region 0: Memory at d2400000 (64-bit, non-prefetchable) [size=1M]
        Capabilities: [d0] Power Management version 3
                Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-

Happy to test a better patch that anyone cooks up.

Chris

-- 
The more I see, the more I know. The more I know, the less I understand. 
Changing Man - Paul Weller
--- xf86-video-intel-2.17.0/uxa/uxa-accel.c.droppings	2011-08-29 10:21:25.000000000 +0100
+++ xf86-video-intel-2.17.0/uxa/uxa-accel.c	2011-12-19 22:50:16.000000000 +0000
@@ -45,9 +45,11 @@ uxa_fill_spans(DrawablePtr pDrawable, GC
 	uxa_screen_t *uxa_screen = uxa_get_screen(screen);
 	RegionPtr pClip = fbGetCompositeClip(pGC);
 	PixmapPtr dst_pixmap;
-	BoxPtr pbox;
+	BoxPtr pextent, pbox;
 	int nbox;
-	int x1, x2, y;
+	int extentX1, extentX2, extentY1, extentY2;
+	int fullX1, fullX2, fullY1;
+	int partX1, partX2;
 	int off_x, off_y;
 
 	if (uxa_screen->swappedOut || uxa_screen->force_fallback)
@@ -70,32 +72,58 @@ uxa_fill_spans(DrawablePtr pDrawable, GC
 						 pGC->fgPixel))
 		goto fallback;
 
+	pextent = REGION_EXTENTS(pGC->screen, pClip);
+	extentX1 = pextent->x1;
+	extentY1 = pextent->y1;
+	extentX2 = pextent->x2;
+	extentY2 = pextent->y2;
 	while (n--) {
-		x1 = ppt->x;
-		y = ppt->y;
-		x2 = x1 + (int)*pwidth;
+		fullX1 = ppt->x;
+		fullY1 = ppt->y;
+		fullX2 = fullX1 + (int)*pwidth;
 		ppt++;
 		pwidth++;
 
-		nbox = REGION_NUM_RECTS(pClip);
-		pbox = REGION_RECTS(pClip);
-		while (nbox--) {
-			if (pbox->y1 > y || pbox->y2 <= y)
-				continue;
+		if (fullY1 < extentY1 || extentY2 <= fullY1)
+			continue;
 
-			if (x1 < pbox->x1)
-				x1 = pbox->x1;
+		if (fullX1 < extentX1)
+			fullX1 = extentX1;
 
-			if (x2 > pbox->x2)
-				x2 = pbox->x2;
+		if (fullX2 > extentX2)
+			fullX2 = extentX2;
 
-			if (x2 <= x1)
-				continue;
+		if (fullX1 >= fullX2)
+			continue;
 
+		nbox = REGION_NUM_RECTS(pClip);
+		if (nbox == 1) {
 			(*uxa_screen->info->solid) (dst_pixmap,
-						    x1 + off_x, y + off_y,
-						    x2 + off_x, y + 1 + off_y);
-			pbox++;
+						    fullX1 + off_x,
+						    fullY1 + off_y,
+						    fullX2 + off_x,
+						    fullY1 + 1 + off_y);
+		} else {
+			pbox = REGION_RECTS(pClip);
+			while (nbox--) {
+				if (pbox->y1 <= fullY1 && fullY1 < pbox->y2) {
+					partX1 = pbox->x1;
+					if (partX1 < fullX1)
+						partX1 = fullX1;
+					partX2 = pbox->x2;
+					if (partX2 > fullX2)
+						partX2 = fullX2;
+					if (partX2 > partX1) {
+						(*uxa_screen->info->
+						solid) (dst_pixmap,
+							partX1 + off_x,
+							fullY1 + off_y,
+							partX2 + off_x,
+							fullY1 + 1 + off_y);
+					}
+				}
+				pbox++;
+			}
 		}
 	}
 	(*uxa_screen->info->done_solid) (dst_pixmap);
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to