check for EGL_KHR_platform_gbm extension as well

Summary:
some drivers, like Mali have EGL_KHR_platform_gbm
but not EGL_MESA_platform_gbm

Test Plan: pending a test on rock64 board

Reviewers: #kwin, #plasma, davidedmundson, graesslin

Reviewed By: #kwin, #plasma, graesslin

Subscribers: graesslin, garg, davidedmundson, plasma-devel, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D10346
This commit is contained in:
Marco Martin 2018-02-15 11:41:10 +01:00
parent 627b11ce49
commit 8a2b9a014f
2 changed files with 15 additions and 7 deletions

View file

@ -90,9 +90,13 @@ bool EglGbmBackend::initializeEgl()
// Use eglGetPlatformDisplayEXT() to get the display pointer // Use eglGetPlatformDisplayEXT() to get the display pointer
// if the implementation supports it. // if the implementation supports it.
if (display == EGL_NO_DISPLAY) { 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")) || if (!hasClientExtension(QByteArrayLiteral("EGL_EXT_platform_base")) ||
!hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_gbm"))) { (!hasMesaGBM && !hasKHRGBM)) {
setFailed("EGL_EXT_platform_base and/or EGL_MESA_platform_gbm missing"); setFailed("missing one or more extensions between EGL_EXT_platform_base, EGL_MESA_platform_gbm, EGL_KHR_platform_gbm");
return false; return false;
} }
@ -103,7 +107,7 @@ bool EglGbmBackend::initializeEgl()
} }
m_backend->setGbmDevice(device); m_backend->setGbmDevice(device);
display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_MESA, device, nullptr); display = eglGetPlatformDisplayEXT(platform, device, nullptr);
} }
if (display == EGL_NO_DISPLAY) if (display == EGL_NO_DISPLAY)

View file

@ -99,22 +99,26 @@ bool EglGbmBackend::initializeEgl()
// Use eglGetPlatformDisplayEXT() to get the display pointer // Use eglGetPlatformDisplayEXT() to get the display pointer
// if the implementation supports it. // if the implementation supports it.
if (display == EGL_NO_DISPLAY) { 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")) || if (!hasClientExtension(QByteArrayLiteral("EGL_EXT_platform_base")) ||
!hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_gbm"))) { (!hasMesaGBM && !hasKHRGBM)) {
setFailed("EGL_EXT_platform_base and/or EGL_MESA_platform_gbm missing"); setFailed("missing one or more extensions between EGL_EXT_platform_base, EGL_MESA_platform_gbm, EGL_KHR_platform_gbm");
return false; return false;
} }
#if HAVE_GBM #if HAVE_GBM
initGbmDevice(); initGbmDevice();
if (auto device = m_backend->gbmDevice()) { if (auto device = m_backend->gbmDevice()) {
display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_MESA, device, nullptr); display = eglGetPlatformDisplayEXT(platform, device, nullptr);
} }
#endif #endif
if (display == EGL_NO_DISPLAY) { if (display == EGL_NO_DISPLAY) {
qCWarning(KWIN_VIRTUAL) << "Failed to create EGLDisplay through GBM device, trying with default device"; 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);
} }
} }