From 2858ad3f7e753da7d0f8bcc2f6cd3efd1fc71adc Mon Sep 17 00:00:00 2001 From: Quantum Date: Mon, 18 Oct 2021 22:32:58 -0400 Subject: [PATCH] [client] egl: fallback when EGL_RENDER_BUFFER fails This allows the client to work when the OpenGL implementation fails if EGL_RENDER_BUFFER is passed, printing a warning. This should fix issues with Nvidia proprietary drivers on Wayland. --- client/renderers/EGL/egl.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/renderers/EGL/egl.c b/client/renderers/EGL/egl.c index 6d6a9cb1..5d506943 100644 --- a/client/renderers/EGL/egl.c +++ b/client/renderers/EGL/egl.c @@ -713,8 +713,17 @@ static bool egl_renderStartup(LG_Renderer * renderer, bool useDMA) this->surface = eglCreateWindowSurface(this->display, this->configs, this->nativeWind, surfattr); if (this->surface == EGL_NO_SURFACE) { - DEBUG_ERROR("Failed to create EGL surface (eglError: 0x%x)", eglGetError()); - return false; + // On Nvidia proprietary drivers on Wayland, specifying EGL_RENDER_BUFFER can cause + // window creation to fail, so we try again without it. + this->surface = eglCreateWindowSurface(this->display, this->configs, this->nativeWind, NULL); + if (this->surface == EGL_NO_SURFACE) + { + DEBUG_ERROR("Failed to create EGL surface (eglError: 0x%x)", eglGetError()); + return false; + } + else + DEBUG_WARN("EGL surface creation with EGL_RENDER_BUFFER failed, " + "egl:doubleBuffer setting may not be respected"); } const char * client_exts = eglQueryString(this->display, EGL_EXTENSIONS);