[Mesa-dev] [PATCH 3/3] dri3: Add a synchronisation point for texture-from-pixmap

Michel Dänzer michel at daenzer.net
Wed Nov 2 07:16:55 UTC 2016


On 02/11/16 04:13 PM, Chris Wilson wrote:
> On Wed, Nov 02, 2016 at 10:09:26AM +0900, Michel Dänzer wrote:
>> On 22/10/16 07:00 PM, Chris Wilson wrote:
>>> This applies a synchronisation point to GetBuffers() such that binding a
>>> texture-from-pixmap its rendering is serialised with X. This matches the
>>> synchronisation point inside DRI2, but it is also arguable that implied
>>> sync should be explicitly handled by the client by calling glXWaitX()
>>> following the binding of all textures. However, currently glXWaitX()
>>> only operates on the bound drawable and does not actually flush all
>>> Pixmaps associated with the bound context.
>>>
>>> This fixes an issue (output lag) where the compositor calls glXWaitX()
>>> prior to acquiring the damage region from X and binding the
>>> texture-from-pixmap.
>>
>> The X server / driver is responsible for flushing the GPU rendering
>> corresponding to damage events before they are sent to clients. The
>> modesetting driver is known broken in this regard; are there any other
>> setups where this is not happening?
> 
> The issue here is that the serialisation is happening outside of damage
> event. Rough timeline:
> 
> client				X
> 
> setup report-on-non-zero damage
> 				flush + send damage event 
> throttle
> start preparing frame		more rendering
> query damage region
> 				reply with region (no damage event, no flush)

Sounds like the X server / driver needs to flush before sending this
reply to clients as well.


> bind texture_from_pixmap
> 
> Here the damage region is not flushed and so the compositor cancels the
> dirty region for unflushed pixels.
> -Chris
> 


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


More information about the mesa-dev mailing list