[Mesa-dev] Mesa + glxPixmaps problems
Ian Molton
ian.molton at collabora.co.uk
Thu Aug 26 08:30:55 PDT 2010
Hi folks,
I've been working on some code that makes extensive use of glxPixmaps
for offscreen rendering, and I've hit a number of problems.
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).
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?
Thanks,
-Ian
More information about the mesa-dev
mailing list