if (dri2_dpy->fd)
close(dri2_dpy->fd);
dlclose(dri2_dpy->driver);
+
+ if (disp->PlatformDisplay == NULL) {
+ switch (disp->Platform) {
#ifdef HAVE_X11_PLATFORM
- if (disp->PlatformDisplay == NULL)
- xcb_disconnect(dri2_dpy->conn);
+ case _EGL_PLATFORM_X11:
+ xcb_disconnect(dri2_dpy->conn);
+ break;
+#endif
+#ifdef HAVE_WAYLAND_PLATFORM
+ case _EGL_PLATFORM_WAYLAND:
+ wl_display_destroy(dri2_dpy->wl_dpy);
+ break;
#endif
+ default:
+ break;
+ }
+ }
+
free(dri2_dpy);
disp->DriverData = NULL;
memset(dri2_dpy, 0, sizeof *dri2_dpy);
disp->DriverData = (void *) dri2_dpy;
- dri2_dpy->wl_dpy = disp->PlatformDisplay;
+ if (disp->PlatformDisplay == NULL) {
+ dri2_dpy->wl_dpy = wl_display_connect(NULL);
+ if (dri2_dpy->wl_dpy == NULL)
+ goto cleanup_dpy;
+ } else {
+ dri2_dpy->wl_dpy = disp->PlatformDisplay;
+ }
id = wl_display_get_global(dri2_dpy->wl_dpy, "wl_drm", 1);
if (id == 0)