summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
diff options
context:
space:
mode:
authorThomas Hellstrom <[email protected]>2017-05-05 05:49:50 -0700
committerThomas Hellstrom <[email protected]>2017-06-07 19:43:54 +0200
commitff2978b44944790abd860548e111907588a23b0d (patch)
treeb70367580aa7589f026e1d3708ae2562008f8608 /src/gallium/state_trackers
parent7d67cbefe05e9d8bb93fb8be270703a4a7d9a73d (diff)
st/dri: Allow dri users to query also driver options
There will be situations where we want to control, for example, the GLX behaviour based on applications and drivers. So allow DRI users access to the driver options. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r--src/gallium/state_trackers/dri/dri2.c65
1 files changed, 64 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
index 20dee03b8bd..625678f2575 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1678,6 +1678,69 @@ static const __DRI2interopExtension dri2InteropExtension = {
.export_object = dri2_interop_export_object
};
+/**
+ * \brief the DRI2ConfigQueryExtension configQueryb method
+ */
+static int
+dri2GalliumConfigQueryb(__DRIscreen *sPriv, const char *var,
+ unsigned char *val)
+{
+ struct dri_screen *screen = dri_screen(sPriv);
+
+ if (!driCheckOption(&screen->optionCache, var, DRI_BOOL))
+ return dri2ConfigQueryExtension.configQueryb(sPriv, var, val);
+
+ *val = driQueryOptionb(&screen->optionCache, var);
+
+ return 0;
+}
+
+/**
+ * \brief the DRI2ConfigQueryExtension configQueryi method
+ */
+static int
+dri2GalliumConfigQueryi(__DRIscreen *sPriv, const char *var, int *val)
+{
+ struct dri_screen *screen = dri_screen(sPriv);
+
+ if (!driCheckOption(&screen->optionCache, var, DRI_INT) &&
+ !driCheckOption(&screen->optionCache, var, DRI_ENUM))
+ return dri2ConfigQueryExtension.configQueryi(sPriv, var, val);
+
+ *val = driQueryOptioni(&screen->optionCache, var);
+
+ return 0;
+}
+
+/**
+ * \brief the DRI2ConfigQueryExtension configQueryf method
+ */
+static int
+dri2GalliumConfigQueryf(__DRIscreen *sPriv, const char *var, float *val)
+{
+ struct dri_screen *screen = dri_screen(sPriv);
+
+ if (!driCheckOption(&screen->optionCache, var, DRI_FLOAT))
+ return dri2ConfigQueryExtension.configQueryf(sPriv, var, val);
+
+ *val = driQueryOptionf(&screen->optionCache, var);
+
+ return 0;
+}
+
+/**
+ * \brief the DRI2ConfigQueryExtension struct.
+ *
+ * We first query the driver option cache. Then the dri2 option cache.
+ */
+static const __DRI2configQueryExtension dri2GalliumConfigQueryExtension = {
+ .base = { __DRI2_CONFIG_QUERY, 1 },
+
+ .configQueryb = dri2GalliumConfigQueryb,
+ .configQueryi = dri2GalliumConfigQueryi,
+ .configQueryf = dri2GalliumConfigQueryf,
+};
+
/*
* Backend function init_screen.
*/
@@ -1687,7 +1750,7 @@ static const __DRIextension *dri_screen_extensions[] = {
&dri2FlushExtension.base,
&dri2ImageExtension.base,
&dri2RendererQueryExtension.base,
- &dri2ConfigQueryExtension.base,
+ &dri2GalliumConfigQueryExtension.base,
&dri2ThrottleExtension.base,
&dri2FenceExtension.base,
&dri2InteropExtension.base,