summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/GL/internal/dri_interface.h20
-rw-r--r--src/glx/dri_glx.c17
2 files changed, 28 insertions, 9 deletions
diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
index 33b41ea3b50..3e54d602065 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -330,12 +330,6 @@ struct __DRI2throttleExtensionRec {
enum __DRI2throttleReason reason);
};
-/**
- * XML document describing the configuration options supported by the
- * driver.
- */
-extern const char __driConfigOptions[];
-
/*@}*/
/**
@@ -1226,4 +1220,18 @@ struct __DRIrobustnessExtensionRec {
__DRIextension base;
};
+/**
+ * DRI config options extension.
+ *
+ * This extension provides the XML string containing driver options for use by
+ * the loader in supporting the driconf application.
+ */
+#define __DRI_CONFIG_OPTIONS "DRI_ConfigOptions"
+#define __DRI_CONFIG_OPTIONS_VERSION 1
+
+typedef struct __DRIconfigOptionsExtensionRec {
+ __DRIextension base;
+ const char *xml;
+} __DRIconfigOptionsExtension;
+
#endif
diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c
index faed9d0d16d..a1475b02ba6 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