gl-renderer: use eglCreatePlatformWindowSurfaceEXT to get EGLSurfaces

Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
diff --git a/src/gl-renderer.c b/src/gl-renderer.c
index e598d1e..d4e8f1e 100644
--- a/src/gl-renderer.c
+++ b/src/gl-renderer.c
@@ -140,6 +140,10 @@
 	PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC swap_buffers_with_damage;
 #endif
 
+#ifdef EGL_EXT_platform_base
+	PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window;
+#endif
+
 	int has_unpack_subimage;
 
 	PFNEGLBINDWAYLANDDISPLAYWL bind_display;
@@ -1974,7 +1978,8 @@
 
 static int
 gl_renderer_output_create(struct weston_output *output,
-			  EGLNativeWindowType window,
+			  EGLNativeWindowType window_for_legacy,
+			  void *window_for_platform,
 			  const EGLint *attribs,
 			  const EGLint *visual_id)
 {
@@ -2001,10 +2006,19 @@
 	if (go == NULL)
 		return -1;
 
-	go->egl_surface =
-		eglCreateWindowSurface(gr->egl_display,
-				       egl_config,
-				       window, NULL);
+#ifdef EGL_EXT_platform_base
+	if (gr->create_platform_window) {
+		go->egl_surface =
+			gr->create_platform_window(gr->egl_display,
+						   egl_config,
+						   window_for_platform,
+						   NULL);
+	} else
+#endif
+		go->egl_surface =
+			eglCreateWindowSurface(gr->egl_display,
+					       egl_config,
+					       window_for_legacy, NULL);
 
 	if (go->egl_surface == EGL_NO_SURFACE) {
 		weston_log("failed to create egl surface\n");
@@ -2124,6 +2138,21 @@
 			   "supported. Performance could be affected.\n");
 #endif
 
+#ifdef EGL_EXT_platform_base
+	extensions =
+		(const char *) eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+	if (!extensions) {
+		weston_log("Retrieving EGL client extension string failed.\n");
+		return -1;
+	}
+
+	if (strstr(extensions, "EGL_EXT_platform_base"))
+		gr->create_platform_window =
+			(void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
+	else
+		weston_log("warning: EGL_EXT_platform_base not supported.\n");
+#endif
+
 #ifdef EGL_MESA_configless_context
 	if (strstr(extensions, "EGL_MESA_configless_context"))
 		gr->has_configless_context = 1;