D21808: [platformx/X11] Disable VSync for QtQuick Windows

Erik Kurzinger <[email protected]>
Newsgroups gmane.comp.kde.devel.kwin
Message-ID <[email protected]>
ekurzinger created this revision.
ekurzinger added a reviewer: KWin.
ekurzinger added a project: KWin.
Herald added a subscriber: kwin.
ekurzinger requested review of this revision.

REVISION 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.
  
  Fixes BUG: 406180

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 0c1831178540462da31fd7a4b6d2e446bc84498b
  resolving a bug that prevented the changing the swap interval.

REPOSITORY
  R108 KWin

REVISION DETAIL
  https://phabricator.kde.org/D21808

AFFECTED FILES
  main_x11.cpp

To: ekurzinger, #kwin
Cc: kwin, #kwin, LeGast00n, jraleigh, GB_2, mkulinski, ragreen, jackyalcine, Pitel, iodelay, bwowk, ZrenBot, ngraham, alexeymin, himcesjf, lesliezhai, ali-mohamed, hardening, jensreuterberg, abetts, sebas, apol, mart
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.