#include "wayland-drm-client-protocol.h"
enum wl_drm_format_flags {
- HAS_ARGB32 = 1,
- HAS_PREMUL_ARGB32 = 2,
- HAS_XRGB32 = 4
+ HAS_ARGB8888 = 1,
+ HAS_XRGB8888 = 2
};
static void
dri2_surf->block_swap_buffers = EGL_FALSE;
if (conf->AlphaSize == 0)
- dri2_surf->format = WL_DRM_FORMAT_XRGB32;
- else if (dri2_surf->base.VGAlphaFormat == EGL_VG_ALPHA_FORMAT_PRE)
- dri2_surf->format = WL_DRM_FORMAT_PREMULTIPLIED_ARGB32;
+ dri2_surf->format = WL_DRM_FORMAT_XRGB8888;
else
- dri2_surf->format = WL_DRM_FORMAT_ARGB32;
+ dri2_surf->format = WL_DRM_FORMAT_ARGB8888;
switch (type) {
case EGL_WINDOW_BIT:
wl_egl_pixmap->width,
wl_egl_pixmap->height,
dri2_buf->dri_buffer->pitch,
- WL_DRM_FORMAT_PREMULTIPLIED_ARGB32);
+ WL_DRM_FORMAT_ARGB8888);
wl_attr_list[1] = wl_egl_pixmap->width;
wl_attr_list[3] = wl_egl_pixmap->height;
close(dri2_dpy->fd);
dlclose(dri2_dpy->driver);
free(dri2_dpy->driver_name);
+ free(dri2_dpy->device_name);
+ wl_drm_destroy(dri2_dpy->wl_drm);
+ if (dri2_dpy->own_device)
+ wl_display_disconnect(dri2_dpy->wl_dpy);
free(dri2_dpy);
disp->DriverData = NULL;
if (!dri2_dpy->device_name)
return;
- dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
+#ifdef O_CLOEXEC
+ dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC);
+ if (dri2_dpy->fd == -1 && errno == EINVAL)
+#endif
+ {
+ dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
+ if (dri2_dpy->fd != -1)
+ fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) |
+ FD_CLOEXEC);
+ }
if (dri2_dpy->fd == -1) {
_eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
dri2_dpy->device_name, strerror(errno));
struct dri2_egl_display *dri2_dpy = data;
switch (format) {
- case WL_DRM_FORMAT_ARGB32:
- dri2_dpy->formats |= HAS_ARGB32;
- break;
- case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32:
- dri2_dpy->formats |= HAS_PREMUL_ARGB32;
+ case WL_DRM_FORMAT_ARGB8888:
+ dri2_dpy->formats |= HAS_ARGB8888;
break;
- case WL_DRM_FORMAT_XRGB32:
- dri2_dpy->formats |= HAS_XRGB32;
+ case WL_DRM_FORMAT_XRGB8888:
+ dri2_dpy->formats |= HAS_XRGB8888;
break;
}
}
dri2_dpy->wl_dpy = wl_display_connect(NULL);
if (dri2_dpy->wl_dpy == NULL)
goto cleanup_dpy;
+ dri2_dpy->own_device = 1;
} else {
dri2_dpy->wl_dpy = disp->PlatformDisplay;
}
goto cleanup_driver;
types = EGL_WINDOW_BIT | EGL_PIXMAP_BIT;
- if (dri2_dpy->formats & HAS_PREMUL_ARGB32)
- types |= EGL_VG_ALPHA_FORMAT_PRE_BIT;
-
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
config = dri2_dpy->driver_configs[i];
- if (dri2_dpy->formats & HAS_XRGB32)
+ if (dri2_dpy->formats & HAS_XRGB8888)
dri2_add_config(disp, config, i + 1, 0, types, NULL, rgb_masks);
- if (dri2_dpy->formats & (HAS_ARGB32 | HAS_PREMUL_ARGB32))
+ if (dri2_dpy->formats & HAS_ARGB8888)
dri2_add_config(disp, config, i + 1, 0, types, NULL, argb_masks);
}