This is the mail archive of the
cygwin-xfree@cygwin.com
mailing list for the Cygwin XFree86 project.
Re: Internal-wm/rootless observations
- From: Alexander Gottwald <alexander dot gottwald at s1999 dot tu-chemnitz dot de>
- To: cygwin-xfree at cygwin dot com
- Cc: torrey at freedesktop dot org
- Date: Wed, 1 Dec 2004 19:14:05 +0100 (MET)
- Subject: Re: Internal-wm/rootless observations
- References: <Pine.LNX.4.58.0411301626490.25207@odoaker.hrz.tu-chemnitz.de><p06001a00bdd3a28b363c@[216.86.206.219]>
- Reply-to: cygwin-xfree at cygwin dot com
On Wed, 1 Dec 2004, Torrey Lyons wrote:
> I have been away on a long Thanksgiving vacation so I've been slow to
> respond.
No problem. I'm hunting this for some weeks already
> In any case, the 16 bpp modes are problematic but I believe
> we solved issues with them in the rootless code awhile back. The
> fundamental problem is that fb assumes screens are always 32-bit
> aligned. Thus you if a window's pixmap is not 32-bit aligned, fb
> assumes it can still access the word before the start of a drawable's
> data. In rootless mode, where windows are located higgledy-piggledy
> in memory, this is not true.
>
> Rootless solves (or attempts to solve) this problem with the
> SetPixmapBaseToScreen() macro in rootlessCommon.h. The idea is that
> the unaligned window's pixmap is moved backwards in memory to align
> it and then a positive offset it given to fb to indicate where the
> window resides in the pixmap.
>
> If there is an edge case where rootless does not work in 16-bits it
> would be good to track down. This mode is sometimes used on Mac OS X.
Maybe the odd window width is the problem.
Testcase: xterm width 501 pixel
http://www-user.tu-chemnitz.de/~goal/Xming/internalwm.png
setting the with to 502 pixel in the debugger solved the distorted
drawing.
assuming the base was 0x2b00000.
After the window was translated by (0,5) the pixmap base was moved
by 5 * 1002 bytes. In the fb drawing functions the offset was never
correct to 0x2b00000. It was still below that value and the access
an access violation.
I had problems with fbCopyNtoN and fbBlt.
SetPixmapBaseToScreen does:
ptr = 0x2b00000 - 5 * 1002 = 0x2afec6e
This is unaligned -> fixing this
ptr = 0x2afec6e - 2 = 0x2afec6c
fbCopyNtoN does dst + (pbox->y1 + dstYoff) * dstStride
so this is
0x2afec6c + (0 + 5) * 1002 = 0x2affffe -> unaligned and _off pixmap_
bye
ago
--
Alexander.Gottwald@s1999.tu-chemnitz.de
http://www.gotti.org ICQ: 126018723