From 9f4a1433e416944fa26b8580eaad4a8f48fd61d8 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Tue, 26 Jan 2021 21:23:44 +0100 Subject: [PATCH] Also initialize properties when not using AMS BUG: 431981 --- autotests/drm/objecttest.cpp | 6 +++--- plugins/platforms/drm/drm_gpu.cpp | 20 +++++++++---------- plugins/platforms/drm/drm_object.h | 2 +- .../platforms/drm/drm_object_connector.cpp | 2 +- plugins/platforms/drm/drm_object_connector.h | 2 +- plugins/platforms/drm/drm_object_crtc.cpp | 4 ++-- plugins/platforms/drm/drm_object_crtc.h | 2 +- plugins/platforms/drm/drm_object_plane.cpp | 2 +- plugins/platforms/drm/drm_object_plane.h | 2 +- 9 files changed, 20 insertions(+), 22 deletions(-) diff --git a/autotests/drm/objecttest.cpp b/autotests/drm/objecttest.cpp index 63000e2090..90a640c858 100644 --- a/autotests/drm/objecttest.cpp +++ b/autotests/drm/objecttest.cpp @@ -18,7 +18,7 @@ public: { } ~MockDrmObject() override {} - bool atomicInit() override; + bool init() override; bool initProps() override; void setProperties(uint32_t count, uint32_t *props, uint64_t *values) { @@ -49,7 +49,7 @@ private: uint64_t *m_values = nullptr; }; -bool MockDrmObject::atomicInit() +bool MockDrmObject::init() { return initProps(); } @@ -186,7 +186,7 @@ void ObjectTest::testInitProperties() } }); - object.atomicInit(); + object.init(); // verify the names QCOMPARE(object.name(0), QByteArrayLiteral("foo")); diff --git a/plugins/platforms/drm/drm_gpu.cpp b/plugins/platforms/drm/drm_gpu.cpp index fc7be0b3ed..460f8bc2d2 100644 --- a/plugins/platforms/drm/drm_gpu.cpp +++ b/plugins/platforms/drm/drm_gpu.cpp @@ -101,7 +101,7 @@ void DrmGpu::tryAMS() for (unsigned int i = 0; i < planeResources->count_planes; ++i) { DrmScopedPointer kplane(drmModeGetPlane(m_fd, planeResources->planes[i])); DrmPlane *p = new DrmPlane(kplane->plane_id, m_fd); - if (p->atomicInit()) { + if (p->init()) { planes << p; if (p->type() == DrmPlane::TypeIndex::Overlay) { overlayPlanes << p; @@ -146,15 +146,13 @@ bool DrmGpu::updateOutputs() auto it = std::find_if(m_connectors.constBegin(), m_connectors.constEnd(), [currentConnector] (DrmConnector *c) { return c->id() == currentConnector; }); if (it == m_connectors.constEnd()) { auto c = new DrmConnector(currentConnector, m_fd); - if (m_atomicModeSetting) { - if (!c->atomicInit()) { - delete c; - continue; - } - if (c->isNonDesktop()) { - delete c; - continue; - } + if (!c->init()) { + delete c; + continue; + } + if (c->isNonDesktop()) { + delete c; + continue; } m_connectors << c; } else { @@ -167,7 +165,7 @@ bool DrmGpu::updateOutputs() auto it = std::find_if(m_crtcs.constBegin(), m_crtcs.constEnd(), [currentCrtc] (DrmCrtc *c) { return c->id() == currentCrtc; }); if (it == m_crtcs.constEnd()) { auto c = new DrmCrtc(currentCrtc, m_backend, this, i); - if (m_atomicModeSetting && !c->atomicInit()) { + if (!c->init()) { delete c; continue; } diff --git a/plugins/platforms/drm/drm_object.h b/plugins/platforms/drm/drm_object.h index 012e14777e..2b2f36fbd6 100644 --- a/plugins/platforms/drm/drm_object.h +++ b/plugins/platforms/drm/drm_object.h @@ -36,7 +36,7 @@ public: * Must be called to query necessary data directly after creation. * @return true when initializing was successful */ - virtual bool atomicInit() = 0; + virtual bool init() = 0; uint32_t id() const { return m_id; diff --git a/plugins/platforms/drm/drm_object_connector.cpp b/plugins/platforms/drm/drm_object_connector.cpp index 37d01a579f..586da6f89d 100644 --- a/plugins/platforms/drm/drm_object_connector.cpp +++ b/plugins/platforms/drm/drm_object_connector.cpp @@ -27,7 +27,7 @@ DrmConnector::DrmConnector(uint32_t connector_id, int fd) DrmConnector::~DrmConnector() = default; -bool DrmConnector::atomicInit() +bool DrmConnector::init() { qCDebug(KWIN_DRM) << "Creating connector" << m_id; diff --git a/plugins/platforms/drm/drm_object_connector.h b/plugins/platforms/drm/drm_object_connector.h index 81be8c5afb..7ba424bc9c 100644 --- a/plugins/platforms/drm/drm_object_connector.h +++ b/plugins/platforms/drm/drm_object_connector.h @@ -21,7 +21,7 @@ public: ~DrmConnector() override; - bool atomicInit() override; + bool init() override; enum class PropertyIndex { CrtcId = 0, diff --git a/plugins/platforms/drm/drm_object_crtc.cpp b/plugins/platforms/drm/drm_object_crtc.cpp index d97ec0e598..98a7af7b2b 100644 --- a/plugins/platforms/drm/drm_object_crtc.cpp +++ b/plugins/platforms/drm/drm_object_crtc.cpp @@ -33,9 +33,9 @@ DrmCrtc::~DrmCrtc() { } -bool DrmCrtc::atomicInit() +bool DrmCrtc::init() { - qCDebug(KWIN_DRM) << "Atomic init for CRTC:" << resIndex() << "id:" << m_id; + qCDebug(KWIN_DRM) << "Init for CRTC:" << resIndex() << "id:" << m_id; if (!initProps()) { return false; diff --git a/plugins/platforms/drm/drm_object_crtc.h b/plugins/platforms/drm/drm_object_crtc.h index 00c743a206..38f426004c 100644 --- a/plugins/platforms/drm/drm_object_crtc.h +++ b/plugins/platforms/drm/drm_object_crtc.h @@ -27,7 +27,7 @@ public: ~DrmCrtc() override; - bool atomicInit() override; + bool init() override; enum class PropertyIndex { ModeId = 0, diff --git a/plugins/platforms/drm/drm_object_plane.cpp b/plugins/platforms/drm/drm_object_plane.cpp index 7cf84766c3..3df8955d92 100644 --- a/plugins/platforms/drm/drm_object_plane.cpp +++ b/plugins/platforms/drm/drm_object_plane.cpp @@ -25,7 +25,7 @@ DrmPlane::~DrmPlane() delete m_next; } -bool DrmPlane::atomicInit() +bool DrmPlane::init() { qCDebug(KWIN_DRM) << "Atomic init for plane:" << m_id; DrmScopedPointer p(drmModeGetPlane(fd(), m_id)); diff --git a/plugins/platforms/drm/drm_object_plane.h b/plugins/platforms/drm/drm_object_plane.h index df1b92ac6f..43acce2aa4 100644 --- a/plugins/platforms/drm/drm_object_plane.h +++ b/plugins/platforms/drm/drm_object_plane.h @@ -62,7 +62,7 @@ public: Q_ENUM(Transformation) Q_DECLARE_FLAGS(Transformations, Transformation); - bool atomicInit() override; + bool init() override; bool initProps() override; TypeIndex type();