diff --git a/TESTING.md b/TESTING.md --- a/TESTING.md +++ b/TESTING.md @@ -11,7 +11,8 @@ * breeze window decoration # Preparing a run of the test suite -Please load the kernel module "vgem". This is required to provide a virtual OpenGL device. +In case your system does not support the EGL extension EGL_MESA_platform_surfaceless, +please load the kernel module "vgem". This is required to provide a virtual OpenGL device. sudo modprobe vgem 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,6 +99,13 @@ // Use eglGetPlatformDisplayEXT() to get the display pointer // if the implementation supports it. if (display == EGL_NO_DISPLAY) { + // first try surfaceless + if (hasClientExtension(QByteArrayLiteral("EGL_MESA_platform_surfaceless"))) { + display = eglGetPlatformDisplayEXT(EGL_PLATFORM_SURFACELESS_MESA, EGL_DEFAULT_DISPLAY, nullptr); + } + } + if (display == EGL_NO_DISPLAY) { + qCDebug(KWIN_VIRTUAL) << "Failed to create surfaceless platform, trying with vgem device"; 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;