--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: xpdf causes screen corruptions when another window is dragged over its window
- From: wzab <wzab@ise.pw.edu.pl>
- Date: Tue, 17 May 2011 17:18:24 +0200
- Message-id: <20110517151824.GA5926@wzab.nasz.dom>
Package: xpdf
Version: 3.02-12
Severity: important
When I drag another window in front of xpdf window, the other windows
gets corrupted (see attached screenshots).
I've noticed this problem in two machines with Intel
chipsets (82865G and 945GM/GMS/GME) so it may be associated with
known problem with Intel driver (e.g.
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=596085 ).
Two other machines with "[SiS] 65x/M650/740 PCI/AGP VGA" and
"nVidia Corporation NV18 [GeForce4 MX4000]" chipsets didn't show such problem).
Anyway with Linux kernel < 2.6.38 the problem on Intel machines occures
only with xpdf, so it must be associated with particular way in which
xpdf interacts with the Xserver.
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (990, 'testing'), (50, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.37.3 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=pl_PL.utf8, LC_CTYPE=pl_PL.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages xpdf depends on:
ii lesstif2 1:0.95.2-1 OSF/Motif 2.1 implementation relea
ii libc6 2.13-4 Embedded GNU C Library: Shared lib
ii libgcc1 1:4.6.0-2 GCC support library
ii libpoppler5 0.12.4-1.2 PDF rendering library
ii libstdc++6 4.6.0-2 The GNU Standard C++ Library v3
ii libx11-6 2:1.4.3-1 X11 client-side library
ii libxt6 1:1.1.1-1 X11 toolkit intrinsics library
Versions of packages xpdf recommends:
ii gsfonts-x11 0.22 Make Ghostscript fonts available t
ii poppler-data 0.4.4-1 Encoding data for the poppler PDF
ii poppler-utils 0.12.4-1.2 PDF utilitites (based on libpopple
xpdf suggests no packages.
-- no debconf information
--- End Message ---
--- Begin Message ---
- To: Chris Wilson <chris@chris-wilson.co.uk>, 615197-done@bugs.debian.org
- Cc: Thomas Richter <thor@math.tu-berlin.de>
- Subject: Re: Bug#615197: xserver-xorg-video-intel: Screen corruptions to due insufficient clipping
- From: Julien Cristau <jcristau@debian.org>
- Date: Sun, 25 Sep 2011 16:58:19 +0200
- Message-id: <20110925145818.GA8993@radis.liafa.jussieu.fr>
- In-reply-to: <72a37e$j5cdjb@orsmga002.jf.intel.com>
- References: <4D68DB54.3060907@math.tu-berlin.de> <11853_1298719558_4D68E345_11853_76052_1_20110226112547.GP16401@debian.org> <4DD01738.5090303@math.tu-berlin.de> <29710_1305487311_4DD027CF_29710_2989_1_20110515192141.GZ2809@radis.liafa.jussieu.fr> <4DD02AC2.4080602@math.tu-berlin.de> <20110515195159.GA2809@radis.liafa.jussieu.fr> <72a37e$j5cdjb@orsmga002.jf.intel.com>
Version: 2:2.16.0-1
On Mon, May 16, 2011 at 09:52:13 +0100, Chris Wilson wrote:
> On Sun, 15 May 2011 21:51:59 +0200, Julien Cristau <jcristau@debian.org> 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...
>
That code was changed in 2.16, so I think this should be fixed, closing.
Cheers,
Julien
--- End Message ---