aboutsummaryrefslogtreecommitdiff
path: root/src/waffle/gbm/wgbm_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/waffle/gbm/wgbm_config.c')
-rw-r--r--src/waffle/gbm/wgbm_config.c26
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*