loader: silence implicit-load zink error by the loader
Since commit7d9ea77b45
("glx: add automatic zink fallback loading between hw and sw drivers"), zink could be tried as a fallback. It'd better silence if the zink loading is implicit and on fail as what commit4cc975c6e9
("glx: silence more implicit-load zink errors") has done. But there seems to be one left bebind, which is spit when building swrast but no zink with -Dglx=dri. v2: plumb the flag through from egl/glx to the loader (zmike) Signed-off-by: Luc Ma <luc@sietium.com> Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28970>
This commit is contained in:
@@ -659,7 +659,7 @@ dri2_open_driver(_EGLDisplay *disp)
|
||||
};
|
||||
|
||||
return loader_open_driver(dri2_dpy->driver_name, &dri2_dpy->driver,
|
||||
search_path_vars);
|
||||
search_path_vars, disp->Options.FallbackZink);
|
||||
}
|
||||
|
||||
static EGLBoolean
|
||||
|
@@ -699,7 +699,9 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
|
||||
bool success = false;
|
||||
if (!disp->Options.Zink && !getenv("GALLIUM_DRIVER")) {
|
||||
disp->Options.Zink = EGL_TRUE;
|
||||
disp->Options.FallbackZink = EGL_TRUE;
|
||||
success = _eglDriver.Initialize(disp);
|
||||
disp->Options.FallbackZink = EGL_FALSE;
|
||||
}
|
||||
if (!success) {
|
||||
disp->Options.Zink = EGL_FALSE;
|
||||
|
@@ -196,6 +196,7 @@ struct _egl_display {
|
||||
/* options that affect how the driver initializes the display */
|
||||
struct {
|
||||
EGLBoolean Zink; /**< Use kopper only */
|
||||
EGLBoolean FallbackZink; /**< True if zink is tried as fallback */
|
||||
EGLBoolean ForceSoftware; /**< Use software path only */
|
||||
EGLBoolean GalliumHudWarn; /**< Using hud, warn when querying buffer age */
|
||||
EGLAttrib *Attribs; /**< Platform-specific options */
|
||||
|
@@ -262,7 +262,7 @@ static struct dri_extension_match gbm_swrast_device_extensions[] = {
|
||||
};
|
||||
|
||||
static const __DRIextension **
|
||||
dri_open_driver(struct gbm_dri_device *dri)
|
||||
dri_open_driver(struct gbm_dri_device *dri, bool driver_name_is_inferred)
|
||||
{
|
||||
/* Temporarily work around dri driver libs that need symbols in libglapi
|
||||
* but don't automatically link it in.
|
||||
@@ -283,7 +283,8 @@ dri_open_driver(struct gbm_dri_device *dri)
|
||||
"LIBGL_DRIVERS_PATH",
|
||||
NULL
|
||||
};
|
||||
return loader_open_driver(dri->driver_name, &dri->driver, search_path_vars);
|
||||
return loader_open_driver(dri->driver_name, &dri->driver, search_path_vars,
|
||||
driver_name_is_inferred);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -293,7 +294,7 @@ dri_screen_create_for_driver(struct gbm_dri_device *dri, char *driver_name, bool
|
||||
|
||||
dri->driver_name = swrast ? strdup("swrast") : driver_name;
|
||||
|
||||
const __DRIextension **extensions = dri_open_driver(dri);
|
||||
const __DRIextension **extensions = dri_open_driver(dri, driver_name_is_inferred);
|
||||
if (!extensions)
|
||||
goto fail;
|
||||
|
||||
|
@@ -1058,7 +1058,7 @@ dri2CreateScreen(int screen, struct glx_display * priv, bool driver_name_is_infe
|
||||
}
|
||||
psc->driverName = driverName;
|
||||
|
||||
extensions = driOpenDriver(driverName, &psc->driver);
|
||||
extensions = driOpenDriver(driverName, &psc->driver, driver_name_is_inferred);
|
||||
if (extensions == NULL)
|
||||
goto handle_error;
|
||||
|
||||
|
@@ -842,7 +842,7 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in
|
||||
goto handle_error;
|
||||
}
|
||||
|
||||
extensions = driOpenDriver(driverName, &psc->driver);
|
||||
extensions = driOpenDriver(driverName, &psc->driver, driver_name_is_inferred);
|
||||
if (extensions == NULL)
|
||||
goto handle_error;
|
||||
|
||||
|
@@ -70,7 +70,7 @@
|
||||
* file not found.
|
||||
*/
|
||||
_X_HIDDEN const __DRIextension **
|
||||
driOpenDriver(const char *driverName, void **out_driver_handle)
|
||||
driOpenDriver(const char *driverName, void **out_driver_handle, bool driver_name_is_inferred)
|
||||
{
|
||||
void *glhandle;
|
||||
|
||||
@@ -84,7 +84,7 @@ driOpenDriver(const char *driverName, void **out_driver_handle)
|
||||
};
|
||||
|
||||
const __DRIextension **extensions =
|
||||
loader_open_driver(driverName, out_driver_handle, search_path_vars);
|
||||
loader_open_driver(driverName, out_driver_handle, search_path_vars, driver_name_is_inferred);
|
||||
|
||||
if (glhandle)
|
||||
dlclose(glhandle);
|
||||
@@ -744,7 +744,7 @@ get_driver_config(const char *driverName)
|
||||
{
|
||||
void *handle;
|
||||
char *config = NULL;
|
||||
const __DRIextension **extensions = driOpenDriver(driverName, &handle);
|
||||
const __DRIextension **extensions = driOpenDriver(driverName, &handle, false);
|
||||
if (extensions) {
|
||||
for (int i = 0; extensions[i]; i++) {
|
||||
if (strcmp(extensions[i]->name, __DRI_CONFIG_OPTIONS) != 0)
|
||||
|
@@ -64,7 +64,8 @@ extern void
|
||||
driReleaseDrawables(struct glx_context *gc);
|
||||
|
||||
extern const __DRIextension **driOpenDriver(const char *driverName,
|
||||
void **out_driver_handle);
|
||||
void **out_driver_handle,
|
||||
bool driver_name_is_inferred);
|
||||
|
||||
struct dri_ctx_attribs {
|
||||
unsigned major_ver;
|
||||
|
@@ -953,7 +953,7 @@ driswCreateScreenDriver(int screen, struct glx_display *priv,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extensions = driOpenDriver(driver, &psc->driver);
|
||||
extensions = driOpenDriver(driver, &psc->driver, driver_name_is_inferred);
|
||||
if (extensions == NULL)
|
||||
goto handle_error;
|
||||
psc->name = driver;
|
||||
|
@@ -877,13 +877,15 @@ loader_open_driver_lib(const char *driver_name,
|
||||
const struct __DRIextensionRec **
|
||||
loader_open_driver(const char *driver_name,
|
||||
void **out_driver_handle,
|
||||
const char **search_path_vars)
|
||||
const char **search_path_vars,
|
||||
bool driver_name_is_inferred)
|
||||
{
|
||||
char *get_extensions_name;
|
||||
const struct __DRIextensionRec **extensions = NULL;
|
||||
const struct __DRIextensionRec **(*get_extensions)(void);
|
||||
|
||||
void *driver = loader_open_driver_lib(driver_name, "_dri", search_path_vars,
|
||||
DEFAULT_DRIVER_DIR, true);
|
||||
DEFAULT_DRIVER_DIR, !driver_name_is_inferred);
|
||||
|
||||
if (!driver)
|
||||
goto failed;
|
||||
|
@@ -72,7 +72,8 @@ loader_open_driver_lib(const char *driver_name,
|
||||
const struct __DRIextensionRec **
|
||||
loader_open_driver(const char *driver_name,
|
||||
void **out_driver_handle,
|
||||
const char **search_path_vars);
|
||||
const char **search_path_vars,
|
||||
bool driver_name_is_inferred);
|
||||
|
||||
char *
|
||||
loader_get_device_name_for_fd(int fd);
|
||||
|
Reference in New Issue
Block a user