summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Versace <chad.versace@intel.com>2015-02-26 12:50:58 -0800
committerChad Versace <chad.versace@intel.com>2015-02-26 12:50:58 -0800
commit9f003eb55d2ec3918a77905de810de9e0d37e5f3 (patch)
treedd57be87d72fbf852e53eb68aba98773edf69c8c
parent25cc8d93eae807ab49df37bef5061bb7105a255f (diff)
parent2bb939095c1d09c79dad5ab5da123ec77eb4ea61 (diff)
Merge branch 'maint-1.5'
* maint-1.5: gbm: Use EGLConfig to select the correct gbm format
-rw-r--r--src/waffle/gbm/wgbm_config.c29
-rw-r--r--src/waffle/gbm/wgbm_config.h4
-rw-r--r--src/waffle/gbm/wgbm_window.c3
3 files changed, 23 insertions, 13 deletions
diff --git a/src/waffle/gbm/wgbm_config.c b/src/waffle/gbm/wgbm_config.c
index 480c2bf..be1d4e3 100644
--- a/src/waffle/gbm/wgbm_config.c
+++ b/src/waffle/gbm/wgbm_config.c
@@ -25,6 +25,8 @@
#include "wcore_error.h"
+#include "wegl_platform.h"
+
#include "wgbm_config.h"
#include "wgbm_display.h"
@@ -33,7 +35,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 +46,23 @@ 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_platform *plat = wegl_platform(wc_plat);
+ struct wegl_config *egl_config = wegl_config(wc_config);
+ bool ok = plat->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*
diff --git a/src/waffle/gbm/wgbm_config.h b/src/waffle/gbm/wgbm_config.h
index 8c83270..2c58321 100644
--- a/src/waffle/gbm/wgbm_config.h
+++ b/src/waffle/gbm/wgbm_config.h
@@ -40,7 +40,9 @@ wgbm_config_choose(struct wcore_platform *wc_plat,
const struct wcore_config_attrs *attrs);
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_dpy,
+ struct wcore_config *wc_config);
union waffle_native_config*
wgbm_config_get_native(struct wcore_config *wc_config);
diff --git a/src/waffle/gbm/wgbm_window.c b/src/waffle/gbm/wgbm_window.c
index 9fbf1be..b75b5e3 100644
--- a/src/waffle/gbm/wgbm_window.c
+++ b/src/waffle/gbm/wgbm_window.c
@@ -79,7 +79,8 @@ wgbm_window_create(struct wcore_platform *wc_plat,
if (self == NULL)
return NULL;
- gbm_format = wgbm_config_get_gbm_format(&wc_config->attrs);
+ gbm_format = wgbm_config_get_gbm_format(wc_plat, wc_config->display,
+ wc_config);
assert(gbm_format != 0);
self->gbm_surface = plat->gbm_surface_create(dpy->gbm_device,
width, height, gbm_format,