[Mesa-dev] [PATCH v3] glx/dri3: Use a separate xcb connection for Present events

Axel Davy axel.davy at ens.fr
Sun Apr 19 22:08:32 PDT 2015


Le 20/04/2015 03:58, Michel Dänzer a écrit :
> On 19.04.2015 06:17, Axel Davy wrote:
>> v3: put the xcb_connection in dri3_screen, instead of dri3_context
> What's the rationale for that? Couldn't that result in the same
> xcb_connection being used in several threads again (for several GLX
> contexts using the same screen)?
>
>
One problem is that the dri3_context structure is not always accessible 
(for example when you bind
the context, dri3_get_buffers is called, but the context is not current 
yet).

It seemed more natural to put the connection in dri3_drawable, and then 
in dri3_screen, since it seemed ok to have several dri3_drawable using 
the same connection as long as the event queue was protected (the 
'special_event' queue makes you listen to the events of one window in 
particular).

But yes, there may still be a problem if you use two threads with same 
connection: in particular if one is waiting for present events while the 
other one is sending a present request. I observed with gallium nine the 
event is lost in that case. The solution was to use another connection 
to send the events.

One way is to have one xcb_connection to listen to present events, which 
can be in dri3_screen, while we could have a second xcb_connection in 
dri3_context, that would be used to send the present requests.


More information about the mesa-dev mailing list