X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fdrivers%2Fdri2%2Fegl_dri2.h;h=df4fb76fe62ca0cd44d30ccdc7c0ade172b1c8ad;hb=bc38fe8425f402c86d8446e92cc4a3be492d0aa1;hp=5555bcea3ab99c7e80e48693137a0a40c939d8d5;hpb=2282ec0ad6581b588f7bdde1211357123316b4b9;p=mesa.git diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 5555bcea3ab..df4fb76fe62 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -81,6 +81,9 @@ struct zwp_linux_dmabuf_v1; #include "eglsync.h" #include "util/u_vector.h" +#include "util/bitset.h" + +#define EGL_DRI2_MAX_FORMATS 10 struct wl_buffer; @@ -92,11 +95,13 @@ struct dri2_egl_display_vtbl { void *native_window, const EGLint *attrib_list); + /* optional */ _EGLSurface* (*create_pixmap_surface)(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *config, void *native_pixmap, const EGLint *attrib_list); + /* optional */ _EGLSurface* (*create_pbuffer_surface)(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *config, const EGLint *attrib_list); @@ -115,26 +120,27 @@ struct dri2_egl_display_vtbl { EGLBoolean (*swap_buffers)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf); + /* optional - falls back to .swap_buffers */ EGLBoolean (*swap_buffers_with_damage)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surface, const EGLint *rects, EGLint n_rects); - EGLBoolean (*set_damage_region)(_EGLDriver *drv, _EGLDisplay *disp, - _EGLSurface *surface, - const EGLint *rects, EGLint n_rects); - + /* optional */ EGLBoolean (*swap_buffers_region)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint numRects, const EGLint *rects); + /* optional */ EGLBoolean (*post_sub_buffer)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint x, EGLint y, EGLint width, EGLint height); + /* optional */ EGLBoolean (*copy_buffers)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, void *native_pixmap_target); + /* optional */ EGLint (*query_buffer_age)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf); @@ -142,9 +148,11 @@ struct dri2_egl_display_vtbl { _EGLSurface *surf, EGLint attribute, EGLint *value); + /* optional */ struct wl_buffer* (*create_wayland_buffer_from_image)( _EGLDriver *drv, _EGLDisplay *disp, _EGLImage *img); + /* optional */ EGLBoolean (*get_sync_values)(_EGLDisplay *display, _EGLSurface *surface, EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc); @@ -182,6 +190,7 @@ struct dri2_egl_display const __DRInoErrorExtension *no_error; const __DRI2configQueryExtension *config; const __DRI2fenceExtension *fence; + const __DRI2bufferDamageExtension *buffer_damage; const __DRI2blobExtension *blob; const __DRI2rendererQueryExtension *rendererQuery; const __DRI2interopExtension *interop; @@ -232,7 +241,7 @@ struct dri2_egl_display struct zwp_linux_dmabuf_v1 *wl_dmabuf; struct u_vector *wl_modifiers; bool authenticated; - unsigned formats; + BITSET_DECLARE(formats, EGL_DRI2_MAX_FORMATS); uint32_t capabilities; char *device_name; #endif @@ -322,21 +331,25 @@ struct dri2_egl_surface __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 -#if defined(HAVE_SURFACELESS_PLATFORM) - __DRIimage *front; - unsigned int visual; -#endif + /* surfaceless and device */ + __DRIimage *front; + unsigned int visual; + int out_fence_fd; EGLBoolean enable_out_fence; + + /* swrast device */ + char *swrast_device_buffer; }; struct dri2_egl_config @@ -359,7 +372,7 @@ struct dri2_egl_sync { void *fence; }; -/* From xmlpool/options.h, user exposed so should be stable */ +/* From driconf.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 @@ -373,6 +386,7 @@ _EGL_DRIVER_TYPECAST(dri2_egl_sync, _EGLSync, obj) 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); @@ -402,10 +416,27 @@ dri2_surface_get_dri_drawable(_EGLSurface *surf); __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, @@ -481,16 +512,13 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp) } #endif -#ifdef HAVE_SURFACELESS_PLATFORM EGLBoolean dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp); -#else -static inline EGLBoolean -dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp) -{ - return _eglError(EGL_NOT_INITIALIZED, "Surfaceless platform not built"); -} -#endif + +EGLBoolean +dri2_initialize_device(_EGLDriver *drv, _EGLDisplay *disp); +static inline void +dri2_teardown_device(struct dri2_egl_display *dri2_dpy) { /* noop */ } void dri2_flush_drawable_for_swapbuffers(_EGLDisplay *disp, _EGLSurface *draw); @@ -544,7 +572,8 @@ dri2_fini_surface(_EGLSurface *surf); EGLBoolean dri2_create_drawable(struct dri2_egl_display *dri2_dpy, const __DRIconfig *config, - struct dri2_egl_surface *dri2_surf); + struct dri2_egl_surface *dri2_surf, + void *loaderPrivate); static inline uint64_t combine_u32_into_u64(uint32_t hi, uint32_t lo)