#include <errno.h>
#include <dlfcn.h>
+#include <fcntl.h>
#include <xf86drm.h>
#if ANDROID_VERSION >= 0x402
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf);
- if (!_eglPutSurface(surf))
- return EGL_TRUE;
-
droid_free_local_buffers(dri2_surf);
if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
EGL_NATIVE_VISUAL_TYPE, 0,
EGL_FRAMEBUFFER_TARGET_ANDROID, EGL_TRUE,
EGL_RECORDABLE_ANDROID, EGL_TRUE,
+ EGL_MAX_PBUFFER_WIDTH, _EGL_MAX_PBUFFER_WIDTH,
+ EGL_MAX_PBUFFER_HEIGHT, _EGL_MAX_PBUFFER_HEIGHT,
EGL_NONE
};
int count, i, j;
}
}
- /* post-process configs */
- for (i = 0; i < dpy->Configs->Size; i++) {
- struct dri2_egl_config *dri2_conf = dri2_egl_config(dpy->Configs->Elements[i]);
-
- /* there is no front buffer so no OpenGL */
- dri2_conf->base.RenderableType &= ~EGL_OPENGL_BIT;
- dri2_conf->base.Conformant &= ~EGL_OPENGL_BIT;
- }
-
return (count != 0);
}
fd = -1;
}
- return (fd >= 0) ? dup(fd) : -1;
+ return (fd >= 0) ? fcntl(fd, F_DUPFD_CLOEXEC, 3) : -1;
}
/* support versions < JellyBean */
.get_dri_drawable = dri2_surface_get_dri_drawable,
};
+static const __DRIdri2LoaderExtension droid_dri2_loader_extension = {
+ .base = { __DRI_DRI2_LOADER, 3 },
+
+ .getBuffers = NULL,
+ .flushFrontBuffer = droid_flush_front_buffer,
+ .getBuffersWithFormat = droid_get_buffers_with_format,
+};
+
static const __DRIimageLoaderExtension droid_image_loader_extension = {
.base = { __DRI_IMAGE_LOADER, 1 },
.flushFrontBuffer = droid_flush_front_buffer,
};
+static const __DRIextension *droid_dri2_loader_extensions[] = {
+ &droid_dri2_loader_extension.base,
+ &image_lookup_extension.base,
+ &use_invalidate.base,
+ NULL,
+};
+
+static const __DRIextension *droid_image_loader_extensions[] = {
+ &droid_image_loader_extension.base,
+ &image_lookup_extension.base,
+ &use_invalidate.base,
+ NULL,
+};
+
EGLBoolean
dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy)
{
/* render nodes cannot use Gem names, and thus do not support
* the __DRI_DRI2_LOADER extension */
- if (!dri2_dpy->is_render_node) {
- dri2_dpy->dri2_loader_extension.base.name = __DRI_DRI2_LOADER;
- dri2_dpy->dri2_loader_extension.base.version = 3;
- dri2_dpy->dri2_loader_extension.getBuffers = NULL;
- dri2_dpy->dri2_loader_extension.flushFrontBuffer = droid_flush_front_buffer;
- dri2_dpy->dri2_loader_extension.getBuffersWithFormat =
- droid_get_buffers_with_format;
- dri2_dpy->extensions[0] = &dri2_dpy->dri2_loader_extension.base;
- } else {
- dri2_dpy->extensions[0] = &droid_image_loader_extension.base;
- }
- dri2_dpy->extensions[1] = &use_invalidate.base;
- dri2_dpy->extensions[2] = &image_lookup_extension.base;
- dri2_dpy->extensions[3] = NULL;
-
+ if (!dri2_dpy->is_render_node)
+ dri2_dpy->loader_extensions = droid_dri2_loader_extensions;
+ else
+ dri2_dpy->loader_extensions = droid_image_loader_extensions;
if (!dri2_create_screen(dpy)) {
err = "DRI2: failed to create screen";