Disable zink fallback in EGL

In mesa 23.3.x zink broke on nvidia, crashing in eglCreateContext.
In the same release, zink was added as a fallback between the
hardware drivers and swrast.
Any application that was previously falling back to swrast
now instead crashes, when using the nvidia vulkan driver.

How exactly do you reach zink or previously swrast when using
nvidia you may ask?
One common path may be EGL applications using EGL_EXT_platform_xcb.
The nvidia driver does not support it, thus GLVND tries the next
driver which is mesa, mesa doesn't find any suitable hardware driver
and thus falls back to zink or swrast.

Until zink is stable again on nvidia, we should disable the zink
fallback to prevent applications crashing instead of falling back
to swrast.

There should be no need to also disable the GLX fallback to zink
as i'm not aware of a call path that would lead to using mesa when
the nvidia drivers are installed.

RHBZ 2255599
RHBZ 2255768
MESA 10340
MESA 10341
This commit is contained in:
Alessandro Astone 2023-12-28 20:11:07 +01:00
parent 65240c8b17
commit c5c4360da7
2 changed files with 27 additions and 0 deletions

View file

@ -0,0 +1,26 @@
diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index d50be23e871..e3697622635 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -695,17 +695,21 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
if (disp->Options.ForceSoftware)
RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
else {
+#if 0
bool success = false;
if (!disp->Options.Zink && !getenv("GALLIUM_DRIVER")) {
disp->Options.Zink = EGL_TRUE;
success = _eglDriver.Initialize(disp);
}
if (!success) {
+#endif
disp->Options.Zink = EGL_FALSE;
disp->Options.ForceSoftware = EGL_TRUE;
if (!_eglDriver.Initialize(disp))
RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
+#if 0
}
+#endif
}
}

View file

@ -76,6 +76,7 @@ Source1: Mesa-MLAA-License-Clarification-Email.txt
Patch10: gnome-shell-glthread-disable.patch Patch10: gnome-shell-glthread-disable.patch
Patch11: 0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch Patch11: 0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch
Patch12: 0001-intel-compiler-fix-release-build-unused-variable.patch Patch12: 0001-intel-compiler-fix-release-build-unused-variable.patch
Patch13: disable-zink-egl-fallback.patch
BuildRequires: meson >= 1.2.0 BuildRequires: meson >= 1.2.0
BuildRequires: gcc BuildRequires: gcc