summaryrefslogtreecommitdiffstats
path: root/src/glx/dri_glx.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-06-26 15:15:57 -0700
committerEric Anholt <eric@anholt.net>2013-10-24 14:04:20 -0700
commitcf5d8fc310dbf59a61e4859b79219b3ac3b223ac (patch)
tree7b9e509193702046b0c01a7af1bc272699091f8e /src/glx/dri_glx.c
parent80806c98ef9892abb225965f29027c9b201749ec (diff)
downloadexternal_mesa3d-cf5d8fc310dbf59a61e4859b79219b3ac3b223ac.zip
external_mesa3d-cf5d8fc310dbf59a61e4859b79219b3ac3b223ac.tar.gz
external_mesa3d-cf5d8fc310dbf59a61e4859b79219b3ac3b223ac.tar.bz2
dri: Allow config options to be passed to the loader through extensions.
Turns out already we have this nice mechanism for providing optional things from the driver to the loader, and I was going to have to rename the public global symbol to avoid conflicts when doing megadrivers. While the former __driConfigOptions is technically loader interface, this is the only loader that made use of that symbol. Continue paying attention to it if we can't find the new option, to retain compatibility with old drivers. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Diffstat (limited to 'src/glx/dri_glx.c')
-rw-r--r--src/glx/dri_glx.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c
index faed9d0..a1475b0 100644
--- a/src/glx/dri_glx.c
+++ b/src/glx/dri_glx.c
@@ -184,10 +184,21 @@ _X_EXPORT const char *
glXGetDriverConfig(const char *driverName)
{
void *handle = driOpenDriver(driverName);
- if (handle)
- return dlsym(handle, "__driConfigOptions");
- else
+ const __DRIextension **extensions;
+
+ if (!handle)
return NULL;
+
+ extensions = driGetDriverExtensions(handle);
+ if (extensions) {
+ for (int i = 0; extensions[i]; i++) {
+ if (strcmp(extensions[i]->name, __DRI_CONFIG_OPTIONS) == 0)
+ return ((__DRIconfigOptionsExtension *)extensions[i])->xml;
+ }
+ }
+
+ /* Fall back to the old method */
+ return dlsym(handle, "__driConfigOptions");
}
#ifdef XDAMAGE_1_1_INTERFACE