Module: Mesa
Branch: main
Commit: 71a0a386b5df53431f1fbc9a02a78f7af22611a6
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=71a0a386b5df53431f1fbc9a02a78f7af22611a6

Author: Michel Dänzer <[email protected]>
Date:   Fri Nov 11 16:33:12 2022 +0100

Revert "egl/glx: add fallback for zink loading"

This reverts commit 2569215f43f6ce71fb8eb2181b36c6cf976bce2a.

Conflicts:
        src/egl/main/eglapi.c
        src/glx/glxext.c

It broke the fallback to swrast in some cases where zink can't work.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7333
Fixes: 2569215f43f6 ("egl/glx: add fallback for zink loading")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19681>

---

 src/egl/main/eglapi.c | 22 ++++------------------
 src/glx/drisw_glx.c   |  5 ++++-
 src/glx/glxext.c      | 25 ++++---------------------
 3 files changed, 12 insertions(+), 40 deletions(-)

diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index 15f6e2e173b..041f35aa7b6 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -701,26 +701,12 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint 
*minor)
        * If the initialisation fails, try again using only software rendering.
        */
       if (!_eglDriver.Initialize(disp)) {
-         bool fail = true;
-         if (!disp->Options.ForceSoftware && !disp->Options.Zink &&
-             !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false) && 
!getenv("GALLIUM_DRIVER")) {
-            /* zink fallback */
-            disp->Options.Zink = EGL_TRUE;
+         if (disp->Options.ForceSoftware)
+            RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
+         else {
             disp->Options.ForceSoftware = EGL_TRUE;
-            fail = !_eglDriver.Initialize(disp);
-            if (fail) {
-               disp->Options.Zink = EGL_FALSE;
-               disp->Options.ForceSoftware = EGL_FALSE;
-            }
-         }
-         if (fail) {
-            if (disp->Options.ForceSoftware)
+            if (!_eglDriver.Initialize(disp))
                RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
-            else {
-               disp->Options.ForceSoftware = EGL_TRUE;
-               if (!_eglDriver.Initialize(disp))
-                  RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
-            }
          }
       }
 
diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
index cc01fcdea1c..a459ec863e7 100644
--- a/src/glx/drisw_glx.c
+++ b/src/glx/drisw_glx.c
@@ -1058,8 +1058,11 @@ static struct glx_screen *
 driswCreateScreen(int screen, struct glx_display *priv)
 {
    const struct drisw_display *pdpyp = (struct drisw_display 
*)priv->driswDisplay;
+   if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) {
+      return driswCreateScreenDriver(screen, priv, "zink");
+   }
 
-   return driswCreateScreenDriver(screen, priv, pdpyp->zink ? "zink" : 
"swrast");
+   return driswCreateScreenDriver(screen, priv, "swrast");
 }
 
 /* Called from __glXFreeDisplayPrivate.
diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index 7f2fc2a0691..4d59ec28bf7 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -923,9 +923,9 @@ __glXInitialize(Display * dpy)
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
    Bool glx_direct = !debug_get_bool_option("LIBGL_ALWAYS_INDIRECT", false);
    Bool glx_accel = !debug_get_bool_option("LIBGL_ALWAYS_SOFTWARE", false);
+   Bool zink;
    const char *env = getenv("MESA_LOADER_DRIVER_OVERRIDE");
-   Bool explicit_zink = env && !strcmp(env, "zink");
-   Bool infer_zink = false;
+   zink = env && !strcmp(env, "zink");
 
    dpyPriv->drawHash = __glxHashCreate();
 
@@ -940,20 +940,17 @@ __glXInitialize(Display * dpy)
     ** (e.g., those called in AllocAndFetchScreenConfigs).
     */
 #if defined(GLX_USE_DRM)
-   if (glx_direct && glx_accel && !explicit_zink) {
+   if (glx_direct && glx_accel && !zink) {
 #if defined(HAVE_DRI3)
       if (!debug_get_bool_option("LIBGL_DRI3_DISABLE", false))
          dpyPriv->dri3Display = dri3_create_display(dpy);
 #endif /* HAVE_DRI3 */
       if (!debug_get_bool_option("LIBGL_DRI2_DISABLE", false))
          dpyPriv->dri2Display = dri2CreateDisplay(dpy);
-      /* zink fallback */
-      if (!dpyPriv->dri3Display && !dpyPriv->dri2Display)
-         infer_zink =  !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false) 
&& !getenv("GALLIUM_DRIVER");
    }
 #endif /* GLX_USE_DRM */
    if (glx_direct)
-      dpyPriv->driswDisplay = driswCreateDisplay(dpy, explicit_zink | 
infer_zink);
+      dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink);
 
 #ifdef GLX_USE_WINDOWSGL
    if (glx_direct && glx_accel)
@@ -969,22 +966,8 @@ __glXInitialize(Display * dpy)
 #endif
 
    if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) {
-#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
-      Bool fail = true;
-      /* if zink was inferred, retry without zink */
-      if (infer_zink && !explicit_zink) {
-         free(dpyPriv->screens);
-         driswCreateDisplay(dpy, false);
-         fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv);
-      }
-      if (fail) {
-         free(dpyPriv);
-         return NULL;
-      }
-#else
       free(dpyPriv);
       return NULL;
-#endif
    }
 
    __glX_send_client_info(dpyPriv);

Reply via email to