Module: Mesa Branch: main Commit: 78f3db760d0c510374c708f4898a91571c87d4a8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=78f3db760d0c510374c708f4898a91571c87d4a8
Author: Mike Blumenkrantz <[email protected]> Date: Tue Oct 3 08:09:02 2023 -0400 egl: don't set ForceSoftware for all zink loading sometimes this is desired, other times it isn't Reviewed-by: Marek Olšák <[email protected]> Acked-by: Daniel Stone <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25526> --- src/egl/drivers/dri2/platform_surfaceless.c | 7 ++++--- src/egl/drivers/dri2/platform_wayland.c | 2 +- src/egl/drivers/dri2/platform_x11.c | 2 +- src/egl/main/eglapi.c | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index 0321025f91e..bf23b1ec901 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -220,7 +220,7 @@ static const __DRIextension *swrast_loader_extensions[] = { }; static bool -surfaceless_probe_device(_EGLDisplay *disp, bool swrast) +surfaceless_probe_device(_EGLDisplay *disp, bool swrast, bool zink) { const unsigned node_type = swrast ? DRM_NODE_PRIMARY : DRM_NODE_RENDER; struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); @@ -260,7 +260,7 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast) } if (dri2_dpy->driver_name && dri2_load_driver_dri3(disp)) { - if (swrast) + if (swrast || zink) dri2_dpy->loader_extensions = swrast_loader_extensions; else dri2_dpy->loader_extensions = image_loader_extensions; @@ -323,7 +323,8 @@ dri2_initialize_surfaceless(_EGLDisplay *disp) /* When ForceSoftware is false, we try the HW driver. When ForceSoftware * is true, we try kms_swrast and swrast in order. */ - driver_loaded = surfaceless_probe_device(disp, disp->Options.ForceSoftware); + driver_loaded = surfaceless_probe_device(disp, disp->Options.ForceSoftware, + disp->Options.Zink); if (!driver_loaded && disp->Options.ForceSoftware) { _eglLog(_EGL_DEBUG, "Falling back to surfaceless swrast without DRM."); driver_loaded = surfaceless_probe_device_sw(disp); diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 6507e635299..0ec48da3094 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -2830,7 +2830,7 @@ cleanup: EGLBoolean dri2_initialize_wayland(_EGLDisplay *disp) { - if (disp->Options.ForceSoftware) + if (disp->Options.ForceSoftware || disp->Options.Zink) return dri2_initialize_wayland_swrast(disp); else return dri2_initialize_wayland_drm(disp); diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 31f6d493f46..71d828a4053 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -1785,7 +1785,7 @@ cleanup: EGLBoolean dri2_initialize_x11(_EGLDisplay *disp) { - if (disp->Options.ForceSoftware) + if (disp->Options.ForceSoftware || disp->Options.Zink) return dri2_initialize_x11_swrast(disp); #ifdef HAVE_DRI3 diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index d3dee4a35ee..b1a48668b76 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -682,7 +682,6 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) const char *env = getenv("MESA_LOADER_DRIVER_OVERRIDE"); disp->Options.Zink = env && !strcmp(env, "zink"); - disp->Options.ForceSoftware |= disp->Options.Zink; const char *gallium_hud_env = getenv("GALLIUM_HUD"); disp->Options.GalliumHudWarn = @@ -696,6 +695,7 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) if (disp->Options.ForceSoftware) RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); else { + disp->Options.Zink = EGL_FALSE; disp->Options.ForceSoftware = EGL_TRUE; if (!_eglDriver.Initialize(disp)) RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
