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

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