| Summary: | With direct scanout enabled, on latest kernel desktop background image bounces up and down a pixel on secondary monitor | ||
|---|---|---|---|
| Product: | [Plasma] kwin | Reporter: | moichumoigaming |
| Component: | wayland-generic | Assignee: | KWin default assignee <kwin-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | kdedev, nate, richardjacton, xaver.hugl |
| Priority: | NOR | Keywords: | multiscreen, regression |
| Version First Reported In: | 6.5.0 | ||
| Target Milestone: | --- | ||
| Platform: | Other | ||
| OS: | Linux | ||
| Latest Commit: | https://invent.kde.org/plasma/kwin/-/commit/a8215b883f5418084c40cbc20438beb7cabd1d7e | Version Fixed/Implemented In: | |
| Sentry Crash Report: | |||
| Attachments: |
drm_info output when off by 1 pixel
drm_info output when correct |
||
|
Description
moichumoigaming
2025-12-13 01:17:59 UTC
Seems like a kernel regression, and thanks for doing that troubleshooting! Can you report this to the CachyOS folks! First, can you check if it still happens if you set https://invent.kde.org/plasma/kwin/-/wikis/Environment-Variables#kwin_drm_no_direct_scanout to 1? . On the latest kernel, 6.18.1-2-cachyos, with KWIN_DRM_NO_DIRECT_SCANOUT=1, the issue is fixed! Okay, can you remove it again, and then get the drm_info output while the image is mispositioned by that one pixel?
You can do
> sleep 5; drm_info
+ minimized the terminal, or run the command from ssh
Created attachment 187818 [details]
drm_info output when off by 1 pixel
Here is the output when the image is mispositioned by one pixel. Let me know if you would like the output when the image is not mispositioned as well. I attached the output in a txt file, because it is too long to leave in a comment.
Created attachment 187819 [details] drm_info output when correct Just to be proactive, here is the output when the image is correct (not off by 1 pixel). Running the "diff" command on both text files, this difference may be relevant: 1286c1286 < │ ├───"CRTC_Y" (atomic): srange [INT32_MIN, INT32_MAX] = 1 --- > │ ├───"CRTC_Y" (atomic): srange [INT32_MIN, INT32_MAX] = 0 Top line is when off by one pixel, bottom line is when correct. Afaict this is caused by a simple difference in rounding between the renderer vs. direct scanout. Specifically, the output position is rounded in the renderer, but *not* rounded in the direct scanout code path. A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/8606 Git commit a8215b883f5418084c40cbc20438beb7cabd1d7e by Xaver Hugl. Committed on 08/01/2026 at 18:33. Pushed by zamundaaa into branch 'master'. compositor: more consistently map geometries to the pixel grid While the renderer rounds output / viewport position and geometry separately, the direct scanout code so far never snapped output coordinates to the scaled coordinate grid of that output. That difference can in some cases result in visible differences between rendering and direct scanout. This commit aligns the direct scanout code to match the renderer. M +18 -8 src/compositor.cpp https://invent.kde.org/plasma/kwin/-/commit/a8215b883f5418084c40cbc20438beb7cabd1d7e Git commit 4264dafded4cb5db4603a3000853c974c065fba5 by Xaver Hugl. Committed on 08/01/2026 at 18:33. Pushed by zamundaaa into branch 'master'. autotests/integration/drm: add test case for overlays with output scaling Specifially also with an output at a non-zero position, which exposed some issues in the plane coordinate calculations. M +1 -0 autotests/integration/CMakeLists.txt M +37 -17 autotests/integration/drm_test.cpp M +4 -0 autotests/integration/kwin_wayland_test.h M +11 -0 autotests/integration/test_helpers.cpp https://invent.kde.org/plasma/kwin/-/commit/4264dafded4cb5db4603a3000853c974c065fba5 |