Hi all, 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. The client 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 I missing? Cheers, Tomek
_______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
