[Mesa-dev] [PATCH v3 0/4] Disable glthread if libX11 isn't thread-safe

gregory hainaut gregory.hainaut at gmail.com
Fri May 5 16:58:04 UTC 2017


On Fri, 5 May 2017 17:45:01 +0200
Axel Davy <axel.davy at normalesup.org> wrote:

> Hi,
> 
> There should be very few X11 calls while rendering (basically only at 
> the beginning or end of a frame).
> 
> Why not just always run these calls in the main thread (and wait for 
> glthread work to finish) ?
> 
> That's basically what we do for gallium nine.
> 
> Yours,
> 
> Axel

Hello Axel,

Yes it is another possibility. It would requires to track gl calls that end up in X11.
I'm not sure if there is an easy way to list all those gl functions. There are at least the 
draw calls and maybe the clear operations. Besides I'm afraid that we will need to handle
various corner cases of the OpenGL API. It is doable but likely more complicated.

There is also the Nvidia way, i.e. forces the driver to XInitThreads X11. I think it
can be implemented with the help of constructor attribute.

Cheers,
Gregory

 
> On 05/05/2017 17:37, Gregory Hainaut wrote:
> > Hello Mesa developers,
> >
> > Following the discussion from
> > https://lists.freedesktop.org/archives/mesa-dev/2017-April/153137.html
> >
> > A check was added to ensure that X11 display can be locked. It should be enough
> > to ensure thread safety between X11 and glthread.
> >
> > I also did the check on DRI3 as I'm not 100% sure that it is really thread safe.
> >
> > ------------------------------------
> >
> > v2: based on Nicolai/Matt reviews
> > Add a check on DRI extension version
> > Use C comments :)
> >
> > v3: based on Emil reviews
> > Split the initial first patch into 3 sub patches dri extension / glx / egl
> > Improve error message
> > Improve code readability
> > Just include libX11 on EGL protected by ifdef
> >
> > Thanks you for all the review comments.
> >
> > Best regards,
> >
> > Gregory Hainaut (4):
> >    dri: Extend __DRIbackgroundCallableExtensionRec to include a callback
> >      that checks for thread safety
> >    glx: implement __DRIbackgroundCallableExtension.isThreadSafe
> >    egl: implement __DRIbackgroundCallableExtension.isThreadSafe
> >    glthread/gallium: require safe_glthread to start glthread
> >
> >   include/GL/internal/dri_interface.h          | 11 +++++++++++
> >   src/egl/drivers/dri2/egl_dri2.c              | 28 +++++++++++++++++++++++++++-
> >   src/gallium/state_trackers/dri/dri_context.c | 21 +++++++++++++++++----
> >   src/glx/dri2_glx.c                           | 15 ++++++++++++++-
> >   src/glx/dri3_glx.c                           | 15 ++++++++++++++-
> >   5 files changed, 83 insertions(+), 7 deletions(-)
> >  
> 


More information about the mesa-dev mailing list