[waffle] [PATCH 3/8] egl: Move each platform's setenv("EGL_PLATFORM") into core EGL code (v2)
Chad Versace
chadversary at chromium.org
Mon Oct 24 21:57:58 UTC 2016
Each EGL platform 'foo' calls setenv("EGL_PLATFORM", "foo") during
foo_platform_create(), and calls unsetenv("EGL_PLATFORM") during
foo_platform_destroy(). Move the setenv/unsetenv into the core EGL code,
into wegl_platform_init() and wegl_platform_finish().
This prepares for eventually using eglGetPlatformDisplay().
v2: Don't set EGL_PLATFORM on Anroid. (for emil)
Cc: Emil Velikov <emil.l.velikov at gmail.com>
---
src/waffle/egl/wegl_platform.c | 30 ++++++++++++++++++++++++++++++
src/waffle/gbm/wgbm_platform.c | 6 ------
src/waffle/wayland/wayland_platform.c | 5 -----
src/waffle/xegl/xegl_platform.c | 6 ------
4 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/src/waffle/egl/wegl_platform.c b/src/waffle/egl/wegl_platform.c
index 7f030bd..d09febc 100644
--- a/src/waffle/egl/wegl_platform.c
+++ b/src/waffle/egl/wegl_platform.c
@@ -23,6 +23,8 @@
// 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.
+#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
+
#include <dlfcn.h>
#include "wcore_error.h"
@@ -35,12 +37,38 @@ static const char *libEGL_filename = "libEGL.so";
static const char *libEGL_filename = "libEGL.so.1";
#endif
+static void
+setup_env(const struct wegl_platform *self)
+{
+ switch (self->egl_platform) {
+ case EGL_PLATFORM_ANDROID_KHR:
+ // Don't set EGL_PLATFORM because I don't know the impact doing so
+ // on Android. Does anything other than Mesa use it?
+ break;
+ case EGL_PLATFORM_GBM_KHR:
+ setenv("EGL_PLATFORM", "drm", true);
+ break;
+ case EGL_PLATFORM_WAYLAND_KHR:
+ setenv("EGL_PLATFORM", "wayland", true);
+ break;
+ case EGL_PLATFORM_X11_KHR:
+ setenv("EGL_PLATFORM", "x11", true);
+ break;
+ default:
+ assert(!"bad egl_platform enum");
+ break;
+ }
+}
+
bool
wegl_platform_teardown(struct wegl_platform *self)
{
bool ok = true;
int error = 0;
+ if (self->egl_platform != EGL_PLATFORM_ANDROID_KHR)
+ unsetenv("EGL_PLATFORM");
+
if (self->eglHandle) {
error = dlclose(self->eglHandle);
if (error) {
@@ -114,6 +142,8 @@ wegl_platform_init(struct wegl_platform *self, EGLenum egl_platform)
#undef RETRIEVE_EGL_SYMBOL
+ setup_env(self);
+
error:
// On failure the caller of wegl_platform_init will trigger it's own
// destruction which will execute wegl_platform_teardown.
diff --git a/src/waffle/gbm/wgbm_platform.c b/src/waffle/gbm/wgbm_platform.c
index ee25a26..e598a05 100644
--- a/src/waffle/gbm/wgbm_platform.c
+++ b/src/waffle/gbm/wgbm_platform.c
@@ -23,8 +23,6 @@
// 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.
-#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
-
#include <stdlib.h>
#include <dlfcn.h>
@@ -55,8 +53,6 @@ wgbm_platform_teardown(struct wgbm_platform *self)
if (!self)
return true;
- unsetenv("EGL_PLATFORM");
-
if (self->linux)
ok &= linux_platform_destroy(self->linux);
@@ -120,8 +116,6 @@ wgbm_platform_init(struct wgbm_platform *self)
if (!self->linux)
goto error;
- setenv("EGL_PLATFORM", "drm", true);
-
self->wegl.wcore.vtbl = &wgbm_platform_vtbl;
return true;
diff --git a/src/waffle/wayland/wayland_platform.c b/src/waffle/wayland/wayland_platform.c
index 3627c88..a8fbafc 100644
--- a/src/waffle/wayland/wayland_platform.c
+++ b/src/waffle/wayland/wayland_platform.c
@@ -24,7 +24,6 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define WL_EGL_PLATFORM 1
-#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
#include <stdlib.h>
#include <dlfcn.h>
@@ -59,8 +58,6 @@ wayland_platform_destroy(struct wcore_platform *wc_self)
if (!self)
return true;
- unsetenv("EGL_PLATFORM");
-
if (self->linux)
ok &= linux_platform_destroy(self->linux);
@@ -125,8 +122,6 @@ wayland_platform_create(void)
if (!self->linux)
goto error;
- setenv("EGL_PLATFORM", "wayland", true);
-
self->wegl.wcore.vtbl = &wayland_platform_vtbl;
return &self->wegl.wcore;
diff --git a/src/waffle/xegl/xegl_platform.c b/src/waffle/xegl/xegl_platform.c
index 66d7ed6..f39ab93 100644
--- a/src/waffle/xegl/xegl_platform.c
+++ b/src/waffle/xegl/xegl_platform.c
@@ -23,8 +23,6 @@
// 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.
-#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
-
#include <stdlib.h>
#include "wcore_error.h"
@@ -51,8 +49,6 @@ xegl_platform_destroy(struct wcore_platform *wc_self)
if (!self)
return true;
- unsetenv("EGL_PLATFORM");
-
if (self->linux)
ok &= linux_platform_destroy(self->linux);
@@ -79,8 +75,6 @@ xegl_platform_create(void)
if (!self->linux)
goto error;
- setenv("EGL_PLATFORM", "x11", true);
-
self->wegl.wcore.vtbl = &xegl_platform_vtbl;
return &self->wegl.wcore;
--
2.10.1
More information about the waffle
mailing list