diff --git a/plugins/platforms/drm/egl_gbm_backend.cpp b/plugins/platforms/drm/egl_gbm_backend.cpp --- a/plugins/platforms/drm/egl_gbm_backend.cpp +++ b/plugins/platforms/drm/egl_gbm_backend.cpp @@ -90,9 +90,13 @@ // Use eglGetPlatformDisplayEXT() to get the display pointer // if the implementation supports it. if (display == EGL_NO_DISPLAY) { + const bool hasMesaGBM = hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_gbm")); + const bool hasKHRGBM = hasClientExtension(QByteArrayLiteral("EGL_KHR_platform_gbm")); + const GLenum platform = hasMesaGBM ? EGL_PLATFORM_GBM_MESA : EGL_PLATFORM_GBM_KHR; + if (!hasClientExtension(QByteArrayLiteral("EGL_EXT_platform_base")) || - !hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_gbm"))) { - setFailed("EGL_EXT_platform_base and/or EGL_MESA_platform_gbm missing"); + (!hasMesaGBM && !hasKHRGBM)) { + setFailed("missing one or more extensions between EGL_EXT_platform_base, EGL_MESA_platform_gbm, EGL_KHR_platform_gbm"); return false; } @@ -103,7 +107,7 @@ } m_backend->setGbmDevice(device); - display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_MESA, device, nullptr); + display = eglGetPlatformDisplayEXT(platform, device, nullptr); } if (display == EGL_NO_DISPLAY) diff --git a/plugins/platforms/virtual/egl_gbm_backend.cpp b/plugins/platforms/virtual/egl_gbm_backend.cpp --- a/plugins/platforms/virtual/egl_gbm_backend.cpp +++ b/plugins/platforms/virtual/egl_gbm_backend.cpp @@ -99,22 +99,26 @@ // Use eglGetPlatformDisplayEXT() to get the display pointer // if the implementation supports it. if (display == EGL_NO_DISPLAY) { + const bool hasMesaGBM = hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_gbm")); + const bool hasKHRGBM = hasClientExtension(QByteArrayLiteral("EGL_KHR_platform_gbm")); + const GLenum platform = hasMesaGBM ? EGL_PLATFORM_GBM_MESA : EGL_PLATFORM_GBM_KHR; + if (!hasClientExtension(QByteArrayLiteral("EGL_EXT_platform_base")) || - !hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_gbm"))) { - setFailed("EGL_EXT_platform_base and/or EGL_MESA_platform_gbm missing"); + (!hasMesaGBM && !hasKHRGBM)) { + setFailed("missing one or more extensions between EGL_EXT_platform_base, EGL_MESA_platform_gbm, EGL_KHR_platform_gbm"); return false; } #if HAVE_GBM initGbmDevice(); if (auto device = m_backend->gbmDevice()) { - display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_MESA, device, nullptr); + display = eglGetPlatformDisplayEXT(platform, device, nullptr); } #endif if (display == EGL_NO_DISPLAY) { qCWarning(KWIN_VIRTUAL) << "Failed to create EGLDisplay through GBM device, trying with default device"; - display = eglGetPlatformDisplay(EGL_PLATFORM_GBM_MESA, EGL_DEFAULT_DISPLAY, nullptr); + display = eglGetPlatformDisplayEXT(platform, EGL_DEFAULT_DISPLAY, nullptr); } }