glx: honor LIBGL_DRIVERS_PATH when loading DRI drivers
Allow switching to another driver build without a full installation. Glamor already takes LIBGL_DRIVERS_PATH into account, so this change makes sure that the same driver is used in both parts of the server. Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Reviewed-by: Ben Crocker <bcrocker@redhat.com> Reviewed-by: Antoine Martin <antoine@nagafix.co.uk> Tested-by: Ben Crocker <bcrocker@redhat.com>
This commit is contained in:
parent
75a869a4e7
commit
319af6f471
|
@ -272,14 +272,44 @@ glxProbeDriver(const char *driverName,
|
|||
char filename[PATH_MAX];
|
||||
char *get_extensions_name;
|
||||
const __DRIextension **extensions = NULL;
|
||||
const char *path = NULL;
|
||||
|
||||
snprintf(filename, sizeof filename, "%s/%s_dri.so",
|
||||
dri_driver_path, driverName);
|
||||
/* Search in LIBGL_DRIVERS_PATH if we're not setuid. */
|
||||
if (!PrivsElevated())
|
||||
path = getenv("LIBGL_DRIVERS_PATH");
|
||||
|
||||
if (!path)
|
||||
path = dri_driver_path;
|
||||
|
||||
do {
|
||||
const char *next;
|
||||
int path_len;
|
||||
|
||||
next = strchr(path, ':');
|
||||
if (next) {
|
||||
path_len = next - path;
|
||||
next++;
|
||||
} else {
|
||||
path_len = strlen(path);
|
||||
next = NULL;
|
||||
}
|
||||
|
||||
snprintf(filename, sizeof filename, "%.*s/%s_dri.so", path_len, path,
|
||||
driverName);
|
||||
|
||||
driver = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
|
||||
if (driver != NULL)
|
||||
break;
|
||||
|
||||
driver = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
|
||||
if (driver == NULL) {
|
||||
LogMessage(X_ERROR, "AIGLX error: dlopen of %s failed (%s)\n",
|
||||
filename, dlerror());
|
||||
|
||||
path = next;
|
||||
} while (path);
|
||||
|
||||
if (driver == NULL) {
|
||||
LogMessage(X_ERROR, "AIGLX error: unable to load driver %s\n",
|
||||
driverName);
|
||||
goto cleanup_failure;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user