From 0d67a0b48a500b615ff4af7456b1461a38090e48 Mon Sep 17 00:00:00 2001 From: Roman Gilg Date: Mon, 21 Oct 2019 14:56:33 +0200 Subject: [PATCH] Fix non-atomic output init Summary: The initial blank needs to happen after the output device has been initialized to get the current mode size. Also we can't assert in legacy mode on the page flip pending since a page flip can also be the result of a CRTC blank using a different. BUG: 412684 FIXED-IN: 5.17.1 Test Plan: Full Plasma session Reviewers: #kwin, zzag Reviewed By: #kwin, zzag Subscribers: zzag, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D24829 --- plugins/platforms/drm/drm_output.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/platforms/drm/drm_output.cpp b/plugins/platforms/drm/drm_output.cpp index a74371ba5b..b1655a12f7 100644 --- a/plugins/platforms/drm/drm_output.cpp +++ b/plugins/platforms/drm/drm_output.cpp @@ -252,8 +252,6 @@ bool DrmOutput::init(drmModeConnector *connector) if (!initPrimaryPlane()) { return false; } - } else if (!m_crtc->blank()) { - return false; } setInternal(connector->connector_type == DRM_MODE_CONNECTOR_LVDS || connector->connector_type == DRM_MODE_CONNECTOR_eDP); @@ -268,6 +266,12 @@ bool DrmOutput::init(drmModeConnector *connector) } initOutputDevice(connector); + + if (!m_backend->atomicModeSetting() && !m_crtc->blank()) { + // We use legacy mode and the initial output blank failed. + return false; + } + updateDpms(KWayland::Server::OutputInterface::DpmsMode::On); return true; } @@ -745,8 +749,10 @@ void DrmOutput::setWaylandMode() void DrmOutput::pageFlipped() { - Q_ASSERT(m_pageFlipPending); + // In legacy mode we might get a page flip through a blank. + Q_ASSERT(m_pageFlipPending || !m_backend->atomicModeSetting()); m_pageFlipPending = false; + if (m_deleted) { deleteLater(); return;