#include "util/u_vector.h"
#include "util/bitset.h"
-#define EGL_DRI2_MAX_FORMATS 8
+#define EGL_DRI2_MAX_FORMATS 10
struct wl_buffer;
_EGLSurface *surface,
const EGLint *rects, EGLint n_rects);
- EGLBoolean (*set_damage_region)(_EGLDriver *drv, _EGLDisplay *disp,
- _EGLSurface *surface,
- const EGLint *rects, EGLint n_rects);
-
EGLBoolean (*swap_buffers_region)(_EGLDriver *drv, _EGLDisplay *disp,
_EGLSurface *surf, EGLint numRects,
const EGLint *rects);
const __DRInoErrorExtension *no_error;
const __DRI2configQueryExtension *config;
const __DRI2fenceExtension *fence;
+ const __DRI2bufferDamageExtension *buffer_damage;
const __DRI2blobExtension *blob;
const __DRI2rendererQueryExtension *rendererQuery;
const __DRI2interopExtension *interop;
__DRIimage *dri_image_front;
/* 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.
+ * Allocate number of color_buffers based on query to android bufferqueue
+ * and save color_buffers_count.
*/
+ int color_buffers_count;
struct {
struct ANativeWindowBuffer *buffer;
int age;
- } color_buffers[3], *back;
+ } *color_buffers, *back;
#endif
/* surfaceless and device */
int out_fence_fd;
EGLBoolean enable_out_fence;
+
+ /* swrast device */
+ char *swrast_device_buffer;
};
struct dri2_egl_config
void *fence;
};
-/* From xmlpool/options.h, user exposed so should be stable */
+/* From xmlpool.h, user exposed so should be stable */
#define DRI_CONF_VBLANK_NEVER 0
#define DRI_CONF_VBLANK_DEF_INTERVAL_0 1
#define DRI_CONF_VBLANK_DEF_INTERVAL_1 2
extern const __DRIimageLookupExtension image_lookup_extension;
extern const __DRIuseInvalidateExtension use_invalidate;
extern const __DRIbackgroundCallableExtension background_callable_extension;
+extern const __DRIswrastLoaderExtension swrast_pbuffer_loader_extension;
EGLBoolean
dri2_load_driver(_EGLDisplay *disp);
__DRIimage *
dri2_lookup_egl_image(__DRIscreen *screen, void *image, void *data);
+void
+dri2_get_shifts_and_sizes(const __DRIcoreExtension *core,
+ const __DRIconfig *config, int *shifts,
+ unsigned int *sizes);
+
+void
+dri2_get_render_type_float(const __DRIcoreExtension *core,
+ const __DRIconfig *config,
+ bool *is_float);
+
+unsigned int
+dri2_image_format_for_pbuffer_config(struct dri2_egl_display *dri2_dpy,
+ const __DRIconfig *config);
+
struct dri2_egl_config *
dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
EGLint surface_type, const EGLint *attr_list,
- const unsigned int *rgba_masks);
+ const int *rgba_shifts, const unsigned int *rgba_sizes);
+
+EGLBoolean
+dri2_add_pbuffer_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp);
_EGLImage *
dri2_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp,