From 36770adfcec4dc333f10e5d3dde9461ad6697d58 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Tue, 12 Nov 2024 18:26:14 +0300 Subject: [PATCH] egl/display: workaround gbm platforms on EGL 1.4 Some EGL drivers report the KHR extension with EGL 1.4, which doesn't make any sense, however given that the constant for MESA and KHR is the same, we can check for KHR in MESA branch, but still use the Ext functions. Fixes #1708. --- CHANGELOG.md | 1 + glutin/src/api/egl/display.rs | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bed8265ab8..7177cc5b55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Added `NotCurrentContext::make_current_surfaceless(self)` and `PossiblyCurrentContext::make_current_surfaceless(&self)` in the `Wgl` implementation to allow the use of surfaceless contexts with WGL. +- Added workaround for EGL drivers reporting KHR_platform_gbm with EGL 1.4. # Version 0.32.1 diff --git a/glutin/src/api/egl/display.rs b/glutin/src/api/egl/display.rs index 4c2454d467..7b5d2cd08e 100644 --- a/glutin/src/api/egl/display.rs +++ b/glutin/src/api/egl/display.rs @@ -362,7 +362,18 @@ impl Display { handle.connection.map_or(egl::DEFAULT_DISPLAY as *mut _, |c| c.as_ptr()), ) }, - RawDisplayHandle::Gbm(handle) if extensions.contains("EGL_MESA_platform_gbm") => { + RawDisplayHandle::Gbm(handle) + // NOTE: Some drivers report that they support KHR extension with 1.4 EGL display, so + // workaround here by checking the KHR gbm display as well. The MESA and KHR has + // the same constant values, thus it'll work regardless. + // + // They do require EXT during the runtime as well, so we don't change the display + // to Khr here. + // + // See https://github.com/rust-windowing/glutin/issues/1708. + if extensions.contains("EGL_MESA_platform_gbm") + || extensions.contains("EGL_KHR_platform_gbm") => + { (egl::PLATFORM_GBM_MESA, handle.gbm_device.as_ptr()) }, RawDisplayHandle::Drm(_) => {