[Mesa-dev] Mesa + glxPixmaps problems

Michel Dänzer michel at daenzer.net
Fri Aug 27 00:53:36 PDT 2010


On Don, 2010-08-26 at 16:30 +0100, Ian Molton wrote: 
> 
> First, My colleague and I found that the following sequence of events 
> led to a crash:
> 
> context1 = glXCreateNewContext()
> xPixmap = XCreatePixmap ()
> glxPixmap = glXCreatePixmap (dpy, blah, xPixmap, NULL);
> 
> glXMakeCurrent (dpy, glxPixmap, context1);
> context2 = glXCreateNewContext()
> glXDestroyContext(dpy, context2);
> glXMakeCurrent (dpy, glxPixmap, context1);
> **KABOOM**
> 
> It turns out that this is down to a flaw in the garbage collection code, 
> where a test is made to determine if a drawable still exists, and if 
> not, it is dropped from the hashtable (src/glx/glxcmd.c)
> 
> The test is this:
> 
> XGetWindowAttributes(dpy, draw, &xwa); /* dummy request */
> 
> And if an error is caught, it is assumed the drawable is gone, however 
> if draw is a glxPixmap, it appears X does not consider them drawable, 
> and thus the test will ALWAYS return false, resulting in hashtable 
> entries for glxPixmaps being destroyed when they should not.
> 
> Changing this line to:
> 
> XGetWindowAttributes(dpy, pdraw->xDrawable, &xwa); /* dummy request */
> 
> Fixes the problem (by extracting the underlying X drawable from the 
> pdraw struct).

Note that it's XGet*Window*Attributes. This call seems totally
inappropriate for pixmaps and it might be pure luck if it ever does
anything other than fail in that case.


> Sadly, however, it appears that there are many more similar looking bugs 
> in Mesa. Has anyone actually used Mesa to render to glxPixmaps? are 
> there patches available to make this stuff work?

The Mesa demos rendering to GLXPixmaps and gnubg have been working for
me at least basically.


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


More information about the mesa-dev mailing list