glx: only print zink failure-to-load messages if explicitly requested

if zink is inferred, let it fail silently

ref #10293

Acked-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27836>
This commit is contained in:
Mike Blumenkrantz
2024-02-27 17:05:13 -05:00
committed by Marge Bot
parent 571effdf08
commit e4d45c582b
4 changed files with 17 additions and 7 deletions

View File

@@ -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;

View File

@@ -33,7 +33,7 @@
struct drisw_display
{
__GLXDRIdisplay base;
bool zink;
enum try_zink zink;
};
struct drisw_screen

View File

@@ -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);

View File

@@ -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