X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fegl%2Fdrivers%2Fdri2%2Fegl_dri2.h;h=52ad92b182d300070bda41570fee97dd7bc9caee;hb=d943ac432de1f46cea47bdbf5ffe5365e2aef386;hp=f43a08bb830b9522c5464f51d33d76534052c409;hpb=688a0e8e73b916438878b4fc2271453ee79ec7a6;p=mesa.git diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index f43a08bb830..52ad92b182d 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -28,11 +28,17 @@ #ifndef EGL_DRI2_INCLUDED #define EGL_DRI2_INCLUDED +#include + #ifdef HAVE_X11_PLATFORM #include #include #include #include + +#ifdef HAVE_DRI3 +#include "loader_dri3_helper.h" +#endif #endif #ifdef HAVE_WAYLAND_PLATFORM @@ -72,9 +78,12 @@ #include "egllog.h" #include "eglsurface.h" #include "eglimage.h" +#include "eglsync.h" #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +struct wl_buffer; + struct dri2_egl_driver { _EGLDriver base; @@ -89,12 +98,12 @@ struct dri2_egl_display_vtbl { _EGLSurface* (*create_window_surface)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *config, - EGLNativeWindowType window, + void *native_window, const EGLint *attrib_list); _EGLSurface* (*create_pixmap_surface)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *config, - EGLNativePixmapType pixmap, + void *native_pixmap, const EGLint *attrib_list); _EGLSurface* (*create_pbuffer_surface)(_EGLDriver *drv, _EGLDisplay *dpy, @@ -107,12 +116,17 @@ struct dri2_egl_display_vtbl { EGLBoolean (*swap_interval)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint interval); + _EGLImage* (*create_image)(_EGLDriver *drv, _EGLDisplay *dpy, + _EGLContext *ctx, EGLenum target, + EGLClientBuffer buffer, + const EGLint *attr_list); + EGLBoolean (*swap_buffers)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf); - EGLBoolean (*swap_buffers_with_damage)(_EGLDriver *drv, _EGLDisplay *dpy, - _EGLSurface *surface, - const EGLint *rects, EGLint n_rects); + EGLBoolean (*swap_buffers_with_damage)(_EGLDriver *drv, _EGLDisplay *dpy, + _EGLSurface *surface, + const EGLint *rects, EGLint n_rects); EGLBoolean (*swap_buffers_region)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint numRects, @@ -124,10 +138,19 @@ struct dri2_egl_display_vtbl { EGLint width, EGLint height); EGLBoolean (*copy_buffers)(_EGLDriver *drv, _EGLDisplay *dpy, - _EGLSurface *surf, EGLNativePixmapType target); + _EGLSurface *surf, void *native_pixmap_target); EGLint (*query_buffer_age)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf); + + struct wl_buffer* (*create_wayland_buffer_from_image)( + _EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *img); + + EGLBoolean (*get_sync_values)(_EGLDisplay *display, _EGLSurface *surface, + EGLuint64KHR *ust, EGLuint64KHR *msc, + EGLuint64KHR *sbc); + + __DRIdrawable *(*get_dri_drawable)(_EGLSurface *surf); }; struct dri2_egl_display @@ -140,14 +163,17 @@ struct dri2_egl_display int own_dri_screen; const __DRIconfig **driver_configs; void *driver; - __DRIcoreExtension *core; - __DRIdri2Extension *dri2; - __DRIswrastExtension *swrast; - __DRI2flushExtension *flush; - __DRItexBufferExtension *tex_buffer; - __DRIimageExtension *image; - __DRIrobustnessExtension *robustness; - __DRI2configQueryExtension *config; + const __DRIcoreExtension *core; + const __DRIimageDriverExtension *image_driver; + const __DRIdri2Extension *dri2; + const __DRIswrastExtension *swrast; + const __DRI2flushExtension *flush; + const __DRItexBufferExtension *tex_buffer; + const __DRIimageExtension *image; + const __DRIrobustnessExtension *robustness; + const __DRI2configQueryExtension *config; + const __DRI2fenceExtension *fence; + const __DRI2rendererQueryExtension *rendererQuery; int fd; int own_device; @@ -170,6 +196,10 @@ struct dri2_egl_display #ifdef HAVE_X11_PLATFORM xcb_connection_t *conn; + int screen; +#ifdef HAVE_DRI3 + struct loader_dri3_extensions loader_dri3_ext; +#endif #endif #ifdef HAVE_WAYLAND_PLATFORM @@ -177,11 +207,15 @@ struct dri2_egl_display struct wl_registry *wl_registry; struct wl_drm *wl_server_drm; struct wl_drm *wl_drm; + struct wl_shm *wl_shm; struct wl_event_queue *wl_queue; int authenticated; int formats; uint32_t capabilities; + int is_render_node; #endif + + int is_different_gpu; }; struct dri2_egl_context @@ -234,6 +268,11 @@ struct dri2_egl_surface #ifdef HAVE_WAYLAND_PLATFORM struct wl_buffer *wl_buffer; __DRIimage *dri_image; + /* for is_different_gpu case. NULL else */ + __DRIimage *linear_copy; + /* for swrast */ + void *data; + int data_size; #endif #ifdef HAVE_DRM_PLATFORM struct gbm_bo *bo; @@ -256,8 +295,8 @@ struct dri2_egl_surface struct dri2_egl_config { _EGLConfig base; - const __DRIconfig *dri_single_config; - const __DRIconfig *dri_double_config; + const __DRIconfig *dri_single_config[2]; + const __DRIconfig *dri_double_config[2]; }; struct dri2_egl_image @@ -266,6 +305,12 @@ struct dri2_egl_image __DRIimage *dri_image; }; +struct dri2_egl_sync { + _EGLSync base; + int refcount; + void *fence; +}; + /* From xmlpool/options.h, user exposed so should be stable */ #define DRI_CONF_VBLANK_NEVER 0 #define DRI_CONF_VBLANK_DEF_INTERVAL_0 1 @@ -275,6 +320,7 @@ struct dri2_egl_image /* standard typecasts */ _EGL_DRIVER_STANDARD_TYPECASTS(dri2_egl) _EGL_DRIVER_TYPECAST(dri2_egl_image, _EGLImage, obj) +_EGL_DRIVER_TYPECAST(dri2_egl_sync, _EGLSync, obj) extern const __DRIimageLookupExtension image_lookup_extension; extern const __DRIuseInvalidateExtension use_invalidate; @@ -289,9 +335,15 @@ dri2_setup_screen(_EGLDisplay *disp); EGLBoolean dri2_load_driver_swrast(_EGLDisplay *disp); +EGLBoolean +dri2_load_driver_dri3(_EGLDisplay *disp); + EGLBoolean dri2_create_screen(_EGLDisplay *disp); +__DRIdrawable * +dri2_surface_get_dri_drawable(_EGLSurface *surf); + __DRIimage * dri2_lookup_egl_image(__DRIscreen *screen, void *image, void *data); @@ -317,4 +369,14 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp); EGLBoolean dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp); +EGLBoolean +dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp); + +void +dri2_flush_drawable_for_swapbuffers(_EGLDisplay *disp, _EGLSurface *draw); + +const __DRIconfig * +dri2_get_dri_config(struct dri2_egl_config *conf, EGLint surface_type, + EGLenum colorspace); + #endif /* EGL_DRI2_INCLUDED */