glxsync - explicit frame synchronization sample implementation
michel.daenzer at mailbox.org
Mon Jan 3 17:58:19 UTC 2022
On 2021-12-30 06:20, Michael Clark wrote:
> Dear Mesa Developers,
> I have been using GLFW for tiny cross-platform OpenGL demos for some time but something that has really been bothering me are the visual artifacts when resizing windows. Over the last year or so I have made multiple attempts at solving this issue, digging progressively deeper each time, until spending the last month researching compositor synchronization protocols, reading compositor code, and writing this demo as a prelude to figuring out how one might fix this issue in GLFW or even Chrome.
> I decided that first it might be a good idea to come up with the simplest possible isolated example comprising of a near complete solution without the unnecessary complexity of layering for all of the cross-platform abstractions. It seems to me despite the ease this can be solved with Wayland EGL, it is still useful, primarily for wider compatibility, to be able to package X11 GLX applications, which is the window system that I typically use when targeting Linux with GLFW.
> That brings me to _glxsync_ which is an attempt at creating a minimally correct implementation of explicit frame synchronization using X11, GLX, XSync and the latest compositor synchronization protocols [1,2], tested to work with mutter and GNOME on Xorg or Xwayland.
> - https://github.com/michaeljclark/glxsync/
> _glxsync_ is an X Windows OpenGL demo app using GLX and XSync extended frame synchronization responding to synchronization requests from the compositor in response to configuration changes for window resizes. The demo updates extended synchronization counters before and after frames to signal to the compositor that rendering is in progress so that buffers read by the compositor are complete and matches the size in configuration change events. It also has rudimentary congestion control.
> I have to say there were numerous subtle issues that I found while testing this code on Ubuntu 21.10 XWayland with an Intel Mesa graphics stack and Ubuntu 20.04 LTS Xorg with the NVIDIA proprietary graphics stack, so I have no idea how it will fly with other drivers and am very interested in feedback. There really is not much sample code that I could find that addresses this issue.
> Is there a place in mesa-demos for a frame synchronization demo? I see glsync. Is there a compositor sync example that I may have missed? I can imagine with the addition of WM_MOVERESIZE it could be used for tests. This is pretty much version 0.0.1. i.e. is clean enough to release.
FWIW, GTK4 seems to do a pretty decent job of this (based on casual experimentation with
i.e. not any kind of scientific investigation).
Earthling Michel Dänzer | https://redhat.com
Libre software enthusiast | Mesa and Xwayland developer
More information about the mesa-dev