Benoit Jacob wrote:
----- Original Message -----
On Thu, Feb 3, 2011 at 4:37 PM, Benoit Jacob <bja...@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
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev