---
 clients/nested-client.c   | 29 ++++++++++++++++++++++++++++-
 clients/simple-egl.c      | 23 ++++++++++++++++++++++-
 clients/subsurfaces.c     | 26 +++++++++++++++++++++++++-
 clients/window.c          | 27 ++++++++++++++++++++++++++-
 tests/buffer-count-test.c | 30 ++++++++++++++++++++++++++++--
 5 files changed, 129 insertions(+), 6 deletions(-)

diff --git a/clients/nested-client.c b/clients/nested-client.c
index 7f237e6..fbf5350 100644
--- a/clients/nested-client.c
+++ b/clients/nested-client.c
@@ -31,6 +31,7 @@
 
 #include <GLES2/gl2.h>
 #include <EGL/egl.h>
+#include <EGL/eglext.h>
 
 struct window;
 struct seat;
@@ -238,6 +239,10 @@ static const struct wl_registry_listener registry_listener 
= {
        registry_handle_global_remove
 };
 
+#ifdef EGL_EXT_platform_base
+static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
+#endif
+
 static struct nested_client *
 nested_client_create(void)
 {
@@ -261,6 +266,10 @@ nested_client_create(void)
 
        struct nested_client *client;
 
+#ifdef EGL_EXT_platform_base
+       const char *extensions;
+#endif
+
        client = malloc(sizeof *client);
        if (client == NULL)
                return NULL;
@@ -277,7 +286,25 @@ nested_client_create(void)
        /* get globals */
        wl_display_roundtrip(client->display);
 
-       client->egl_display = eglGetDisplay(client->display);
+#ifdef EGL_EXT_platform_base
+       extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+
+       if (strstr(extensions, "EGL_EXT_platform_wayland")) {
+               get_platform_display =
+                       (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
+       } else {
+               fprintf(stderr, "error: no wayland egl support\n");
+               return NULL;
+       }
+#endif
+
+       if (get_platform_display) {
+               client->egl_display = 
get_platform_display(EGL_PLATFORM_WAYLAND_EXT,
+                                                          client->display, 
NULL);
+       } else {
+               client->egl_display = eglGetDisplay(client->display);
+       }
+
        if (client->egl_display == NULL)
                return NULL;
 
diff --git a/clients/simple-egl.c b/clients/simple-egl.c
index d3c205f..1162eb4 100644
--- a/clients/simple-egl.c
+++ b/clients/simple-egl.c
@@ -125,6 +125,10 @@ static const char *frag_shader_text =
 
 static int running = 1;
 
+#ifdef EGL_EXT_platform_base
+static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
+#endif
+
 static void
 init_egl(struct display *display, struct window *window)
 {
@@ -151,7 +155,24 @@ init_egl(struct display *display, struct window *window)
        if (window->opaque || window->buffer_size == 16)
                config_attribs[9] = 0;
 
-       display->egl.dpy = eglGetDisplay(display->display);
+#ifdef EGL_EXT_platform_base
+       extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+
+       if (strstr(extensions, "EGL_EXT_platform_wayland")) {
+               get_platform_display =
+                       (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
+       } else {
+               fprintf(stderr, "error: no wayland egl support\n");
+               exit(1);
+       }
+#endif
+
+       if (get_platform_display) {
+               display->egl.dpy = 
get_platform_display(EGL_PLATFORM_WAYLAND_EXT,
+                                                       display->display, NULL);
+       } else {
+               display->egl.dpy = eglGetDisplay(display->display);
+       }
        assert(display->egl.dpy);
 
        ret = eglInitialize(display->egl.dpy, &major, &minor);
diff --git a/clients/subsurfaces.c b/clients/subsurfaces.c
index fcbe496..d15d5a5 100644
--- a/clients/subsurfaces.c
+++ b/clients/subsurfaces.c
@@ -38,6 +38,7 @@
 #include <wayland-egl.h>
 #include <GLES2/gl2.h>
 #include <EGL/egl.h>
+#include <EGL/eglext.h>
 
 #include "window.h"
 
@@ -189,6 +190,10 @@ egl_print_config_info(struct egl_state *egl)
                printf(" unknown\n");
 }
 
+#ifdef EGL_EXT_platform_base
+static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
+#endif
+
 static struct egl_state *
 egl_state_create(struct wl_display *display)
 {
@@ -212,10 +217,29 @@ egl_state_create(struct wl_display *display)
        EGLint major, minor, n;
        EGLBoolean ret;
 
+#ifdef EGL_EXT_platform_base
+       const char *extensions;
+
+       extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+
+       if (strstr(extensions, "EGL_EXT_platform_wayland")) {
+               get_platform_display =
+                       (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
+       } else {
+               fprintf(stderr, "error: no wayland egl support\n");
+               exit(1);
+       }
+#endif
+
        egl = calloc(1, sizeof *egl);
        assert(egl);
 
-       egl->dpy = eglGetDisplay(display);
+       if (get_platform_display) {
+               egl->dpy = get_platform_display(EGL_PLATFORM_WAYLAND_EXT,
+                                               display, NULL);
+       } else {
+               egl->dpy = eglGetDisplay(display);
+       }
        assert(egl->dpy);
 
        ret = eglInitialize(egl->dpy, &major, &minor);
diff --git a/clients/window.c b/clients/window.c
index c5082ba..dc08f59 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -5348,6 +5348,11 @@ static const struct wl_registry_listener 
registry_listener = {
 };
 
 #ifdef HAVE_CAIRO_EGL
+
+#ifdef EGL_EXT_platform_base
+static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
+#endif
+
 static int
 init_egl(struct display *d)
 {
@@ -5382,7 +5387,27 @@ init_egl(struct display *d)
        EGLint api = EGL_OPENGL_API;
 #endif
 
-       d->dpy = eglGetDisplay(d->display);
+#ifdef EGL_EXT_platform_base
+       const char *extensions;
+
+       extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+
+       if (strstr(extensions, "EGL_EXT_platform_wayland")) {
+               get_platform_display =
+                       (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
+       } else {
+               fprintf(stderr, "error: no wayland egl support\n");
+               return -1;
+       }
+#endif
+
+       if (get_platform_display) {
+               d->dpy = get_platform_display(EGL_PLATFORM_WAYLAND_EXT,
+                                             d->display, NULL);
+       } else {
+               d->dpy = eglGetDisplay(d->display);
+       }
+
        if (!eglInitialize(d->dpy, &major, &minor)) {
                fprintf(stderr, "failed to initialize EGL\n");
                return -1;
diff --git a/tests/buffer-count-test.c b/tests/buffer-count-test.c
index 43fb089..1912b62 100644
--- a/tests/buffer-count-test.c
+++ b/tests/buffer-count-test.c
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <EGL/egl.h>
+#include <EGL/eglext.h>
 #include <wayland-egl.h>
 #include <GLES2/gl2.h>
 
@@ -41,6 +42,10 @@ struct test_data {
        EGLSurface egl_surface;
 };
 
+#ifdef EGL_EXT_platform_base
+static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
+#endif
+
 static int
 init_egl(struct test_data *test_data)
 {
@@ -66,8 +71,29 @@ init_egl(struct test_data *test_data)
        EGLint major, minor, n;
        EGLBoolean ret;
 
-       test_data->egl_dpy = eglGetDisplay((EGLNativeDisplayType)
-                                          test_data->client->wl_display);
+#ifdef EGL_EXT_platform_base
+       const char *extensions;
+
+       extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+
+       if (strstr(extensions, "EGL_EXT_platform_wayland")) {
+               get_platform_display =
+                       (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
+       } else {
+               fprintf(stderr, "error: no wayland egl support\n");
+               return -1;
+       }
+#endif
+
+       if (get_platform_display) {
+               test_data->egl_dpy = 
get_platform_display(EGL_PLATFORM_WAYLAND_EXT,
+                                                         
test_data->client->wl_display,
+                                                         NULL);
+       } else {
+               test_data->egl_dpy = eglGetDisplay((EGLNativeDisplayType)
+                                                  
test_data->client->wl_display);
+       }
+
        if (!test_data->egl_dpy)
                fail("eglGetDisplay");
 
-- 
2.1.4

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to