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

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