diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 3d3f75259bc..cbba547d7eb 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -1001,7 +1001,9 @@ driswCreateScreenDriver(int screen, struct glx_display *priv, if (!psc->has_multibuffer && !debug_get_bool_option("LIBGL_ALWAYS_SOFTWARE", false) && !debug_get_bool_option("LIBGL_KOPPER_DRI2", false)) { - CriticalErrorMessageF("DRI3 not available\n"); + /* only print error if zink was explicitly requested */ + if (pdpyp->zink == TRY_ZINK_YES) + CriticalErrorMessageF("DRI3 not available\n"); goto handle_error; } } @@ -1049,7 +1051,8 @@ driswCreateScreenDriver(int screen, struct glx_display *priv, glx_screen_cleanup(&psc->base); free(psc); - CriticalErrorMessageF("failed to load driver: %s\n", driver); + if (pdpyp->zink == TRY_ZINK_YES) + CriticalErrorMessageF("failed to load driver: %s\n", driver); return NULL; } @@ -1079,7 +1082,7 @@ driswDestroyDisplay(__GLXDRIdisplay * dpy) * display pointer. */ _X_HIDDEN __GLXDRIdisplay * -driswCreateDisplay(Display * dpy, bool zink) +driswCreateDisplay(Display * dpy, enum try_zink zink) { struct drisw_display *pdpyp; diff --git a/src/glx/drisw_priv.h b/src/glx/drisw_priv.h index 53674f81a24..c7687ebcb63 100644 --- a/src/glx/drisw_priv.h +++ b/src/glx/drisw_priv.h @@ -33,7 +33,7 @@ struct drisw_display { __GLXDRIdisplay base; - bool zink; + enum try_zink zink; }; struct drisw_screen diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index e262b4a80fa..e4eb3b41451 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -133,11 +133,17 @@ struct __GLXDRIdrawableRec int refcount; }; +enum try_zink { + TRY_ZINK_NO, + TRY_ZINK_INFER, + TRY_ZINK_YES, +}; + /* ** Function to create and DRI display data and initialize the display ** dependent methods. */ -extern __GLXDRIdisplay *driswCreateDisplay(Display * dpy, bool zink); +extern __GLXDRIdisplay *driswCreateDisplay(Display * dpy, enum try_zink zink); extern __GLXDRIdisplay *dri2CreateDisplay(Display * dpy); extern __GLXDRIdisplay *dri3_create_display(Display * dpy); extern __GLXDRIdisplay *driwindowsCreateDisplay(Display * dpy); diff --git a/src/glx/glxext.c b/src/glx/glxext.c index 6cf04d1b745..eebdfceeb4c 100644 --- a/src/glx/glxext.c +++ b/src/glx/glxext.c @@ -918,7 +918,8 @@ __glXInitialize(Display * dpy) } #endif /* GLX_USE_DRM */ if (glx_direct) - dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink | try_zink); + dpyPriv->driswDisplay = driswCreateDisplay(dpy, zink ? TRY_ZINK_YES : + try_zink ? TRY_ZINK_INFER : TRY_ZINK_NO); #ifdef GLX_USE_WINDOWSGL if (glx_direct && glx_accel) @@ -939,7 +940,7 @@ __glXInitialize(Display * dpy) if (try_zink) { free(dpyPriv->screens); dpyPriv->driswDisplay->destroyDisplay(dpyPriv->driswDisplay); - dpyPriv->driswDisplay = driswCreateDisplay(dpy, false); + dpyPriv->driswDisplay = driswCreateDisplay(dpy, TRY_ZINK_NO); fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False); } #endif