https://bugs.kde.org/show_bug.cgi?id=357543

--- Comment #2 from Martin Gräßlin <mgraess...@kde.org> ---
possible patch (not tested):

diff --git a/backends/drm/drm_backend.cpp b/backends/drm/drm_backend.cpp
index 128bdc2..7b1b240 100644
--- a/backends/drm/drm_backend.cpp
+++ b/backends/drm/drm_backend.cpp
@@ -614,7 +614,7 @@ bool DrmOutput::present(DrmBuffer *buffer)
     if (m_currentBuffer) {
         return false;
     }
-    if (m_lastStride != buffer->stride()) {
+    if (m_lastStride != buffer->stride() || m_lastGbm != buffer->isGbm()) {
         // need to set a new mode first
         if (!setMode(buffer)) {
             return false;
@@ -811,6 +811,7 @@ bool DrmOutput::setMode(DrmBuffer *buffer)
 {
     if (drmModeSetCrtc(m_backend->fd(), m_crtcId, buffer->bufferId(), 0, 0,
&m_connector, 1, &m_mode) == 0) {
         m_lastStride = buffer->stride();
+        m_lastGbm = buffer->isGbm();
         return true;
     } else {
         qCWarning(KWIN_DRM) << "Mode setting failed";
diff --git a/backends/drm/drm_backend.h b/backends/drm/drm_backend.h
index af22594..b247776 100644
--- a/backends/drm/drm_backend.h
+++ b/backends/drm/drm_backend.h
@@ -181,6 +181,7 @@ private:
     quint32 m_crtcId = 0;
     quint32 m_connector = 0;
     quint32 m_lastStride = 0;
+    bool m_lastGbm = false;
     drmModeModeInfo m_mode;
     DrmBuffer *m_currentBuffer = nullptr;
     DrmBuffer *m_blackBuffer = nullptr;
@@ -221,6 +222,9 @@ public:
     gbm_bo *gbm() const {
         return m_bo;
     }
+    bool isGbm() const {
+        return m_bo != nullptr;
+    }
     void releaseGbm();

 private:

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to