diff options
author | Marek Olšák <[email protected]> | 2017-07-28 17:30:34 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-07-31 12:49:30 +0200 |
commit | 1bf703e4ea5c4f742bc7ba55d01e5afc3f4e11f9 (patch) | |
tree | 11fe6774ef619cc9a5f073c58c5cf19ddedb611d /src/gallium/state_trackers/dri | |
parent | 5d8359ff4d8c379fdf1a78758f405bb4cdf69459 (diff) |
dri_interface,egl,gallium: only expose RGBA visuals on Android
X/GLX can't handle them. This removes almost 500 GLX visuals that were
incorrectly exposed.
Add an optional getCapability callback for querying what the loader can do.
I'm not splitting this patch, because it's already too small.
v2: also add the callback to __DRIimageLoaderExtension
Reviewed-by: Nicolai Hähnle <[email protected]>
Cc: 17.2 <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/dri')
-rw-r--r-- | src/gallium/state_trackers/dri/dri_screen.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 59a850b1423..890a8bff4c6 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -124,6 +124,21 @@ dri_fill_st_options(struct dri_screen *screen) driComputeOptionsSha1(optionCache, options->config_options_sha1); } +static unsigned +dri_loader_get_cap(struct dri_screen *screen, enum dri_loader_cap cap) +{ + const __DRIdri2LoaderExtension *dri2_loader = screen->sPriv->dri2.loader; + const __DRIimageLoaderExtension *image_loader = screen->sPriv->image.loader; + + if (dri2_loader && dri2_loader->base.version >= 4) + return dri2_loader->getCapability(screen->sPriv->loaderPrivate, cap); + + if (image_loader && image_loader->base.version >= 2) + return image_loader->getCapability(screen->sPriv->loaderPrivate, cap); + + return 0; +} + static const __DRIconfig ** dri_fill_in_modes(struct dri_screen *screen) { @@ -235,8 +250,15 @@ dri_fill_in_modes(struct dri_screen *screen) assert(ARRAY_SIZE(mesa_formats) == ARRAY_SIZE(pipe_formats)); + /* Expose only BGRA ordering if the loader doesn't support RGBA ordering. */ + unsigned num_formats; + if (dri_loader_get_cap(screen, DRI_LOADER_CAP_RGBA_ORDERING)) + num_formats = ARRAY_SIZE(mesa_formats); + else + num_formats = 5; + /* Add configs. */ - for (format = 0; format < ARRAY_SIZE(mesa_formats); format++) { + for (format = 0; format < num_formats; format++) { __DRIconfig **new_configs = NULL; unsigned num_msaa_modes = 0; /* includes a single-sample mode */ uint8_t msaa_modes[MSAA_VISUAL_MAX_SAMPLES]; |