summaryrefslogtreecommitdiff
path: root/0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch')
-rw-r--r--0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch117
1 files changed, 117 insertions, 0 deletions
diff --git a/0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch b/0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch
new file mode 100644
index 0000000..a507b2a
--- /dev/null
+++ b/0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch
@@ -0,0 +1,117 @@
+From 988e021960eb372be50038fdf0b2874f063c02b6 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Tue, 11 Oct 2016 16:16:38 -0400
+Subject: [PATCH] egl: Use eglGetPlatformDisplay not eglGetDisplay
+
+The latter requires the implementation to guess which kind of display it
+is. Different implementations do different thing, in particular glvnd
+does something different from Mesa, and it's better to be explicit about
+what we need.
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ cogl/cogl-egl.h | 1 -
+ cogl/winsys/cogl-winsys-egl-kms.c | 3 ++-
+ cogl/winsys/cogl-winsys-egl-private.h | 33 +++++++++++++++++++++++++++++++++
+ cogl/winsys/cogl-winsys-egl-wayland.c | 3 ++-
+ cogl/winsys/cogl-winsys-egl-x11.c | 2 +-
+ 5 files changed, 38 insertions(+), 4 deletions(-)
+
+diff --git a/cogl/cogl-egl.h b/cogl/cogl-egl.h
+index cea7b10..5dac55f 100644
+--- a/cogl/cogl-egl.h
++++ b/cogl/cogl-egl.h
+@@ -98,7 +98,6 @@ cogl_egl_context_get_egl_display (CoglContext *context);
+ EGLContext
+ cogl_egl_context_get_egl_context (CoglContext *context);
+
+-
+ COGL_END_DECLS
+
+ /* The gobject introspection scanner seems to parse public headers in
+diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c
+index 4da1f14..ae9f6fc 100644
+--- a/cogl/winsys/cogl-winsys-egl-kms.c
++++ b/cogl/winsys/cogl-winsys-egl-kms.c
+@@ -342,7 +342,8 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
+ goto fail;
+ }
+
+- egl_renderer->edpy = eglGetDisplay ((EGLNativeDisplayType)kms_renderer->gbm);
++ egl_renderer->edpy = cogl_winsys_egl_get_display(EGL_PLATFORM_GBM_KHR,
++ kms_renderer->gbm);
+ if (egl_renderer->edpy == EGL_NO_DISPLAY)
+ {
+ _cogl_set_error (error, COGL_WINSYS_ERROR,
+diff --git a/cogl/winsys/cogl-winsys-egl-private.h b/cogl/winsys/cogl-winsys-egl-private.h
+index 5d21b4f..27ac25c 100644
+--- a/cogl/winsys/cogl-winsys-egl-private.h
++++ b/cogl/winsys/cogl-winsys-egl-private.h
+@@ -200,4 +200,37 @@ CoglBool
+ _cogl_winsys_egl_renderer_connect_common (CoglRenderer *renderer,
+ CoglError **error);
+
++static inline EGLDisplay
++cogl_winsys_egl_get_display (EGLint type, void *native)
++{
++ EGLDisplay dpy = NULL;
++ const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS);
++
++ if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base"))
++ {
++ PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
++ (void *) eglGetProcAddress ("eglGetPlatformDisplay");
++
++ if (get_platform_display)
++ dpy = get_platform_display (type, native, NULL);
++
++ if (dpy)
++ return dpy;
++ }
++
++ if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base"))
++ {
++ PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
++ (void *) eglGetProcAddress ("eglGetPlatformDisplayEXT");
++
++ if (get_platform_display)
++ dpy = get_platform_display (type, native, NULL);
++
++ if (dpy)
++ return dpy;
++ }
++
++ return eglGetDisplay ((EGLNativeDisplayType) native);
++}
++
+ #endif /* __COGL_WINSYS_EGL_PRIVATE_H */
+diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c
+index 2e22052..463041b 100644
+--- a/cogl/winsys/cogl-winsys-egl-wayland.c
++++ b/cogl/winsys/cogl-winsys-egl-wayland.c
+@@ -289,7 +289,8 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
+ }
+
+ egl_renderer->edpy =
+- eglGetDisplay ((EGLNativeDisplayType) wayland_renderer->wayland_display);
++ cogl_winsys_egl_get_display (EGL_PLATFORM_WAYLAND_KHR,
++ wayland_renderer->wayland_display);
+
+ if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
+ goto error;
+diff --git a/cogl/winsys/cogl-winsys-egl-x11.c b/cogl/winsys/cogl-winsys-egl-x11.c
+index 724a4d0..a7e9c2f 100644
+--- a/cogl/winsys/cogl-winsys-egl-x11.c
++++ b/cogl/winsys/cogl-winsys-egl-x11.c
+@@ -278,7 +278,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
+ goto error;
+
+ egl_renderer->edpy =
+- eglGetDisplay ((EGLNativeDisplayType) xlib_renderer->xdpy);
++ cogl_winsys_egl_get_display (EGL_PLATFORM_X11_KHR, xlib_renderer->xdpy);
+
+ if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
+ goto error;
+--
+2.9.3
+