Blame SOURCES/0001-egl-Use-eglGetPlatformDisplay-not-eglGetDisplay.patch

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