Dual-monitor setup broken since commit cfce4b3e: Drop bo/width/height members from struct drmmode_scanout
Since commit cfce4b3e Author: Michel Dänzer mdaenzer@redhat.com Date: Tue Apr 21 18:48:06 2020 +0200
Drop bo/width/height members from struct drmmode_scanout
The pixmap is all we really need.
dual-monitor setup is broken for some configurations. I've an laptop with 1920x1080 native resolution connected via eDP. When adding a second monitor, the screen gets garbled there. The Monitor has a native resolution of 1680x1050 and is connected via HDMI-DVI (monitor is only DVI, laptop has only HDMI). Going back to
commit 680b9a29 Author: Niclas Zeising zeising@daemonic.se Date: Wed Apr 15 10:34:32 2020 +0200
Fix return value check of drmIoctl()
When the drmModeSetCursor2() call was replaced with bare drmIoctl() call in
b344e155, a bug was introduced. With the use of drmModeSetCursor2(),
the return value from drmIoctl() (which calls ioctl()) were mangled, if
they were negative, they were replaced by -errno by a wrapper function
in xf86drMode.c in libdrm. After replacing drmModeSetCursor2() with the
call to drmIoctl(), this mangling no longer happens, and we need to
explicitly check if the call to drmIoctl() fails, which is indicated by
returning -1, and then why it failed, by checking errno.
If the error indicated by errno is EINVAL, then we can't use the
DRM_IOCTL_MODE_CURSOR2 ioctl(), and need to fall back to the
DRM_IOCTL_MODE_CURSOR ioctl().
This bug can manifest itself by an invisible hw cursor on systems where the
DRM_IOCTL_MODE_CURSOR2 is not implemented by the graphics driver.
Signed-off-by: Niclas Zeising <zeising@daemonic.se>
solved this. Attaching a photo from the corrupted screen.