diff options
Diffstat (limited to 'src/waffle/gbm/wgbm_config.c')
-rw-r--r-- | src/waffle/gbm/wgbm_config.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/waffle/gbm/wgbm_config.c b/src/waffle/gbm/wgbm_config.c index 480c2bf..549e270 100644 --- a/src/waffle/gbm/wgbm_config.c +++ b/src/waffle/gbm/wgbm_config.c @@ -33,7 +33,8 @@ wgbm_config_choose(struct wcore_platform *wc_plat, struct wcore_display *wc_dpy, const struct wcore_config_attrs *attrs) { - if (wgbm_config_get_gbm_format(attrs) == 0) { + struct wcore_config *config = wegl_config_choose(wc_plat, wc_dpy, attrs); + if (wgbm_config_get_gbm_format(wc_plat, wc_dpy, config) == 0) { wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM, "requested config is unsupported on GBM"); return NULL; @@ -43,19 +44,22 @@ wgbm_config_choose(struct wcore_platform *wc_plat, } uint32_t -wgbm_config_get_gbm_format(const struct wcore_config_attrs *attrs) +wgbm_config_get_gbm_format(struct wcore_platform *wc_plat, + struct wcore_display *wc_display, + struct wcore_config *wc_config) { - if (attrs->red_size > 8 || attrs->blue_size > 8 || - attrs->green_size > 8 || attrs->alpha_size > 8) { + EGLint gbm_format; + struct wgbm_display *dpy = wgbm_display(wc_display); + struct wegl_config *egl_config = wegl_config(wc_config); + bool ok = eglGetConfigAttrib(dpy->wegl.egl, + egl_config->egl, + EGL_NATIVE_VISUAL_ID, + &gbm_format); + + if (!ok) { return 0; } - - if (attrs->alpha_size <= 0) - return GBM_FORMAT_XRGB8888; - else if (attrs->alpha_size <= 8) - return GBM_FORMAT_ABGR8888; - - return 0; + return gbm_format; } union waffle_native_config* |