diff --git a/0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch b/0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch new file mode 100644 index 0000000..4f661ae --- /dev/null +++ b/0001-Revert-glx-Guard-usage-of-infer_zink-explicit_zink-i.patch @@ -0,0 +1,37 @@ +From a17c79c9df4a55ce9dfbe878d9cd19441a4e193e Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Thu, 10 Nov 2022 15:20:24 +1000 +Subject: [PATCH 1/2] Revert "glx: Guard usage of infer_zink && !explicit_zink + in glxext.c" + +This reverts commit ffab4c8cb7bc7362cd3318f39162a98629bd4d19. +--- + src/glx/glxext.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/src/glx/glxext.c b/src/glx/glxext.c +index 7f2fc2a0691..156bfc90946 100644 +--- a/src/glx/glxext.c ++++ b/src/glx/glxext.c +@@ -969,7 +969,6 @@ __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) { +@@ -981,10 +980,6 @@ __glXInitialize(Display * dpy) + free(dpyPriv); + return NULL; + } +-#else +- free(dpyPriv); +- return NULL; +-#endif + } + + __glX_send_client_info(dpyPriv); +-- +2.38.1 + diff --git a/0002-Revert-egl-glx-add-fallback-for-zink-loading.patch b/0002-Revert-egl-glx-add-fallback-for-zink-loading.patch new file mode 100644 index 0000000..2899031 --- /dev/null +++ b/0002-Revert-egl-glx-add-fallback-for-zink-loading.patch @@ -0,0 +1,133 @@ +From cb4d4c8e9c424969f2d7834e15fd8123dbbda84a Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Thu, 10 Nov 2022 15:27:08 +1000 +Subject: [PATCH 2/2] Revert "egl/glx: add fallback for zink loading" + +This reverts commit 2569215f43f6ce71fb8eb2181b36c6cf976bce2a. + +This break glxinfo in a swrast only VM for me on Fedora +--- + src/egl/main/eglapi.c | 22 ++++------------------ + src/glx/drisw_glx.c | 5 ++++- + src/glx/glxext.c | 29 ++++++----------------------- + 3 files changed, 14 insertions(+), 42 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 c124c62c31e..25d853fcd16 100644 +--- a/src/glx/drisw_glx.c ++++ b/src/glx/drisw_glx.c +@@ -1054,8 +1054,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 156bfc90946..e4da247b349 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,25 +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); +- +-#ifdef GLX_USE_WINDOWSGL +- if (glx_direct && glx_accel) +- dpyPriv->windowsdriDisplay = driwindowsCreateDisplay(dpy); +-#endif ++ dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink); + #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */ + + #ifdef GLX_USE_APPLEGL +@@ -969,17 +961,8 @@ __glXInitialize(Display * dpy) + #endif + + if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) { +- 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; +- } ++ free(dpyPriv); ++ return NULL; + } + + __glX_send_client_info(dpyPriv); +-- +2.38.1 +