[Development] QtWayland synchronisation between GL and compositor
tomek.bury at gmail.com
Thu May 26 11:45:16 CEST 2016
Is there any mechanism that that synchronises wl_buffer release by the
compositor to the GL driver's pipeline?
I can't figure out how this synchronisation is supposed to work. My initial
thought was that the sequence of actions will be something like this.
sends a new frame to the compositor, in response the compositor would:
* create EGL image from wl_buffer
* create GL texture from the EGL image
* draw client's buffer somewhere
* CREATE SYNC OBJECT
* destroy texture
* destry image
* swap buffers
and perhaps in a different thread:
* WAIT ON SYNC OBJECT
* release wl_buffer back to the client
But I can't see any sync objects created or waited on.
Simply depending on eglSwapBuffers() can't work, especially for a
tripple-buffered compositor. Let's say GL driver uses buffers called A, B
and C in the compositor process. Buffer A is visible now, B is already
finished in terms of GL API calls and the compositor has just finished
issuing draw commands to buffer C and calls eglSwapBuffers(). In response
the GL/EGL driver has to wait until hardware completes all drawing
associated with buffer B, hide A ,show B and start using A as a new back
buffer. Buffer C can still be in the making.
Releasing client's wl_buffer only because eglSwapBuffers() was called by
the compositor will create a race between compositor's GL driver completing
frame C in a background and client's GL driver reusing it's buffer. What am
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Development