EXA classic problem with Xv

Michel Dänzer michel at daenzer.net
Thu Jun 10 04:16:00 PDT 2010

On Don, 2010-06-10 at 12:54 +0200, Yves De Muyter wrote: 
> Here you find the code:
> http://code.google.com/p/gma500/source/browse/trunk/xserver-xorg-video-psb/xserver-xorg-video-psb-0.32.1/src/psb_video.c
> The problem is on line 688.
> The code tries to find the pointer to the buffer and the offset, and if
> it doesnt find it, it calls exaMoveInPixmap().
> I don't like the 'while' thing personally but I didn't write that code
> and are willing to change it, that's not the problem.

FWIW I don't think it makes sense to try exaMoveInPixmap more than once.

> The problem is that exaMoveInPixmap() doesnt do anything if the pixmap
> has a score that is 'PINNED', and that's the case here...

As the pixmap was retrieved from a window, I *think* the only way it can
be pinned is if it's the screen pixmap (i.e. you're not using a
compositing manager, or it unredirected the fullscreen window). In that
case I think the problem is actually a spurious failure of
psbExaGetSuperOffset(), possibly due to an issue in exaGetPixmapOffset()
- there's recently been some discussion about that with drivers like psb
or geode.

Of course these issues should be fixed, but in the long term it might
make sense for the psb driver to use the EXA 'mixed' or 'driver' pixmap
memory allocation scheme rather than the 'classic' one in rather special
ways prone to breakage.

Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer

More information about the xorg mailing list