68 lines
2.4 KiB
Diff
68 lines
2.4 KiB
Diff
From 7ecfab47eb221dbb996ea6c033348b8eceaeb893 Mon Sep 17 00:00:00 2001
|
|
From: Eric Anholt <eric@anholt.net>
|
|
Date: Tue, 22 Oct 2013 21:22:04 +0000
|
|
Subject: glx: Add support for the new DRI loader entrypoint.
|
|
|
|
This is going to be exposed (and not the old entrypoint) for some DRI
|
|
drivers once the megadrivers series lands, and the plan is to
|
|
eventually transition all drivers to that. Hopefully this is
|
|
unobtrusive enough to merge to stable X servers so that they can be
|
|
compatible with new Mesa versions.
|
|
|
|
v2: typo fix in the comment
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
|
Signed-off-by: Keith Packard <keithp@keithp.com>
|
|
---
|
|
diff --git a/glx/glxdricommon.c b/glx/glxdricommon.c
|
|
index b027f24..0ab3e30 100644
|
|
--- glx/glxdricommon.c
|
|
+++ glx/glxdricommon.c
|
|
@@ -211,6 +211,14 @@ glxConvertConfigs(const __DRIcoreExtension * core,
|
|
|
|
static const char dri_driver_path[] = DRI_DRIVER_PATH;
|
|
|
|
+/* Temporary define to allow building without a dri_interface.h from
|
|
+ * updated Mesa. Some day when we don't care about Mesa that old any
|
|
+ * more this can be removed.
|
|
+ */
|
|
+#ifndef __DRI_DRIVER_GET_EXTENSIONS
|
|
+#define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions"
|
|
+#endif
|
|
+
|
|
void *
|
|
glxProbeDriver(const char *driverName,
|
|
void **coreExt, const char *coreName, int coreVersion,
|
|
@@ -219,7 +227,8 @@ glxProbeDriver(const char *driverName,
|
|
int i;
|
|
void *driver;
|
|
char filename[PATH_MAX];
|
|
- const __DRIextension **extensions;
|
|
+ char *get_extensions_name;
|
|
+ const __DRIextension **extensions = NULL;
|
|
|
|
snprintf(filename, sizeof filename, "%s/%s_dri.so",
|
|
dri_driver_path, driverName);
|
|
@@ -231,7 +240,18 @@ glxProbeDriver(const char *driverName,
|
|
goto cleanup_failure;
|
|
}
|
|
|
|
- extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
|
|
+ if (asprintf(&get_extensions_name, "%s_%s",
|
|
+ __DRI_DRIVER_GET_EXTENSIONS, driverName) != -1) {
|
|
+ const __DRIextension **(*get_extensions)(void);
|
|
+
|
|
+ get_extensions = dlsym(driver, get_extensions_name);
|
|
+ if (get_extensions)
|
|
+ extensions = get_extensions();
|
|
+ free(get_extensions_name);
|
|
+ }
|
|
+
|
|
+ if (!extensions)
|
|
+ extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
|
|
if (extensions == NULL) {
|
|
LogMessage(X_ERROR, "AIGLX error: %s exports no extensions (%s)\n",
|
|
driverName, dlerror());
|
|
--
|
|
cgit v0.9.0.2-2-gbebe
|