diff --git a/README.md b/README.md
index 40e9544..507ce95 100644
--- a/README.md
+++ b/README.md
@@ -11,8 +11,9 @@
 creating windows, contexts and surfaces, reading input, handling events, etc.
 
 GLFW natively supports Windows, macOS and Linux and other Unix-like systems.
-Experimental implementations for the Wayland protocol and the Mir display server
-are available but not yet officially supported.                             
+Experimental implementations for the Wayland protocol, the Mir display server
+and direct rendering via EGLDevice are available but not yet officially
+supported.
 
 GLFW is licensed under the [zlib/libpng
 license](http://www.glfw.org/license.html).
@@ -91,6 +92,9 @@
 The (experimental) Wayland backend also depends on the `extra-cmake-modules`
 package, which is used to generated Wayland protocol headers.
 
+The (experimental) EGLDevice backend also depends on the `libdrm-dev`
+development package.
+
 The examples and test programs depend on a number of tiny libraries.  These are
 located in the `deps/` directory.
 
@@ -208,6 +212,7 @@
 - [X11] Bugfix: Incremental reading of selections was not supported (#275)
 - [X11] Bugfix: Selection I/O reported but did not support `COMPOUND_TEXT`
 - [X11] Bugfix: Latin-1 text read from selections was not converted to UTF-8
+- [Linux] Added experimental support for direct rendering via EGLDevice (#786)
 - [Linux] Moved to evdev for joystick input (#906,#1005)
 - [Linux] Bugfix: Event processing did not detect joystick disconnection (#932)
 - [Linux] Bugfix: The joystick device path could be truncated (#1025)
@@ -282,6 +287,7 @@
  - David Carlier
  - Arturo Castro
  - Chi-kwan Chan
+ - Kamal Chandra
  - Ian Clarkson
  - Michał Cichoń
  - Lambert Clara
diff --git a/docs/compile.dox b/docs/compile.dox
index 35d6573..cc11a7a 100644
--- a/docs/compile.dox
+++ b/docs/compile.dox
@@ -257,6 +257,7 @@
  - @b _GLFW_WAYLAND to use the Wayland API (experimental and incomplete)
  - @b _GLFW_MIR to use the Mir API (experimental and incomplete)
  - @b _GLFW_OSMESA to use the OSMesa API (headless and non-interactive)
+ - @b _GLFW_EGLDEVICE to use the EGLDevice API (experimental and incomplete)
 
 If you are building GLFW as a shared library / dynamic library / DLL then you
 must also define @b _GLFW_BUILD_DLL.  Otherwise, you must not define it.
diff --git a/src/egldevice_init.c b/src/egldevice_init.c
index 1372895..157383f 100644
--- a/src/egldevice_init.c
+++ b/src/egldevice_init.c
@@ -1,5 +1,5 @@
 //========================================================================
-// GLFW 3.2 EGLDevice - www.glfw.org
+// GLFW 3.3 EGLDevice - www.glfw.org
 //------------------------------------------------------------------------
 // Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
 //
@@ -28,44 +28,44 @@
 
 #include <linux/limits.h>
 
-static GLFWbool initializeExtensions()
+static GLFWbool initializeExtensions(void)
 {
-    _glfw.egldevice.eglQueryDevicesEXT =
+    _glfw.egldevice.QueryDevicesEXT =
         (PFNEGLQUERYDEVICESEXTPROC)
-            _glfw.egl.GetProcAddress("eglQueryDevicesEXT");
-   _glfw.egldevice.eglQueryDeviceStringEXT =
+            eglGetProcAddress("eglQueryDevicesEXT");
+   _glfw.egldevice.QueryDeviceStringEXT =
         (PFNEGLQUERYDEVICESTRINGEXTPROC)
-            _glfw.egl.GetProcAddress("eglQueryDeviceStringEXT");
-    _glfw.egldevice.eglGetPlatformDisplayEXT =
+            eglGetProcAddress("eglQueryDeviceStringEXT");
+    _glfw.egldevice.GetPlatformDisplayEXT =
         (PFNEGLGETPLATFORMDISPLAYEXTPROC)
-            _glfw.egl.GetProcAddress("eglGetPlatformDisplayEXT");
-    _glfw.egldevice.eglGetOutputLayersEXT =
+            eglGetProcAddress("eglGetPlatformDisplayEXT");
+    _glfw.egldevice.GetOutputLayersEXT =
         (PFNEGLGETOUTPUTLAYERSEXTPROC)
-            _glfw.egl.GetProcAddress("eglGetOutputLayersEXT");
-    _glfw.egldevice.eglCreateStreamKHR =
+            eglGetProcAddress("eglGetOutputLayersEXT");
+    _glfw.egldevice.CreateStreamKHR =
         (PFNEGLCREATESTREAMKHRPROC)
-            _glfw.egl.GetProcAddress("eglCreateStreamKHR");
-    _glfw.egldevice.eglDestroyStreamKHR =
+            eglGetProcAddress("eglCreateStreamKHR");
+    _glfw.egldevice.DestroyStreamKHR =
         (PFNEGLDESTROYSTREAMKHRPROC)
-            _glfw.egl.GetProcAddress("eglDestroyStreamKHR");
-    _glfw.egldevice.eglStreamConsumerOutputEXT =
+            eglGetProcAddress("eglDestroyStreamKHR");
+    _glfw.egldevice.StreamConsumerOutputEXT =
         (PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)
-            _glfw.egl.GetProcAddress("eglStreamConsumerOutputEXT");
-    _glfw.egldevice.eglCreateStreamProducerSurfaceKHR =
+            eglGetProcAddress("eglStreamConsumerOutputEXT");
+    _glfw.egldevice.CreateStreamProducerSurfaceKHR =
         (PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)
-            _glfw.egl.GetProcAddress("eglCreateStreamProducerSurfaceKHR");
+            eglGetProcAddress("eglCreateStreamProducerSurfaceKHR");
 
-    if(!_glfw.egldevice.eglQueryDevicesEXT ||
-       !_glfw.egldevice.eglQueryDeviceStringEXT ||
-       !_glfw.egldevice.eglGetPlatformDisplayEXT ||
-       !_glfw.egldevice.eglGetOutputLayersEXT ||
-       !_glfw.egldevice.eglCreateStreamKHR ||
-       !_glfw.egldevice.eglDestroyStreamKHR ||
-       !_glfw.egldevice.eglStreamConsumerOutputEXT ||
-       !_glfw.egldevice.eglCreateStreamProducerSurfaceKHR)
+    if(!_glfw.egldevice.QueryDevicesEXT ||
+       !_glfw.egldevice.QueryDeviceStringEXT ||
+       !_glfw.egldevice.GetPlatformDisplayEXT ||
+       !_glfw.egldevice.GetOutputLayersEXT ||
+       !_glfw.egldevice.CreateStreamKHR ||
+       !_glfw.egldevice.DestroyStreamKHR ||
+       !_glfw.egldevice.StreamConsumerOutputEXT ||
+       !_glfw.egldevice.CreateStreamProducerSurfaceKHR)
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required function(s)");
+                        "EGLDevice: Failed to find required EGL extension functions");
         return GLFW_FALSE;
     }
     return GLFW_TRUE;
@@ -90,7 +90,7 @@
                         "EGLDevice: EGL_EXT_device base extensions not found");
     }
 
-    if (!_glfw.egldevice.eglQueryDevicesEXT(0, NULL, &num_devs))
+    if (!eglQueryDevicesEXT(0, NULL, &num_devs))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
                         "EGLDevice: Falied to query EGLDevice");
@@ -98,7 +98,7 @@
     if (num_devs < 1)
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: No Devices Found");
+                        "EGLDevice: No devices found");
     }
 
     egl_devs = calloc(sizeof(EGLDeviceEXT), num_devs);
@@ -109,7 +109,7 @@
     }
 
     // Select suitable device
-    if (!_glfw.egldevice.eglQueryDevicesEXT(num_devs, egl_devs, &num_devs))
+    if (!eglQueryDevicesEXT(num_devs, egl_devs, &num_devs))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
                         "EGLDevice: Failed to query EGL devices");
@@ -119,8 +119,7 @@
     {
         const char* deviceExtensionString;
 
-        deviceExtensionString = 
-            _glfw.egldevice.eglQueryDeviceStringEXT(egl_devs[i], EGL_EXTENSIONS);
+        deviceExtensionString = eglQueryDeviceStringEXT(egl_devs[i], EGL_EXTENSIONS);
         if (_glfwStringInExtensionString("EGL_EXT_device_drm",
                                          deviceExtensionString))
         {
@@ -134,8 +133,7 @@
     if (eglDevice == EGL_NO_DEVICE_EXT)
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required extension:"
-                        " EGL_EXT_device_drm");
+                        "EGLDevice: Missing required extension EGL_EXT_device_drm");
     }
     return eglDevice;
 }
@@ -145,8 +143,7 @@
     int drm_fd;
     const char* drmName;
 
-    drmName = _glfw.egldevice.eglQueryDeviceStringEXT(eglDevice,
-                                                      EGL_DRM_DEVICE_FILE_EXT);
+    drmName = eglQueryDeviceStringEXT(eglDevice, EGL_DRM_DEVICE_FILE_EXT);
     if (!drmName || (strnlen(drmName, PATH_MAX) == 0))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
@@ -173,8 +170,7 @@
         EGL_NONE
     };
 
-    _glfw.egl.display =
-        _glfw.egldevice.eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT,
+    _glfw.egl.display = eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT,
                                                  (void*)egl_dev,
                                                  displayAttribs);
     if (_glfw.egl.display == EGL_NO_DISPLAY)
@@ -196,8 +192,7 @@
                                       displayExtensionString))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required extension:"
-                        " EGL_EXT_output_base");
+                        "EGLDevice: Missing required extension EGL_EXT_output_base");
         return GLFW_FALSE;
     }
 
@@ -205,8 +200,7 @@
                                       displayExtensionString))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required extension:"
-                        " EGL_EXT_output_drm");
+                        "EGLDevice: Missing required extension EGL_EXT_output_drm");
         return GLFW_FALSE;
     }
 
@@ -214,8 +208,7 @@
                                       displayExtensionString))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required extension:"
-                        " EGL_KHR_stream");
+                        "EGLDevice: Missing required extension EGL_KHR_stream");
         return GLFW_FALSE;
     }
 
@@ -223,16 +216,14 @@
                                       displayExtensionString))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required extension:"
-                        " EGL_KHR_stream_producer_eglsurface");
+                        "EGLDevice: Missing required extension EGL_KHR_stream_producer_eglsurface");
         return GLFW_FALSE;
     }
     if (!_glfwStringInExtensionString("EGL_EXT_stream_consumer_egloutput",
                                       displayExtensionString))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Missing required extension:"
-                        " EGL_EXT_stream_consumer_egloutput");
+                        "EGLDevice: Missing required extension EGL_EXT_stream_consumer_egloutput");
         return GLFW_FALSE;
     }
 
@@ -290,3 +281,4 @@
 #endif
         ;
 }
+
diff --git a/src/egldevice_monitor.c b/src/egldevice_monitor.c
index 4024df9..ed9d74a 100644
--- a/src/egldevice_monitor.c
+++ b/src/egldevice_monitor.c
@@ -1,5 +1,5 @@
 //========================================================================
-// GLFW 3.2 EGLDevice - www.glfw.org
+// GLFW 3.3 EGLDevice - www.glfw.org
 //------------------------------------------------------------------------
 // Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
 //
@@ -58,8 +58,7 @@
                     drmModeGetEncoder(drm_fd, monitor->egldevice.encId);
                 if (!enc_info) {
                     _glfwInputError(GLFW_PLATFORM_ERROR,
-                                    "EGLDevice: Unable to query DRM-KMS"
-                                    " information for connector index %d", i);
+                                    "EGLDevice: Unable to query DRM-KMS information for connector index %d", i);
                 }
 
                 // Select the modesize
@@ -163,3 +162,4 @@
     _glfwInputError(GLFW_PLATFORM_ERROR,
                     "EGLDevice: _glfwPlatformSetGammaRamp not implemented");
 }
+
diff --git a/src/egldevice_platform.h b/src/egldevice_platform.h
index 0fdfe6b..ce3867e 100644
--- a/src/egldevice_platform.h
+++ b/src/egldevice_platform.h
@@ -1,5 +1,5 @@
 //========================================================================
-// GLFW 3.2 EGLDevice - www.glfw.org
+// GLFW 3.3 EGLDevice - www.glfw.org
 //------------------------------------------------------------------------
 // Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
 //
@@ -24,9 +24,6 @@
 //
 //========================================================================
 
-#ifndef _glfw3_egldevice_h_
-#define _glfw3_egldevice_h_
-
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/time.h>
@@ -77,6 +74,16 @@
 typedef EGLSurface (EGLAPIENTRY * PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay,EGLConfig,EGLStreamKHR,const EGLint*);
 typedef EGLBoolean (EGLAPIENTRY * PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay,EGLStreamKHR,EGLenum,EGLint);
 typedef EGLBoolean (EGLAPIENTRY * PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC)(EGLDisplay,EGLStreamKHR,const EGLAttrib*);
+#define eglQueryDevicesEXT _glfw.egldevice.QueryDevicesEXT
+#define eglQueryDeviceStringEXT _glfw.egldevice.QueryDeviceStringEXT
+#define eglGetPlatformDisplayEXT _glfw.egldevice.GetPlatformDisplayEXT
+#define eglGetOutputLayersEXT _glfw.egldevice.GetOutputLayersEXT
+#define eglCreateStreamKHR _glfw.egldevice.CreateStreamKHR
+#define eglDestroyStreamKHR _glfw.egldevice.DestroyStreamKHR
+#define eglStreamConsumerOutputEXT _glfw.egldevice.StreamConsumerOutputEXT
+#define eglCreateStreamProducerSurfaceKHR _glfw.egldevice.CreateStreamProducerSurfaceKHR
+#define eglStreamAttribKHR _glfw.egldevice.StreamAttribKHR
+#define eglStreamConsumerAcquireAttribKHR _glfw.egldevice.StreamConsumerAcquireAttribKHR
 
 #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL)
 #define _glfw_dlclose(handle) dlclose(handle)
@@ -85,17 +92,17 @@
 #define _GLFW_EGL_NATIVE_DISPLAY EGL_DEFAULT_DISPLAY
 #define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType)window->egldevice.handle)
 
-#define _GLFW_PLATFORM_WINDOW_STATE         _GLFWwindowEgldevice egldevice
-#define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryEgldevice egldevice
-#define _GLFW_PLATFORM_MONITOR_STATE        _GLFWmonitorEgldevice egldevice
-#define _GLFW_PLATFORM_CURSOR_STATE         _GLFWcursorEgldevice egldevice
+#define _GLFW_PLATFORM_WINDOW_STATE         _GLFWwindowEGLDevice egldevice
+#define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryEGLDevice egldevice
+#define _GLFW_PLATFORM_MONITOR_STATE        _GLFWmonitorEGLDevice egldevice
+#define _GLFW_PLATFORM_CURSOR_STATE         _GLFWcursorEGLDevice egldevice
 
 #define _GLFW_PLATFORM_CONTEXT_STATE
 #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
 
-// EGLDEVICE-specific per-window data
+// EGLDevice-specific per-window data
 //
-typedef struct _GLFWwindowEgldevice
+typedef struct _GLFWwindowEGLDevice
 {
     int xsurfsize, ysurfsize;
     int xoffset, yoffset;
@@ -106,38 +113,39 @@
     EGLDisplay handle;
     EGLOutputLayerEXT eglLayer;
     EGLStreamKHR eglStream;
-} _GLFWwindowEgldevice;
+} _GLFWwindowEGLDevice;
 
-// EGLDEVICE-specific global data
+// EGLDevice-specific global data
 //
-typedef struct _GLFWlibraryEgldevice
+typedef struct _GLFWlibraryEGLDevice
 {
     int drmFd;
 
-    PFNEGLQUERYDEVICESEXTPROC                eglQueryDevicesEXT;
-    PFNEGLQUERYDEVICESTRINGEXTPROC           eglQueryDeviceStringEXT;
-    PFNEGLGETPLATFORMDISPLAYEXTPROC          eglGetPlatformDisplayEXT;
-    PFNEGLGETOUTPUTLAYERSEXTPROC             eglGetOutputLayersEXT;
-    PFNEGLCREATESTREAMKHRPROC                eglCreateStreamKHR;
-    PFNEGLDESTROYSTREAMKHRPROC               eglDestroyStreamKHR;
-    PFNEGLSTREAMCONSUMEROUTPUTEXTPROC        eglStreamConsumerOutputEXT;
-    PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC eglCreateStreamProducerSurfaceKHR;
-    PFNEGLSTREAMATTRIBKHRPROC                eglStreamAttribKHR;
-    PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC eglStreamConsumerAcquireAttribKHR;
-} _GLFWlibraryEgldevice;
+    PFNEGLQUERYDEVICESEXTPROC                QueryDevicesEXT;
+    PFNEGLQUERYDEVICESTRINGEXTPROC           QueryDeviceStringEXT;
+    PFNEGLGETPLATFORMDISPLAYEXTPROC          GetPlatformDisplayEXT;
+    PFNEGLGETOUTPUTLAYERSEXTPROC             GetOutputLayersEXT;
+    PFNEGLCREATESTREAMKHRPROC                CreateStreamKHR;
+    PFNEGLDESTROYSTREAMKHRPROC               DestroyStreamKHR;
+    PFNEGLSTREAMCONSUMEROUTPUTEXTPROC        StreamConsumerOutputEXT;
+    PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC CreateStreamProducerSurfaceKHR;
+    PFNEGLSTREAMATTRIBKHRPROC                StreamAttribKHR;
+    PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC StreamConsumerAcquireAttribKHR;
+} _GLFWlibraryEGLDevice;
 
-// EGLDEVICE-specific per-monitor data
+// EGLDevice-specific per-monitor data
 //
-typedef struct _GLFWmonitorEgldevice {
+typedef struct _GLFWmonitorEGLDevice
+{
     int crtcIndex;
     uint32_t connId, encId, crtcId;
-} _GLFWmonitorEgldevice;
+} _GLFWmonitorEGLDevice;
 
-// EGLDEVICE-specific per-cursor data
+// EGLDevice-specific per-cursor data
 //
-typedef struct _GLFWcursorEgldevice {
-} _GLFWcursorEgldevice;
+typedef struct _GLFWcursorEGLDevice
+{
+} _GLFWcursorEGLDevice;
 
 void _glfwPollMonitorsEGLDevice(void);
 
-#endif // _glfw3_egldevice_platform_h_
diff --git a/src/egldevice_window.c b/src/egldevice_window.c
index 55b4d5c..34ea960 100644
--- a/src/egldevice_window.c
+++ b/src/egldevice_window.c
@@ -1,5 +1,5 @@
 //========================================================================
-// GLFW 3.2 EGLDevice - www.glfw.org
+// GLFW 3.3 EGLDevice - www.glfw.org
 //------------------------------------------------------------------------
 // Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
 //
@@ -57,9 +57,9 @@
     layerAttribs[0] = EGL_DRM_CRTC_EXT;
     layerAttribs[1] = (EGLAttrib)monitor->egldevice.crtcId;
 
-    if (!_glfw.egldevice.eglGetOutputLayersEXT(_glfw.egl.display, layerAttribs,
-                                               &window->egldevice.eglLayer,
-                                               1, &n) || !n)
+    if (!eglGetOutputLayersEXT(_glfw.egl.display, layerAttribs,
+                               &window->egldevice.eglLayer,
+                               1, &n) || !n)
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
                         "EGLDevice: Unable to obtain EGLOutputLayer");
@@ -68,7 +68,7 @@
 
     // Create a stream and connect to the output
     window->egldevice.eglStream =
-        _glfw.egldevice.eglCreateStreamKHR(_glfw.egl.display, streamAttribs);
+        eglCreateStreamKHR(_glfw.egl.display, streamAttribs);
     if (window->egldevice.eglStream == EGL_NO_STREAM_KHR)
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
@@ -76,9 +76,9 @@
                         eglGetError());
         return GLFW_FALSE;
     }
-    if (!_glfw.egldevice.eglStreamConsumerOutputEXT(_glfw.egl.display,
-                                                    window->egldevice.eglStream,
-                                                    window->egldevice.eglLayer))
+    if (!eglStreamConsumerOutputEXT(_glfw.egl.display,
+                                    window->egldevice.eglStream,
+                                    window->egldevice.eglLayer))
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
                         "EGLDevice: Unable to connect stream (error 0x%x)",
@@ -90,15 +90,14 @@
     surfaceAttribs[1] = window->egldevice.xsurfsize;
     surfaceAttribs[3] = window->egldevice.ysurfsize;
     window->context.egl.surface =
-        _glfw.egldevice.eglCreateStreamProducerSurfaceKHR(_glfw.egl.display,
-                                                          window->context.egl.config,
-                                                          window->egldevice.eglStream,
-                                                          surfaceAttribs);
+        eglCreateStreamProducerSurfaceKHR(_glfw.egl.display,
+                                          window->context.egl.config,
+                                          window->egldevice.eglStream,
+                                          surfaceAttribs);
     if (window->context.egl.surface == EGL_NO_SURFACE)
     {
         _glfwInputError(GLFW_PLATFORM_ERROR,
-                        "EGLDevice: Unable to create rendering"
-                        " surface (error 0x%x)", eglGetError());
+                        "EGLDevice: Unable to create rendering surface (error 0x%x)", eglGetError());
         return GLFW_FALSE;
     }
 
@@ -111,10 +110,7 @@
         window->context.destroy(window);
 
     if (window->egldevice.eglStream != EGL_NO_STREAM_KHR)
-    {
-        _glfw.egldevice.eglDestroyStreamKHR(_glfw.egl.display,
-                                            window->egldevice.eglStream);
-    }
+        eglDestroyStreamKHR(_glfw.egl.display, window->egldevice.eglStream);
 }
 
 void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
@@ -307,7 +303,7 @@
 
 void _glfwPlatformPollEvents(void)
 {
-    return;
+    _glfwDetectJoystickConnectionLinux();
 }
 
 void _glfwPlatformWaitEvents(void)
@@ -419,7 +415,7 @@
 {
     _glfwInputError(GLFW_PLATFORM_ERROR,
                     "EGLDevice: _glfwPlatformGetPhysicalDevicePresentationSupport not supported");
-    return 0;
+    return GLFW_FALSE;
 }
 
 VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
@@ -429,5 +425,6 @@
 {
     _glfwInputError(GLFW_PLATFORM_ERROR,
                     "EGLDevice: _glfwPlatformCreateWindowSurface not supported");
-    return (VkResult)NULL;
+    return VK_ERROR_INITIALIZATION_FAILED;
 }
+
