diff options
-rw-r--r-- | src/gallium/state_trackers/dri/dri2.c | 65 |
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, |