[Mesa-dev] Time to merge threaded GL dispatch? (aka glthread)

Michel Dänzer michel at daenzer.net
Mon Feb 13 09:07:28 UTC 2017

On 11/02/17 06:36 AM, gregory hainaut wrote:
> On GLX side, I can explain some crashes (didn't debug all neither fail)
> and I suspect there are related to the previous report.
> At the context creation a glthread dispatcher is created and the *TLS*
> variable u_current_table is set with the new gl marshal function.
> If deprecated non-VBO functions are detected
> (glBegin/glVertexPointer/... and others horror from the previous
> century), the code will disable glthread.
> 1/ thread will be deleted
> 2/ u_current_table will be set to the original value
> However u_current_table is local to a thread. So a single thread will
> get the correct dispatcher table. Remaining threads will keep the
> previous marshal thread. If a glthread function is called without the
> thread behind, then BOOM.

If I understand correctly, this scenario can only happen if the
application takes advantage of the GLX_MESA_multithread_makecurrent
extension. I wonder if we shouldn't just stop advertising that extension
with glthread enabled.

Actually, I wonder how well GLX_MESA_multithread_makecurrent works
regardless of glthread. I suspect the assumption of a 1:1 correspondence
between threads and contexts is quite widespread in the Mesa code. Case
in point, the piglit test glx at glx-multithread-texture has been failing
forever with radeonsi, though it passes with llvmpipe. Are there any
real world applications which require GLX_MESA_multithread_makecurrent,
or at least get a significant benefit from it?

Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer

More information about the mesa-dev mailing list