diff --git a/src/glx/glxext.c b/src/glx/glxext.c index 7e4e0b02af0..853d8516158 100644 --- a/src/glx/glxext.c +++ b/src/glx/glxext.c @@ -763,7 +763,7 @@ glx_screen_cleanup(struct glx_screen *psc) ** If that works then fetch the per screen configs data. */ static Bool -AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink) +AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink, Bool implicit) { struct glx_screen *psc; GLint i, screens; @@ -783,19 +783,19 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink) #if defined(GLX_USE_DRM) #if defined(HAVE_DRI3) if (priv->dri3Display) - psc = priv->dri3Display->createScreen(i, priv, false); + psc = priv->dri3Display->createScreen(i, priv, implicit); #endif /* HAVE_DRI3 */ if (psc == NULL && priv->dri2Display) - psc = priv->dri2Display->createScreen(i, priv, false); + psc = priv->dri2Display->createScreen(i, priv, implicit); #endif /* GLX_USE_DRM */ #ifdef GLX_USE_WINDOWSGL if (psc == NULL && priv->windowsdriDisplay) - psc = priv->windowsdriDisplay->createScreen(i, priv, false); + psc = priv->windowsdriDisplay->createScreen(i, priv, implicit); #endif if ((psc == GLX_LOADER_USE_ZINK || psc == NULL) && priv->driswDisplay) - psc = priv->driswDisplay->createScreen(i, priv, false); + psc = priv->driswDisplay->createScreen(i, priv, psc == GLX_LOADER_USE_ZINK ? false : implicit); #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */ #if defined(GLX_USE_APPLE) @@ -941,14 +941,14 @@ __glXInitialize(Display * dpy) } #endif - if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink)) { + if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink, zink || try_zink ? try_zink : !env)) { Bool fail = True; #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) if (try_zink) { free(dpyPriv->screens); dpyPriv->driswDisplay->destroyDisplay(dpyPriv->driswDisplay); dpyPriv->driswDisplay = driswCreateDisplay(dpy, TRY_ZINK_NO); - fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False); + fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False, true); } #endif if (fail) {