{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
int fd = -1, err = -EINVAL;
+ char buf[PROPERTY_VALUE_MAX];
if (dri2_dpy->gralloc->perform)
err = dri2_dpy->gralloc->perform(dri2_dpy->gralloc,
return EGL_FALSE;
}
- dri2_dpy->fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
+ if (!strcmp(dri2_dpy->gralloc->common.name, "DRM Memory Allocator") ||
+ property_get("ro.hardware.hwcomposer", buf, NULL) > 0) {
+ dri2_dpy->fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
+ } else {
+ const char *device_name = drmGetRenderDeviceNameFromFd(fd);
+ dri2_dpy->fd = loader_open_device(device_name);
+ free(device_name);
+ }
if (dri2_dpy->fd < 0)
return EGL_FALSE;
return EGL_TRUE;
}
+#ifndef HAVE_DRM_GRALLOC
static EGLBoolean
droid_open_device(_EGLDisplay *disp)
{
return EGL_TRUE;
#undef MAX_DRM_DEVICES
}
+#endif
EGLBoolean
dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp)