[Mesa-dev] glXMakeCurrent crashes (was: Re: How to obtain OpenGL implementation/driver information?)

tom fogal tfogal at sci.utah.edu
Fri Feb 4 13:57:49 PST 2011


Benoit Jacob wrote:
> ----- Original Message -----
>> On Thu, Feb 3, 2011 at 4:37 PM, Benoit Jacob <bjacob at mozilla.com>
>> wrote:
>>> I'm trying to see how to implement selective
>>> whitelisting/blacklisting of driver versions on X11 (my use case is
>>> to whitelist drivers for Firefox). The naive approach consists in
>>> creating an OpenGL context and calling glGetString(), however that
>>> is not optimal for me, for these reasons:
>>>  * This has been enough to trigger crashes in the past.
>>>
>>> Ideally I want to be able to know the driver name, driver version,
>>> Mesa version, and any other thing that you think may be relevant. I
>>> need to get that information in a fast and safe way.
>>>
>> There is no other way than glGetString if you ever experienced crash
>> with it, it would be because you are doing something terribly wrong
>> like using it without current context.
> 
> It's not glGetString that's crashing, it's glXMakeCurrent.
> 
> I forwarded a bug report from a user, though he's not been able to reproduce since:
> 
>   https://bugs.freedesktop.org/show_bug.cgi?id=32238
> 
> A search in Mesa's bugzilla confirms that I'm not alone:
> 
>   https://bugs.freedesktop.org/show_bug.cgi?id=30557

This latter bug looks like an i915 driver bug, as opposed to a 
MakeCurrent bug.

 > Since the glGetString way will at best be slow, especially if we have
 > to XSync and check for errors, could you consider exposing this
 > information as new glXGetServerString / glXGetClientString strings?

? I don't understand the logic here.

You're hitting a bug in glXCreateContext or MakeCurrent or something 
like that.  So you'd like to add an entire new way to query the same 
information a driver already provides, just to provide an alternate path 
that hopefully doesn't exhibit the bug?

Just fix the bug!  There's no reason for glX extensions to add new 
functions here.

> It seems that such crashes happen only after a X error in glxCreateNewContext. So it may be possible to avoid them by doing XSync and checking for errors. But that makes the process even slower.

I don't think you need to XSync.  Just do:

	glXCreateContext(...)
	glGetString(...)
	glXDestroyContext(...)

in your code.  If that crashes, there's a bug in the implementation, so 
report it and let's get it fixed!

There's really not much of a reason for MakeCurrent anyway, because most 
applications do not have a need for multiple contexts, or if they do 
they only need them in separate threads.

-tom


More information about the mesa-dev mailing list