Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
Package: xserver-xorg-video-intel Version: 2:2.13.0-5 Severity: important *** Please type your report below this line *** The xserver-xorg-video-intel display driver does not seem to clip some render operations appropriately to the containing window. To reproduce this bug, open for example a document with "xpdf" and then open the requester to search for a string in the document. Drag this requester over the window boundaries of xpdf. The result is that when "xpdf" repaints its window, the render operation that redraws the boundary of the xpdf main window also renders into the requester, partially overwriting its contents - vertical or horizontal grey lines distort its contents. Apparently, clipping the line drawing or rectangle drawing operation to the visible part of the xpdf main window does not work correctly and renders also into the requester window on top of it instead of clipping to the visible part only. This bug does not go away by disabling the "Tiling" option, or the "Dri2" extension, or the "AIGLX" option of the X server. The old i810 intel driver, however, handled this correctly in the "lenny" distribution. This bug may be a duplicate of 592855,596085,614296,554427,558396. Note that the kernel is already a 2.6.35.11, not the native Debian kernel. However, the bug also appears on with native Debian kernel as well. -- Package-specific info: /var/lib/x11/X.roster does not exist. /var/lib/x11/X.md5sum does not exist. X server symlink status: lrwxrwxrwx 1 root root 13 Aug 25 2007 /etc/X11/X -> /usr/bin/Xorg -rwxr-xr-x 1 root root 1889440 Jan 12 04:12 /usr/bin/Xorg /var/lib/x11/xorg.conf.roster does not exist. VGA-compatible devices on PCI bus: 00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03) /var/lib/x11/xorg.conf.md5sum does not exist. Xorg X server configuration file status: -rw-r--r-- 1 root root 5127 Feb 23 11:32 /etc/X11/xorg.conf Contents of /etc/X11/xorg.conf: # /etc/X11/xorg.conf (xorg X Window System server configuration file) # # This file was generated by dexconf, the Debian X Configuration tool, using # values from the debconf database. # # Edit this file with caution, and see the /etc/X11/xorg.conf manual page. # (Type "man /etc/X11/xorg.conf" at the shell prompt.) # # This file is automatically updated on xserver-xorg package upgrades *only* # if it has not been modified since the last upgrade of the xserver-xorg # package. # # If you have edited this file but would like it to be automatically updated # again, run the following command: # sudo dpkg-reconfigure -phigh xserver-xorg Section "Files" FontPath"unix/:7100" FontPath"unix/:7101" FontPath"/usr/share/fonts/X11/misc" #FontPath "/usr/X11R6/lib/X11/fonts/misc" # path to defoma fonts FontPath"/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" #FontPath "/var/lib/defoma/gs.d/dirs/fonts" EndSection Section "Module" Load"i2c" Load"bitmap" Load"ddc" Load"dri" Load"extmod" Load"freetype" Load"glx" Load"int10" Load"vbe" Load"synaptics" EndSection Section "InputDevice" Identifier "Generic Keyboard" Driver "kbd" Option "SendCoreEvents" "on" Option "XkbRules""xorg" Option "XkbModel""pc105" Option "XkbLayout" "de" Option "XkbVariant" "thor" EndSection Section "InputDevice" Identifier "Configured Mouse" Driver "mouse" Option "SendCoreEvents" "on" Option "Device" "/dev/input/mice" Option "Protocol""ImPS/2" EndSection Section "InputDevice" Identifier "Synaptics Touchpad" Driver "synaptics" Option "SendCoreEvents" "true" Option "Device" "/dev/input/by-path/platform-i8042/serio-4-event-mouse" Option "Protocol""auto-dev" Option "HorizScrollDelta""0" Option "SHMConfig" "on" Option "UpDownScrolling" "off" Option "MaxTapTime" "200" Option "MaxDoubleTapTime""400" Option "FastTaps""on" Option "FingerHigh" "60" Option "PalmDetect" "on" Option "PalmMinWidth""6" Option "LockedDrags" "off" EndSection Section "InputDevice" Identifier "stylus" Driver "wacom" Option "ForceDevice" "ISDV4" Option "Device" "/dev/ttyS0" Option
Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
Hi, Thomas Richter (26/02/2011): > Apparently, clipping the line drawing or rectangle drawing operation > to the visible part of the xpdf main window does not work correctly > and renders also into the requester window on top of it instead of > clipping to the visible part only. > > This bug does not go away by disabling the "Tiling" option, or the > "Dri2" extension, or the "AIGLX" option of the X server. The old > i810 intel driver, however, handled this correctly in the "lenny" > distribution. > > This bug may be a duplicate of 592855,596085,614296,554427,558396. > > Note that the kernel is already a 2.6.35.11, not the native Debian > kernel. However, the bug also appears on with native Debian kernel as > well. (FWIW, since you're talking about the kernel, there's 2.6.37 in sid and 2.6.38rc* in experimental) If that's only an issue on the X intel driver side, you may want to check what happens with src:libdrm and src:xserver-xorg-video-intel rebuilt on squeeze. We plan to provide with backports, as described here: http://pkg-xorg.alioth.debian.org/reference/squeeze-backports.html KiBi. signature.asc Description: Digital signature
Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
Hi Cyril, Thomas Richter (26/02/2011): Apparently, clipping the line drawing or rectangle drawing operation to the visible part of the xpdf main window does not work correctly and renders also into the requester window on top of it instead of clipping to the visible part only. This bug does not go away by disabling the "Tiling" option, or the "Dri2" extension, or the "AIGLX" option of the X server. The old i810 intel driver, however, handled this correctly in the "lenny" distribution. This bug may be a duplicate of 592855,596085,614296,554427,558396. Note that the kernel is already a 2.6.35.11, not the native Debian kernel. However, the bug also appears on with native Debian kernel as well. (FWIW, since you're talking about the kernel, there's 2.6.37 in sid and 2.6.38rc* in experimental) If that's only an issue on the X intel driver side, you may want to check what happens with src:libdrm and src:xserver-xorg-video-intel rebuilt on squeeze. We plan to provide with backports, as described here: http://pkg-xorg.alioth.debian.org/reference/squeeze-backports.html I finally found the bug. It persists in 2.15.0. A patch for the bug is included. The bug is in uxa/uxa-accel.c, in the function uxa_fill_spans(). The problem is that the clipping performed in lines 180ff does not include a check for y2 of the clipped region. The fixed code reads as follows: pbox = REGION_RECTS(pClip); while (nbox--) { if (pbox->y1 > fullY1) break; if (pbox->y1 <= fullY1 && pbox->y2 > fullY1 /*<--bug here */ ) { partX1 = pbox->x1; if (partX1 < fullX1) partX1 = fullX1; partX2 = pbox->x2; if (partX2 > fullX2) partX2 = fullX2; if (partX2 > partX1) { uxa_screen->info->composite(dst_pixmap, 0, 0, 0, 0, partX1 + off_x, fullY1 + off_y, partX2 - partX1, 1); } } pbox++; } The bug is the missing check of "fullY1" against the lower bottom of the clipping rectangle, pbox->y2. Greetings, Thomas -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
On Sun, May 15, 2011 at 20:11:04 +0200, Thomas Richter wrote: > I finally found the bug. It persists in 2.15.0. A patch for the bug > is included. > Thanks for your investigation. > The bug is in uxa/uxa-accel.c, in the function uxa_fill_spans(). The > problem is that the clipping performed in lines 180ff does not > include a check for y2 of the clipped region. The fixed code reads > as follows: > > pbox = REGION_RECTS(pClip); > while (nbox--) { > if (pbox->y1 > fullY1) > break; > if (pbox->y1 <= fullY1 && pbox->y2 > fullY1 /*<--bug here */ ) { > partX1 = pbox->x1; > if (partX1 < fullX1) > partX1 = fullX1; > > partX2 = pbox->x2; > if (partX2 > fullX2) > partX2 = fullX2; > > if (partX2 > partX1) { > uxa_screen->info->composite(dst_pixmap, > 0, 0, 0, 0, > partX1 + off_x, > fullY1 + off_y, > partX2 - partX1, 1); > } > } > pbox++; > } > > The bug is the missing check of "fullY1" against the lower bottom of > the clipping rectangle, pbox->y2. > Asked upstream, one question for you: 21:16 < ickle> pbox->y2 < pbox->y1 is an invalid rect 21:18 < ickle> the previous line should be pbox->y1 >= fullY1 break 21:18 < ickle> can you ask if it appears to be just an off-by-one? ie what are the values of pbox->y1 and pbox->y2? Cheers, Julien -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
On Sun, May 15, 2011 at 21:34:26 +0200, Thomas Richter wrote: > On 15.05.2011 21:21, Julien Cristau wrote: > >Asked upstream, one question for you: > >21:16< ickle> pbox->y2< pbox->y1 is an invalid rect > >21:18< ickle> the previous line should be pbox->y1>= fullY1 break > >21:18< ickle> can you ask if it appears to be just an off-by-one? > > > >ie what are the values of pbox->y1 and pbox->y2? > > Sorry, I don't quite get the question. All what the code does is > that it checks whether the current line (fullY1) is between the top > edge of the current rectangle in the damage region (pbox->y1<= > fullY1) and above > the bottom edge of the damage region (pbox->y2> fullY1). It is > probably written in a somewhat unconventional way. A nicer way to > put it is: > > fullY1 >= pbox->y1 && fullY1 < pbox->y2 > > Thus, line at or below the top edge, and above the bottom edge. A > rectangle doesn't have to be invalid to have fullY1 >= pbox->y1 and > fullY1 < pbox->y2. I'm not quite clear what the break is used for, > but > I assume that the rectangles are ordered by increasing Y coordinate, and > that the code can terminate early if it detects a rectangle in the > damage region that has a top edge below the line. > cc:ing Chris so he can answer directly. Cheers, Julien -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
On Sun, 15 May 2011 21:51:59 +0200, Julien Cristau wrote: > On Sun, May 15, 2011 at 21:34:26 +0200, Thomas Richter wrote: > > Sorry, I don't quite get the question. All what the code does is > > that it checks whether the current line (fullY1) is between the top > > edge of the current rectangle in the damage region (pbox->y1<= > > fullY1) and above > > the bottom edge of the damage region (pbox->y2> fullY1). It is > > probably written in a somewhat unconventional way. A nicer way to > > put it is: > > > > fullY1 >= pbox->y1 && fullY1 < pbox->y2 > > > > Thus, line at or below the top edge, and above the bottom edge. A > > rectangle doesn't have to be invalid to have fullY1 >= pbox->y1 and > > fullY1 < pbox->y2. I'm not quite clear what the break is used for, > > but > > I assume that the rectangles are ordered by increasing Y coordinate, and > > that the code can terminate early if it detects a rectangle in the > > damage region that has a top edge below the line. > > The clip rectangles are YX banded, so that if we see a rectangle which starts below the point of interest, we know all further rectangles are below the point. The question that remains is then does this rectangle, which we know has to start above (or equal to) the point extend beyond the point. So we need to test: diff --git a/uxa/uxa-accel.c b/uxa/uxa-accel.c index 0650ac2..56f219c 100644 --- a/uxa/uxa-accel.c +++ b/uxa/uxa-accel.c @@ -178,7 +178,7 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n, if (pbox->y1 > fullY1) break; - if (pbox->y1 <= fullY1) { + if (pbox->y2 > fullY1) { partX1 = pbox->x1; if (partX1 < fullX1) partX1 = fullX1; which is probably what you said originally. If you send a patch along these lines, I will gladly apply it. And if you have a test case to hand, better yet -- collecting examples of where I goofed to prevent repeating my mistakes... Thanks, -Chris -- Chris Wilson, Intel Open Source Technology Centre -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org