Diffusion KWin 0124b1ef191f

[platforms/X11] Disable VSync for QtQuick Windows

Authored by ekurzinger on Jun 19 2019, 2:56 PM.

Description

[platforms/X11] Disable VSync for QtQuick Windows

Summary:
QtQuick windows created by KWin currently use the default swap interval
of 1, meaning buffer swaps will block until vblank. However, this
results in a problematic interaction on hybrid graphics systems running
the proprietary NVIDIA driver. VSync on such setups relies on a system
called "PRIME synchronization", where the xf86-video-modesetting driver
controlling the display will signal the NVIDIA driver when vblank has
occurred. The issue is that it will only do so if there has been damage
to the screen.

So, when KWin creates a QtQuick window, compositing will stop waiting on
the window to render, therefore no damage to the screen will occur. But
this means that no vblank notifications will be delivered to the NVIDIA
driver, so the glXSwapBuffers call by the QtQuick window will block
perpetually. The end result is a freeze of the desktop.

To get around this, we can simply disable vsync for QtQuick windows by
setting the swap interval for the default QSurfaceFormat to 0. Since
they are redirected, this shouldn't cause any tearing.

BUG: 406180
FIXED-IN: 5.16.2

Test Plan:
Using the proprietary NVIDIA driver on a hybrid graphics system, with
PRIME synchronization enabled (see
https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/),
perform any action causing a QtQuick window to be created by KWin, for
example, triggering the application switcher dialogue with alt + tab.

Ensure the desktop does not temporarily freeze.

Note, this required a Qt build that includes commit
https://code.qt.io/cgit/qt/qtbase.git/commit/?id=0c1831178540462da31fd7a4b6d2e446bc84498b
resolving a bug that prevented the changing the swap interval.

Reviewers: KWin, davidedmundson, zzag

Reviewed By: KWin, davidedmundson, zzag

Subscribers: zzag, romangg, alexeymin, kwin

Tags: KWin

Differential Revision: https://phabricator.kde.org/D21808

Details

Committed
ekurzingerJun 19 2019, 3:06 PM
Reviewer
KWin
Differential Revision
D21808: [platforms/X11] Disable VSync for QtQuick Windows
Parents
R108:105ae7bb7f9d: Update version number for 5.16.1 GIT_SILENT
Branches
Unknown
Tags
Unknown