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 <thellst...@vmware.com> --- src/gallium/state_trackers/dri/dri2.c | 65 ++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index ed6004f..eedcd21 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1880,6 +1880,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. */ @@ -1889,7 +1952,7 @@ static const __DRIextension *dri_screen_extensions[] = { &dri2FlushExtension.base, &dri2ImageExtension.base, &dri2RendererQueryExtension.base, - &dri2ConfigQueryExtension.base, + &dri2GalliumConfigQueryExtension.base, &dri2ThrottleExtension.base, &dri2FenceExtension.base, &dri2InteropExtension.base, -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev