#ifndef EGL_DRI2_INCLUDED
#define EGL_DRI2_INCLUDED
+#include <stdbool.h>
#include <stdint.h>
#ifdef HAVE_X11_PLATFORM
#ifdef HAVE_ANDROID_PLATFORM
#define LOG_TAG "EGL-DRI2"
-#if ANDROID_VERSION >= 0x0400
-# include <system/window.h>
-#else
-# define android_native_buffer_t ANativeWindowBuffer
-# include <ui/egl/android_natives.h>
-# include <ui/android_native_buffer.h>
-#endif
-
+#include <system/window.h>
#include <hardware/gralloc.h>
#include <gralloc_drm_handle.h>
-#include <cutils/log.h>
#endif /* HAVE_ANDROID_PLATFORM */
_EGLSurface *surface,
const EGLint *rects, EGLint n_rects);
+ EGLBoolean (*set_damage_region)(_EGLDriver *drv, _EGLDisplay *dpy,
+ _EGLSurface *surface,
+ const EGLint *rects, EGLint n_rects);
+
EGLBoolean (*swap_buffers_region)(_EGLDriver *drv, _EGLDisplay *dpy,
_EGLSurface *surf, EGLint numRects,
const EGLint *rects);
int dri2_major;
int dri2_minor;
__DRIscreen *dri_screen;
- int own_dri_screen;
+ bool own_dri_screen;
const __DRIconfig **driver_configs;
void *driver;
const __DRIcoreExtension *core;
* dri2_make_current (tracks if there are active contexts/surfaces). */
int ref_count;
- int own_device;
- int invalidate_available;
+ bool own_device;
+ bool invalidate_available;
int min_swap_interval;
int max_swap_interval;
int default_swap_interval;
#ifdef HAVE_X11_PLATFORM
xcb_connection_t *conn;
xcb_screen_t *screen;
- int swap_available;
+ bool swap_available;
#ifdef HAVE_DRI3
struct loader_dri3_extensions loader_dri3_ext;
#endif
struct wl_drm *wl_drm;
struct wl_shm *wl_shm;
struct wl_event_queue *wl_queue;
- int authenticated;
+ bool authenticated;
int formats;
uint32_t capabilities;
char *device_name;
const gralloc_module_t *gralloc;
#endif
- int is_render_node;
+ bool is_render_node;
int is_different_gpu;
};
__DRIdrawable *dri_drawable;
__DRIbuffer buffers[5];
int buffer_count;
- int have_fake_front;
+ bool have_fake_front;
#ifdef HAVE_X11_PLATFORM
xcb_drawable_t drawable;
struct wl_egl_window *wl_win;
int dx;
int dy;
+ struct wl_event_queue *wl_queue;
+ struct wl_surface *wl_surface_wrapper;
+ struct wl_display *wl_dpy_wrapper;
+ struct wl_drm *wl_drm_wrapper;
struct wl_callback *throttle_callback;
int format;
#endif
#ifdef HAVE_DRM_PLATFORM
struct gbm_bo *bo;
#endif
- int locked;
+ bool locked;
int age;
} color_buffers[4], *back, *current;
#endif
/* EGL-owned buffers */
__DRIbuffer *local_buffers[__DRI_BUFFER_COUNT];
+
+ /* Used to record all the buffers created by ANativeWindow and their ages.
+ * Usually Android uses at most triple buffers in ANativeWindow
+ * so hardcode the number of color_buffers to 3.
+ */
+ struct {
+ struct ANativeWindowBuffer *buffer;
+ int age;
+ } color_buffers[3], *back;
#endif
#if defined(HAVE_SURFACELESS_PLATFORM)
extern const __DRIimageLookupExtension image_lookup_extension;
extern const __DRIuseInvalidateExtension use_invalidate;
+extern const __DRIbackgroundCallableExtension background_callable_extension;
EGLBoolean
dri2_load_driver(_EGLDisplay *disp);
EGLBoolean
dri2_create_screen(_EGLDisplay *disp);
+EGLBoolean
+dri2_setup_extensions(_EGLDisplay *disp);
+
__DRIdrawable *
dri2_surface_get_dri_drawable(_EGLSurface *surf);
#endif
}
+void
+dri2_display_destroy(_EGLDisplay *disp);
+
#endif /* EGL_DRI2_INCLUDED */