[waffle] [PATCH 2/4] egl: fold eglGetConfigAttrib() within wegl_config_choose()

Emil Velikov emil.l.velikov at gmail.com
Mon May 16 10:48:08 UTC 2016


Rather than having the call in multiple places and multiple times, just
query the native visual id once and store it for later use.

Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
 src/waffle/egl/wegl_config.c   |  7 +++++++
 src/waffle/egl/wegl_config.h   |  1 +
 src/waffle/gbm/wgbm_config.c   | 39 ---------------------------------------
 src/waffle/gbm/wgbm_config.h   | 10 ----------
 src/waffle/gbm/wgbm_platform.c |  2 +-
 src/waffle/gbm/wgbm_window.c   |  7 ++-----
 src/waffle/xegl/xegl_window.c  | 13 +------------
 7 files changed, 12 insertions(+), 67 deletions(-)

diff --git a/src/waffle/egl/wegl_config.c b/src/waffle/egl/wegl_config.c
index 08e06fb..892bfef 100644
--- a/src/waffle/egl/wegl_config.c
+++ b/src/waffle/egl/wegl_config.c
@@ -230,6 +230,7 @@ wegl_config_choose(struct wcore_platform *wc_plat,
                    struct wcore_display *wc_dpy,
                    const struct wcore_config_attrs *attrs)
 {
+    struct wegl_platform *plat = wegl_platform(wc_plat);
     struct wegl_display *dpy = wegl_display(wc_dpy);
     struct wegl_config *config;
     bool ok;
@@ -251,6 +252,12 @@ wegl_config_choose(struct wcore_platform *wc_plat,
     if (!config->egl)
         goto fail;
 
+    ok = plat->eglGetConfigAttrib(dpy->egl, config->egl,
+                                  EGL_NATIVE_VISUAL_ID, &config->visual);
+
+    if (!ok)
+        goto fail;
+
     return &config->wcore;
 
 fail:
diff --git a/src/waffle/egl/wegl_config.h b/src/waffle/egl/wegl_config.h
index a9e3cb9..3e3cec9 100644
--- a/src/waffle/egl/wegl_config.h
+++ b/src/waffle/egl/wegl_config.h
@@ -40,6 +40,7 @@ struct wcore_config_attrs;
 struct wegl_config {
     struct wcore_config wcore;
     EGLConfig egl;
+    EGLint visual;
 };
 
 DEFINE_CONTAINER_CAST_FUNC(wegl_config,
diff --git a/src/waffle/gbm/wgbm_config.c b/src/waffle/gbm/wgbm_config.c
index 1d64b71..7383425 100644
--- a/src/waffle/gbm/wgbm_config.c
+++ b/src/waffle/gbm/wgbm_config.c
@@ -30,45 +30,6 @@
 #include "wgbm_config.h"
 #include "wgbm_display.h"
 
-struct wcore_config*
-wgbm_config_choose(struct wcore_platform *wc_plat,
-                   struct wcore_display *wc_dpy,
-                   const struct wcore_config_attrs *attrs)
-{
-    struct wcore_config *wc_config = wegl_config_choose(wc_plat, wc_dpy, attrs);
-    if (!wc_config)
-        return NULL;
-
-    if (wgbm_config_get_gbm_format(wc_plat, wc_dpy, wc_config) == 0) {
-        wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM,
-                     "requested config is unsupported on GBM");
-        wegl_config_destroy(wc_config);
-        return NULL;
-    }
-
-    return wc_config;
-}
-
-uint32_t
-wgbm_config_get_gbm_format(struct wcore_platform *wc_plat,
-                           struct wcore_display *wc_display,
-                           struct wcore_config *wc_config)
-{
-    EGLint gbm_format;
-    struct wegl_display *dpy = wegl_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->egl,
-                                       egl_config->egl,
-                                       EGL_NATIVE_VISUAL_ID,
-                                       &gbm_format);
-
-    if (!ok) {
-        return 0;
-    }
-    return gbm_format;
-}
-
 union waffle_native_config*
 wgbm_config_get_native(struct wcore_config *wc_config)
 {
diff --git a/src/waffle/gbm/wgbm_config.h b/src/waffle/gbm/wgbm_config.h
index 2c58321..6ee2cdd 100644
--- a/src/waffle/gbm/wgbm_config.h
+++ b/src/waffle/gbm/wgbm_config.h
@@ -34,15 +34,5 @@
 
 union waffle_native_config;
 
-struct wcore_config*
-wgbm_config_choose(struct wcore_platform *wc_plat,
-                   struct wcore_display *wc_dpy,
-                   const struct wcore_config_attrs *attrs);
-
-uint32_t
-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_platform.c b/src/waffle/gbm/wgbm_platform.c
index 0fc0352..5e36534 100644
--- a/src/waffle/gbm/wgbm_platform.c
+++ b/src/waffle/gbm/wgbm_platform.c
@@ -194,7 +194,7 @@ static const struct wcore_platform_vtbl wgbm_platform_vtbl = {
     },
 
     .config = {
-        .choose = wgbm_config_choose,
+        .choose = wegl_config_choose,
         .destroy = wegl_config_destroy,
         .get_native = wgbm_config_get_native,
     },
diff --git a/src/waffle/gbm/wgbm_window.c b/src/waffle/gbm/wgbm_window.c
index 313304b..d217992 100644
--- a/src/waffle/gbm/wgbm_window.c
+++ b/src/waffle/gbm/wgbm_window.c
@@ -67,7 +67,6 @@ wgbm_window_create(struct wcore_platform *wc_plat,
     struct wgbm_display *dpy = wgbm_display(wc_config->display);
     struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat));
     struct wgbm_window *self;
-    uint32_t gbm_format;
     bool ok = true;
 
     if (width == -1 && height == -1) {
@@ -85,11 +84,9 @@ wgbm_window_create(struct wcore_platform *wc_plat,
     if (self == NULL)
         return NULL;
 
-    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,
+                                                 width, height,
+                                                 wegl_config(wc_config)->visual,
                                                  GBM_BO_USE_RENDERING);
     if (!self->gbm_surface) {
         wcore_errorf(WAFFLE_ERROR_UNKNOWN,
diff --git a/src/waffle/xegl/xegl_window.c b/src/waffle/xegl/xegl_window.c
index cd2be46..e2b8b3d 100644
--- a/src/waffle/xegl/xegl_window.c
+++ b/src/waffle/xegl/xegl_window.c
@@ -63,8 +63,6 @@ xegl_window_create(struct wcore_platform *wc_plat,
     struct xegl_window *self;
     struct xegl_display *dpy = xegl_display(wc_config->display);
     struct wegl_config *config = wegl_config(wc_config);
-    struct wegl_platform *plat = wegl_platform(wc_plat);
-    xcb_visualid_t visual;
     bool ok = true;
 
     if (width == -1 && height == -1) {
@@ -81,18 +79,9 @@ xegl_window_create(struct wcore_platform *wc_plat,
     if (self == NULL)
         return NULL;
 
-    ok = plat->eglGetConfigAttrib(dpy->wegl.egl,
-                                  config->egl,
-                                  EGL_NATIVE_VISUAL_ID,
-                                  (EGLint*) &visual);
-    if (!ok) {
-        wegl_emit_error(plat, "eglGetConfigAttrib(EGL_NATIVE_VISUAL_ID)");
-        goto error;
-    }
-
     ok = x11_window_init(&self->x11,
                          &dpy->x11,
-                         visual,
+                         (xcb_visualid_t) config->visual,
                          width,
                          height);
     if (!ok)
-- 
2.6.2



More information about the waffle mailing list