From ce1e9571815e7b0b4feb91d5d36817b42e6a00b9 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Sat, 15 Apr 2023 21:12:33 +0300 Subject: [PATCH] backends/x11: Use EGL_KHR_platform_gbm We provide own window system integration bits, so use the EGL_KHR_platform_gbm extension to get the EGLDisplay for the consistency sake. --- .../x11/windowed/x11_windowed_egl_backend.cpp | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/backends/x11/windowed/x11_windowed_egl_backend.cpp b/src/backends/x11/windowed/x11_windowed_egl_backend.cpp index 81fae3ab36..166b68043f 100644 --- a/src/backends/x11/windowed/x11_windowed_egl_backend.cpp +++ b/src/backends/x11/windowed/x11_windowed_egl_backend.cpp @@ -271,28 +271,21 @@ X11WindowedBackend *X11WindowedEglBackend::backend() const bool X11WindowedEglBackend::initializeEgl() { initClientExtensions(); - auto display = kwinApp()->outputBackend()->sceneEglDisplayObject(); - // Use eglGetPlatformDisplayEXT() to get the display pointer - // if the implementation supports it. - if (!display) { - const bool havePlatformBase = hasClientExtension(QByteArrayLiteral("EGL_EXT_platform_base")); - if (havePlatformBase) { - // Make sure that the X11 platform is supported - if (!hasClientExtension(QByteArrayLiteral("EGL_EXT_platform_x11")) && !hasClientExtension(QByteArrayLiteral("EGL_KHR_platform_x11"))) { - qCWarning(KWIN_X11WINDOWED) << "EGL_EXT_platform_base is supported, but neither EGL_EXT_platform_x11 nor EGL_KHR_platform_x11 is supported." - << "Cannot create EGLDisplay on X11"; + if (!m_backend->sceneEglDisplayObject()) { + for (const QByteArray &extension : {QByteArrayLiteral("EGL_EXT_platform_base"), QByteArrayLiteral("EGL_KHR_platform_gbm")}) { + if (!hasClientExtension(extension)) { + qCWarning(KWIN_X11WINDOWED) << extension << "client extension is not supported by the platform"; return false; } + } - m_backend->setEglDisplay(EglDisplay::create(eglGetPlatformDisplayEXT(EGL_PLATFORM_X11_EXT, m_backend->display(), nullptr))); - } else { - m_backend->setEglDisplay(EglDisplay::create(eglGetDisplay(m_backend->display()))); - } - display = m_backend->sceneEglDisplayObject(); - if (!display) { - return false; - } + m_backend->setEglDisplay(EglDisplay::create(eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR, m_backend->gbmDevice(), nullptr))); + } + + auto display = m_backend->sceneEglDisplayObject(); + if (!display) { + return false; } setEglDisplay(display); return true;