[waffle] [PATCH 1/3] egl: add preliminary wegl_platform

Emil Velikov emil.l.velikov at gmail.com
Tue Aug 26 11:19:56 PDT 2014


On 26/08/14 18:47, Emil Velikov wrote:
> Will be used to store all the egl function pointers, in order to avoid
> linking against libEGL.so.
> 
Just occurred to me that I've done these before I realised that Android had a
separate buildsystem in Waffle. To avoid spamming the list, I will include it
in rev 2, along side all feedback that this batch gets.

-Emil

> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> ---
>  src/waffle/CMakeLists.txt             |  1 +
>  src/waffle/egl/wegl_platform.c        | 44 +++++++++++++++++++++++++++++++++
>  src/waffle/egl/wegl_platform.h        | 46 +++++++++++++++++++++++++++++++++++
>  src/waffle/gbm/wgbm_platform.c        | 22 ++++++++---------
>  src/waffle/gbm/wgbm_platform.h        |  8 +++---
>  src/waffle/wayland/wayland_platform.c | 22 ++++++++---------
>  src/waffle/wayland/wayland_platform.h |  8 +++---
>  src/waffle/xegl/xegl_platform.c       | 22 ++++++++---------
>  src/waffle/xegl/xegl_platform.h       |  8 +++---
>  9 files changed, 136 insertions(+), 45 deletions(-)
>  create mode 100644 src/waffle/egl/wegl_platform.c
>  create mode 100644 src/waffle/egl/wegl_platform.h
> 
> diff --git a/src/waffle/CMakeLists.txt b/src/waffle/CMakeLists.txt
> index 3fca87f..b7612e5 100644
> --- a/src/waffle/CMakeLists.txt
> +++ b/src/waffle/CMakeLists.txt
> @@ -85,6 +85,7 @@ if(waffle_has_egl)
>          egl/wegl_config.c
>          egl/wegl_context.c
>          egl/wegl_display.c
> +        egl/wegl_platform.c
>          egl/wegl_util.c
>          egl/wegl_window.c
>          )
> diff --git a/src/waffle/egl/wegl_platform.c b/src/waffle/egl/wegl_platform.c
> new file mode 100644
> index 0000000..b67e8d2
> --- /dev/null
> +++ b/src/waffle/egl/wegl_platform.c
> @@ -0,0 +1,44 @@
> +// Copyright 2014 Emil Velikov
> +//
> +// All rights reserved.
> +//
> +// Redistribution and use in source and binary forms, with or without
> +// modification, are permitted provided that the following conditions are met:
> +//
> +// - Redistributions of source code must retain the above copyright notice, this
> +//   list of conditions and the following disclaimer.
> +//
> +// - Redistributions in binary form must reproduce the above copyright notice,
> +//   this list of conditions and the following disclaimer in the documentation
> +//   and/or other materials provided with the distribution.
> +//
> +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
> +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
> +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +#include "wegl_platform.h"
> +
> +bool
> +wegl_platform_teardown(struct wegl_platform *self)
> +{
> +    bool ok;
> +
> +    ok = wcore_platform_teardown(&self->wcore);
> +    return ok;
> +}
> +bool
> +wegl_platform_init(struct wegl_platform *self)
> +{
> +    bool ok;
> +
> +    ok = wcore_platform_init(&self->wcore);
> +
> +    return ok;
> +}
> diff --git a/src/waffle/egl/wegl_platform.h b/src/waffle/egl/wegl_platform.h
> new file mode 100644
> index 0000000..43108dc
> --- /dev/null
> +++ b/src/waffle/egl/wegl_platform.h
> @@ -0,0 +1,46 @@
> +// Copyright 2014 Emil Velikov
> +//
> +// All rights reserved.
> +//
> +// Redistribution and use in source and binary forms, with or without
> +// modification, are permitted provided that the following conditions are met:
> +//
> +// - Redistributions of source code must retain the above copyright notice, this
> +//   list of conditions and the following disclaimer.
> +//
> +// - Redistributions in binary form must reproduce the above copyright notice,
> +//   this list of conditions and the following disclaimer in the documentation
> +//   and/or other materials provided with the distribution.
> +//
> +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
> +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
> +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
> +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +#pragma once
> +
> +#include "wcore_platform.h"
> +#include "wcore_util.h"
> +
> +struct wegl_platform {
> +    struct wcore_platform wcore;
> +
> +    // EGL function pointers
> +};
> +
> +DEFINE_CONTAINER_CAST_FUNC(wegl_platform,
> +                           struct wegl_platform,
> +                           struct wcore_platform,
> +                           wcore)
> +
> +bool
> +wegl_platform_teardown(struct wegl_platform *self);
> +
> +bool
> +wegl_platform_init(struct wegl_platform *self);
> diff --git a/src/waffle/gbm/wgbm_platform.c b/src/waffle/gbm/wgbm_platform.c
> index 5624660..906b9a3 100644
> --- a/src/waffle/gbm/wgbm_platform.c
> +++ b/src/waffle/gbm/wgbm_platform.c
> @@ -34,6 +34,7 @@
>  
>  #include "wegl_config.h"
>  #include "wegl_context.h"
> +#include "wegl_platform.h"
>  #include "wegl_util.h"
>  
>  #include "wgbm_config.h"
> @@ -46,7 +47,7 @@ static const struct wcore_platform_vtbl wgbm_platform_vtbl;
>  static bool
>  wgbm_platform_destroy(struct wcore_platform *wc_self)
>  {
> -    struct wgbm_platform *self = wgbm_platform(wc_self);
> +    struct wgbm_platform *self = wgbm_platform(wegl_platform(wc_self));
>      bool ok = true;
>  
>      if (!self)
> @@ -57,7 +58,7 @@ wgbm_platform_destroy(struct wcore_platform *wc_self)
>      if (self->linux)
>          ok &= linux_platform_destroy(self->linux);
>  
> -    ok &= wcore_platform_teardown(wc_self);
> +    ok &= wegl_platform_teardown(&self->wegl);
>      free(self);
>      return ok;
>  }
> @@ -72,7 +73,7 @@ wgbm_platform_create(void)
>      if (self == NULL)
>          return NULL;
>  
> -    ok = wcore_platform_init(&self->wcore);
> +    ok = wegl_platform_init(&self->wegl);
>      if (!ok)
>          goto error;
>  
> @@ -82,11 +83,11 @@ wgbm_platform_create(void)
>  
>      setenv("EGL_PLATFORM", "drm", true);
>  
> -    self->wcore.vtbl = &wgbm_platform_vtbl;
> -    return &self->wcore;
> +    self->wegl.wcore.vtbl = &wgbm_platform_vtbl;
> +    return &self->wegl.wcore;
>  
>  error:
> -    wgbm_platform_destroy(&self->wcore);
> +    wgbm_platform_destroy(&self->wegl.wcore);
>      return NULL;
>  }
>  
> @@ -94,8 +95,8 @@ static bool
>  wgbm_dl_can_open(struct wcore_platform *wc_self,
>                   int32_t waffle_dl)
>  {
> -    return linux_platform_dl_can_open(wgbm_platform(wc_self)->linux,
> -                                      waffle_dl);
> +    struct wgbm_platform *self = wgbm_platform(wegl_platform(wc_self));
> +    return linux_platform_dl_can_open(self->linux, waffle_dl);
>  }
>  
>  static void*
> @@ -103,9 +104,8 @@ wgbm_dl_sym(struct wcore_platform *wc_self,
>              int32_t waffle_dl,
>              const char *name)
>  {
> -    return linux_platform_dl_sym(wgbm_platform(wc_self)->linux,
> -                                 waffle_dl,
> -                                 name);
> +    struct wgbm_platform *self = wgbm_platform(wegl_platform(wc_self));
> +    return linux_platform_dl_sym(self->linux, waffle_dl, name);
>  }
>  
>  static union waffle_native_context*
> diff --git a/src/waffle/gbm/wgbm_platform.h b/src/waffle/gbm/wgbm_platform.h
> index c833780..11a5867 100644
> --- a/src/waffle/gbm/wgbm_platform.h
> +++ b/src/waffle/gbm/wgbm_platform.h
> @@ -30,20 +30,20 @@
>  
>  #undef linux
>  
> -#include "wcore_platform.h"
> +#include "wegl_platform.h"
>  #include "wcore_util.h"
>  
>  struct linux_platform;
>  
>  struct wgbm_platform {
> -    struct wcore_platform wcore;
> +    struct wegl_platform wegl;
>      struct linux_platform *linux;
>  };
>  
>  DEFINE_CONTAINER_CAST_FUNC(wgbm_platform,
>                             struct wgbm_platform,
> -                           struct wcore_platform,
> -                           wcore)
> +                           struct wegl_platform,
> +                           wegl)
>  
>  struct wcore_platform*
>  wgbm_platform_create(void);
> diff --git a/src/waffle/wayland/wayland_platform.c b/src/waffle/wayland/wayland_platform.c
> index 8ca30d4..63cfdc2 100644
> --- a/src/waffle/wayland/wayland_platform.c
> +++ b/src/waffle/wayland/wayland_platform.c
> @@ -36,6 +36,7 @@
>  
>  #include "wegl_config.h"
>  #include "wegl_context.h"
> +#include "wegl_platform.h"
>  #include "wegl_util.h"
>  
>  #include "wayland_display.h"
> @@ -47,7 +48,7 @@ static const struct wcore_platform_vtbl wayland_platform_vtbl;
>  static bool
>  wayland_platform_destroy(struct wcore_platform *wc_self)
>  {
> -    struct wayland_platform *self = wayland_platform(wc_self);
> +    struct wayland_platform *self = wayland_platform(wegl_platform(wc_self));
>      bool ok = true;
>  
>      if (!self)
> @@ -58,7 +59,7 @@ wayland_platform_destroy(struct wcore_platform *wc_self)
>      if (self->linux)
>          ok &= linux_platform_destroy(self->linux);
>  
> -    ok &= wcore_platform_teardown(wc_self);
> +    ok &= wegl_platform_teardown(&self->wegl);
>      free(self);
>      return ok;
>  }
> @@ -73,7 +74,7 @@ wayland_platform_create(void)
>      if (self == NULL)
>          return NULL;
>  
> -    ok = wcore_platform_init(&self->wcore);
> +    ok = wegl_platform_init(&self->wegl);
>      if (!ok)
>          goto error;
>  
> @@ -83,11 +84,11 @@ wayland_platform_create(void)
>  
>      setenv("EGL_PLATFORM", "wayland", true);
>  
> -    self->wcore.vtbl = &wayland_platform_vtbl;
> -    return &self->wcore;
> +    self->wegl.wcore.vtbl = &wayland_platform_vtbl;
> +    return &self->wegl.wcore;
>  
>  error:
> -    wayland_platform_destroy(&self->wcore);
> +    wayland_platform_destroy(&self->wegl.wcore);
>      return NULL;
>  }
>  
> @@ -95,8 +96,8 @@ static bool
>  wayland_dl_can_open(struct wcore_platform *wc_self,
>                               int32_t waffle_dl)
>  {
> -    return linux_platform_dl_can_open(wayland_platform(wc_self)->linux,
> -                                      waffle_dl);
> +    struct wayland_platform *self = wayland_platform(wegl_platform(wc_self));
> +    return linux_platform_dl_can_open(self->linux, waffle_dl);
>  }
>  
>  static void*
> @@ -104,9 +105,8 @@ wayland_dl_sym(struct wcore_platform *wc_self,
>                          int32_t waffle_dl,
>                          const char *name)
>  {
> -    return linux_platform_dl_sym(wayland_platform(wc_self)->linux,
> -                                                  waffle_dl,
> -                                                  name);
> +    struct wayland_platform *self = wayland_platform(wegl_platform(wc_self));
> +    return linux_platform_dl_sym(self->linux, waffle_dl, name);
>  }
>  
>  static union waffle_native_config*
> diff --git a/src/waffle/wayland/wayland_platform.h b/src/waffle/wayland/wayland_platform.h
> index 41ca8f5..c4e870f 100644
> --- a/src/waffle/wayland/wayland_platform.h
> +++ b/src/waffle/wayland/wayland_platform.h
> @@ -32,20 +32,20 @@
>  
>  #include "waffle_wayland.h"
>  
> -#include "wcore_platform.h"
> +#include "wegl_platform.h"
>  #include "wcore_util.h"
>  
>  struct linux_platform;
>  
>  struct wayland_platform {
> -    struct wcore_platform wcore;
> +    struct wegl_platform wegl;
>      struct linux_platform *linux;
>  };
>  
>  DEFINE_CONTAINER_CAST_FUNC(wayland_platform,
>                             struct wayland_platform,
> -                           struct wcore_platform,
> -                           wcore)
> +                           struct wegl_platform,
> +                           wegl)
>  
>  struct wcore_platform*
>  wayland_platform_create(void);
> diff --git a/src/waffle/xegl/xegl_platform.c b/src/waffle/xegl/xegl_platform.c
> index 71bf23c..e36a41b 100644
> --- a/src/waffle/xegl/xegl_platform.c
> +++ b/src/waffle/xegl/xegl_platform.c
> @@ -31,6 +31,7 @@
>  
>  #include "wegl_config.h"
>  #include "wegl_context.h"
> +#include "wegl_platform.h"
>  #include "wegl_util.h"
>  
>  #include "linux_platform.h"
> @@ -44,7 +45,7 @@ static const struct wcore_platform_vtbl xegl_platform_vtbl;
>  static bool
>  xegl_platform_destroy(struct wcore_platform *wc_self)
>  {
> -    struct xegl_platform *self = xegl_platform(wc_self);
> +    struct xegl_platform *self = xegl_platform(wegl_platform(wc_self));
>      bool ok = true;
>  
>      if (!self)
> @@ -55,7 +56,7 @@ xegl_platform_destroy(struct wcore_platform *wc_self)
>      if (self->linux)
>          ok &= linux_platform_destroy(self->linux);
>  
> -    ok &= wcore_platform_teardown(wc_self);
> +    ok &= wegl_platform_teardown(&self->wegl);
>      free(self);
>      return ok;
>  }
> @@ -70,7 +71,7 @@ xegl_platform_create(void)
>      if (self == NULL)
>          return NULL;
>  
> -    ok = wcore_platform_init(&self->wcore);
> +    ok = wegl_platform_init(&self->wegl);
>      if (!ok)
>          goto error;
>  
> @@ -80,11 +81,11 @@ xegl_platform_create(void)
>  
>      setenv("EGL_PLATFORM", "x11", true);
>  
> -    self->wcore.vtbl = &xegl_platform_vtbl;
> -    return &self->wcore;
> +    self->wegl.wcore.vtbl = &xegl_platform_vtbl;
> +    return &self->wegl.wcore;
>  
>  error:
> -    xegl_platform_destroy(&self->wcore);
> +    xegl_platform_destroy(&self->wegl.wcore);
>      return NULL;
>  }
>  
> @@ -92,8 +93,8 @@ static bool
>  xegl_dl_can_open(struct wcore_platform *wc_self,
>                   int32_t waffle_dl)
>  {
> -    return linux_platform_dl_can_open(xegl_platform(wc_self)->linux,
> -                                      waffle_dl);
> +    struct xegl_platform *self = xegl_platform(wegl_platform(wc_self));
> +    return linux_platform_dl_can_open(self->linux, waffle_dl);
>  }
>  
>  static void*
> @@ -101,9 +102,8 @@ xegl_dl_sym(struct wcore_platform *wc_self,
>              int32_t waffle_dl,
>              const char *name)
>  {
> -    return linux_platform_dl_sym(xegl_platform(wc_self)->linux,
> -                                               waffle_dl,
> -                                               name);
> +    struct xegl_platform *self = xegl_platform(wegl_platform(wc_self));
> +    return linux_platform_dl_sym(self->linux, waffle_dl, name);
>  }
>  
>  static union waffle_native_config*
> diff --git a/src/waffle/xegl/xegl_platform.h b/src/waffle/xegl/xegl_platform.h
> index 835f360..003343f 100644
> --- a/src/waffle/xegl/xegl_platform.h
> +++ b/src/waffle/xegl/xegl_platform.h
> @@ -31,20 +31,20 @@
>  
>  #include "waffle_x11_egl.h"
>  
> -#include "wcore_platform.h"
> +#include "wegl_platform.h"
>  #include "wcore_util.h"
>  
>  struct linux_platform;
>  
>  struct xegl_platform {
> -    struct wcore_platform wcore;
> +    struct wegl_platform wegl;
>      struct linux_platform *linux;
>  };
>  
>  DEFINE_CONTAINER_CAST_FUNC(xegl_platform,
>                             struct xegl_platform,
> -                           struct wcore_platform,
> -                           wcore)
> +                           struct wegl_platform,
> +                           wegl)
>  
>  struct wcore_platform*
>  xegl_platform_create(void);
> 



More information about the waffle mailing list