1. 28 Apr, 2022 1 commit
  2. 21 Mar, 2022 1 commit
  3. 17 Feb, 2022 1 commit
  4. 27 Jan, 2022 1 commit
  5. 17 Jan, 2022 1 commit
  6. 14 Jan, 2022 1 commit
  7. 04 Jan, 2022 3 commits
  8. 03 Jan, 2022 1 commit
    • Xaver Hugl's avatar
      backends/drm: improve dmabuf feedback · 93d51270
      Xaver Hugl authored
      Instead of only allowing the current format, send the default tranches modified
      to only contain formats and modifiers suitable for scanout.
      In order to not fail when we can't do direct scanout with a given format
      (because that may require a modeset, which we don't allow), keep a blacklist
      of attempted formats and modifiers for the current client.
      93d51270
  9. 25 Dec, 2021 1 commit
    • Xaver Hugl's avatar
      backends/drm: deep color support · f2b29e35
      Xaver Hugl authored
      This commit makes 10 bits per color channel the default color depth, which
      should reduce banding on outputs that support color formats with more than
      8 bits per color channel. In order to support this the commit also removes
      the dependency of the EglGbmBackend on a specific format and EglConfig and
      instead makes those per-Output properties.
      f2b29e35
  10. 14 Dec, 2021 1 commit
  11. 13 Dec, 2021 1 commit
  12. 10 Dec, 2021 1 commit
    • Vlad Zahorodnii's avatar
      backends/drm: Fix stuck cursors · eb080395
      Vlad Zahorodnii authored
      Currently, if you move the cursor really fast between two outputs, there
      may be stuck cursor on the previous output.
      
      We need to query the old cursor visibility status before updating the
      cursor position, otherwise the drm backend may not schedule an update to
      move the cursor offscreen.
      eb080395
  13. 09 Dec, 2021 2 commits
  14. 08 Dec, 2021 2 commits
    • Xaver Hugl's avatar
      backends/drm: refactor DrmPipeline · 7e2bd5a7
      Xaver Hugl authored
      Split out more things from commitPipelines, and split out the legacy stuff
      into a separate file
      7e2bd5a7
    • Xaver Hugl's avatar
      backends/drm: port cursors to atomic · 494ef1c9
      Xaver Hugl authored
      The cursor being set out-of-band with atomic commits creates problems
      because it can create false positive for atomic tests, if the cursor
      state gets changed in between an atomic test and its matching commit.
      
      This commit also ports the cursor to a swapchain instead of only one
      image. This is not strictly required but may prevent artifacts and
      will be needed for future optimisations.
      494ef1c9
  15. 03 Dec, 2021 1 commit
    • Vlad Zahorodnii's avatar
      backends/drm: Mark frame failed if presenting null buffer · 2b628ea4
      Vlad Zahorodnii authored
      If eglSwapBuffers() fails, there won't be a buffer and so we need to
      mark the frame as failed. Otherwise, the screen can be frozen.
      
      eglSwapBuffers() can fail if some effect calls makeOpenGLContext()
      between RenderBackend::beginFrame() and RenderBackend::endFrame(), which
      is the case with the zoom effect. It can set wrong draw surface in
      ZoomEffect::recreateTexture()
      
      BUG: 445412
      2b628ea4
  16. 30 Nov, 2021 1 commit
    • Xaver Hugl's avatar
      backends/drm: don't cache formats · f097440e
      Xaver Hugl authored
      While it could be useful with tiled displays, the isFormatSupported and
      supportedModifier functions can be called before prepareModeset, so where
      m_formats is still empty. Additionally they're neither in a hot path nor
      performance critical.
      f097440e
  17. 25 Nov, 2021 2 commits
    • Xaver Hugl's avatar
      backends/drm: only set pageflipPending when wanted · 3a5cb1c4
      Xaver Hugl authored
      It shouldn't be set when the pipeline wants to be disabled. Whenever that
      happens it will wait forever for the pageflip that doesn't come
      3a5cb1c4
    • Vlad Zahorodnii's avatar
      backends/drm: Notify about failed frames if there are actually pending frames · 9f93358b
      Vlad Zahorodnii authored
      In case a modeset needs to be performed, the drm backend will test all
      pipelines to ensure that new mode won't cause any bandwidth issues on
      other outputs, etc.
      
      To do that, it may delay presenting frames. If the new configuration
      doesn't work, it needs to notify about failed frames.
      
      However, the relevant code that notifies the RenderLoop about failed
      atomic commits doesn't check if there's actually a pending modeset
      present.
      
      When switching between VTs, systemd can revoke master permissions from
      kwin. To make things even more trickier, kwin can try to present a frame
      in that short time span.
      9f93358b
  18. 22 Nov, 2021 2 commits
  19. 16 Nov, 2021 1 commit
  20. 12 Nov, 2021 1 commit
    • Xaver Hugl's avatar
      backends/drm,wayland: require gbm · c68f7f13
      Xaver Hugl authored
      The ifdefs for have_gbm obfuscate the code unnecessarily - the drm backend
      is not a great experience with qpainter, so in practice noone should ship
      it without gbm anyways.
      c68f7f13
  21. 10 Nov, 2021 1 commit
    • Xaver Hugl's avatar
      platforms/drm: kill the EglStreams backend · bad57521
      Xaver Hugl authored
      The proprietary NVidia driver now supports gbm, which vastly improves the
      user experience. For older devices that will not get gbm support dropping
      EglStreams will likely not have a big impact as it has several session breaking
      issues anyways.
      
      By removing the backend a lot of logic can be simplified, most notably multi-gpu.
      bad57521
  22. 09 Nov, 2021 6 commits
    • Xaver Hugl's avatar
    • Vlad Zahorodnii's avatar
      platforms/drm: Move ownership of mode blob to connector mode · 02bb276e
      Vlad Zahorodnii authored and Xaver Hugl's avatar Xaver Hugl committed
      The main motivation behind this change is to move management of drm
      blobs out of property wrappers in specialized wrappers to simplify state
      management with blobs.
      
      Connector mode blobs are created on demand.
      02bb276e
    • Xaver Hugl's avatar
      platforms/drm: improve logging a bit · 1b5009ae
      Xaver Hugl authored
      Only print the flags once for all pipelines and include changed unused objects
      as well.
      1b5009ae
    • Xaver Hugl's avatar
      platforms/drm: disable unused resources on modesets · 7283c98f
      Xaver Hugl authored
      When we switch CRTCs it can happen that a CRTC would stay enabled yet has
      no connectors anymore. In this case the kernel may reject our atomic commit,
      which would cause the modeset to fail. To counteract that, properly disable
      unused drm objects
      7283c98f
    • Xaver Hugl's avatar
      platforms/drm: delay presentation for modesets · a07aae82
      Xaver Hugl authored
      Currently KWin is combining modesets with presentation, which causes problems
      when multiple monitors are used and crtcs need to be switched around, because
      taking away a CRTC from another output causes the driver to disable the
      other output. In order to avoid such problems, delay presentation until
      all pipelines are ready to present and then do a modeset with a single atomic
      commit. To process the resulting page flip events properly this commit also
      ports KWin to page_flip_handler2 and changes how the pageFlipped and
      notifyFrameFailed signals are processed.
      a07aae82
    • Xaver Hugl's avatar
      platforms/drm: more dynamic crtc assignment · e2a08638
      Xaver Hugl authored
      Hardware constraints limit the number of crtcs and which connector + crtc
      combinations can work together. The current code is searching for working
      combinations when a hotplug happens but that's not enough, it also needs
      to happen when the user enables or disables outputs and when modesets are
      done, and the configuration change needs to be applied with a single atomic
      commit.
      
      This commit removes the hard dependency of DrmPipeline on crtcs by moving
      the pending state of outputs from the drm objects to DrmPipeline itself,
      which ensures that it's independent from the set of drm objects currently
      used. It also changes requests from KScreen to be applied truly atomically.
      e2a08638
  23. 02 Nov, 2021 1 commit
    • Vlad Zahorodnii's avatar
      Move platform backends to backends directory · d89501a0
      Vlad Zahorodnii authored
      This improves file organization in kwin by putting backends in a single
      directory.
      
      It also makes easier to discover kwin's low level components for new
      contributors because the plugins directory may come as the last place to
      look for. When one hears "plugin", the first thing that comes to mind is
      regular plugins, not low level backends.
      d89501a0
  24. 20 Oct, 2021 1 commit
  25. 19 Oct, 2021 1 commit
  26. 18 Oct, 2021 2 commits
  27. 07 Oct, 2021 1 commit
  28. 01 Oct, 2021 1 commit