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

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