[Mesa-dev] [RFC 0/1] Port dri2GetBuffersWithFormat/dri2GetBuffers to XCB
Michel Dänzer
michel at daenzer.net
Thu Apr 27 08:11:30 UTC 2017
On 26/04/17 07:06 PM, Gregory Hainaut wrote:
> On 4/26/17, Michel Dänzer <michel at daenzer.net> wrote:
>> On 26/04/17 05:07 PM, Gregory Hainaut wrote:
>>> Following the discussion in "[PATCH v4 0/3] asynchronous pbo transfer with
>>> glthread"
>>>
>>> It will help apps that are ported to XCB.
>>
>> How so?
>
> I didn't test it (yet). But I think it is safe to call XCB from
> various threads. However if one thread use XLIB, you're screwed (to
> access the same display).
>
>>
>>> But Xlib (without XInitThread) apps will still crash when glthread is
>>> enabled on DRI2.
>>
>> Do the crashes provide information about where glthread is still calling
>> libX11 APIs?
> I far from an expert so maybe I misunderstand some stuffs. So, as far
> as I understand XLIB and XCB are mixed together. They likely share the
> same queues.
>
> Let's say you have an app that does Xlib operations on display (for
> example XGetGeometry). As XInitThread wasn't called, you're in YOLO
> mode.
>
> glthread (gallium->DRI2) will do operation (GetBuffer) on the same
> display through an XCB connection but it is still the same display.
> XCB might lock it properly but Xlib call is lock-free.
I was hoping the lower XCB layer could be used in a thread-safe way even
if the higher libX11 layer isn't. But maybe that's just wishful thinking.
> What happen in my case is that XCB reply was corrupted (count was huge
> which lead to memory bad access). My guess was that Xlib calls from
> app were the culprit.
It would be nice to get some certainty, e.g. via the valgrind
helgrind/drd tools.
>>> There are 3 remaining possibilities
>>> * Won't fix. DRI3/XCB is the future
>>> * Enable thread safe Xlib by default (which would make sense in multicore
>>> CPU era)
>>> * Track gl call that will use X11 API to force a sync
>>
>> Until either of the latter two happens, glthread should only be enabled
>> with DRI3.
> On one hand, I don't like crash neither but in other hand, it would be
> nice to keep glthread for application that call XInitThread properly.
We could check dpy->lock_fns and only enable glthread with DRI2 if it's
non-NULL. If it's NULL and the environment variable mesa_glthread=true
is set, we could print a warning to stderr explaining that glthread
can't be enabled because the application didn't call XInitThreads.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-dev
mailing list