22a441e071
Summary:
The NVIDIA implementation of glXSwapBuffers will, by default, queue up
to two frames for presentation before blocking. KWin's compositor,
however, assumes that calls to glXSwapBuffers will always block until
the next vblank when rendering double buffered. This assumption isn't
valid, as glXSwapBuffers is specified as being an implicit glFlush,
not an implicit glFinish, and so it isn't required to block. When this
assumption is violated, KWin's frame timing logic will
break. Specifically, there will be extraneous calls to
setCompositeTimer with a waitTime of 0 after the non-blocking buffer
swaps, dramatically reducing desktop responsiveness. To remedy this,
a call to glXWaitGL was added by Thomas Luebking after glXSwapBuffers
in 2015 (see bug 346275, commit
|
||
---|---|---|
.. | ||
CMakeLists.txt | ||
edge.cpp | ||
edge.h | ||
effects_mouse_interception_x11_filter.cpp | ||
effects_mouse_interception_x11_filter.h | ||
effects_x11.cpp | ||
effects_x11.h | ||
glx_context_attribute_builder.cpp | ||
glx_context_attribute_builder.h | ||
glxbackend.cpp | ||
glxbackend.h | ||
logging.cpp | ||
logging.h | ||
non_composited_outline.cpp | ||
non_composited_outline.h | ||
overlaywindow_x11.cpp | ||
overlaywindow_x11.h | ||
screenedges_filter.cpp | ||
screenedges_filter.h | ||
screens_xrandr.cpp | ||
screens_xrandr.h | ||
sync_filter.cpp | ||
sync_filter.h | ||
windowselector.cpp | ||
windowselector.h | ||
x11.json | ||
x11_decoration_renderer.cpp | ||
x11_decoration_renderer.h | ||
x11_platform.cpp | ||
x11_platform.h | ||
x11cursor.cpp | ||
x11cursor.h | ||
xfixes_cursor_event_filter.cpp | ||
xfixes_cursor_event_filter.h | ||
xinputintegration.cpp | ||
xinputintegration.h |