X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fegl%2Fdrivers%2Fdri2%2Fegl_dri2.h;h=349f66a35061d042dbfef43b78ce1752f14dff4e;hb=54a9622dd5fdee7d18c05d968c97c4dd4fa9c83c;hp=10a415181720ccd435b7c6f36ca55c485eaf30ee;hpb=13c23b19d0b3b965d666498eb759e63fc4a625d9;p=mesa.git diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 10a41518172..349f66a3506 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -43,9 +43,15 @@ #endif #ifdef HAVE_WAYLAND_PLATFORM -#include -#include "wayland-egl-priv.h" -/* forward declarations of protocol elements */ +/* forward declarations to avoid pulling wayland headers everywhere */ +struct wl_egl_window; +struct wl_event_queue; +struct wl_callback; +struct wl_display; +struct wl_drm; +struct wl_registry; +struct wl_shm; +struct wl_surface; struct zwp_linux_dmabuf_v1; #endif @@ -61,8 +67,6 @@ struct zwp_linux_dmabuf_v1; #include #include -#include - #endif /* HAVE_ANDROID_PLATFORM */ #include "eglconfig.h" @@ -79,15 +83,6 @@ struct zwp_linux_dmabuf_v1; struct wl_buffer; -struct dri2_egl_driver -{ - _EGLDriver base; - - void *handle; - _EGLProc (*get_proc_address)(const char *procname); - void (*glFlush)(void); -}; - struct dri2_egl_display_vtbl { int (*authenticate)(_EGLDisplay *disp, uint32_t id); @@ -156,6 +151,12 @@ struct dri2_egl_display_vtbl { __DRIdrawable *(*get_dri_drawable)(_EGLSurface *surf); void (*close_screen_notify)(_EGLDisplay *dpy); + + /* Used in EGL_KHR_mutable_render_buffer to update the native window's + * shared buffer mode. + */ + bool (*set_shared_buffer_mode)(_EGLDisplay *dpy, _EGLSurface *surf, + bool mode); }; struct dri2_egl_display @@ -173,14 +174,17 @@ struct dri2_egl_display const __DRIdri2Extension *dri2; const __DRIswrastExtension *swrast; const __DRI2flushExtension *flush; + const __DRI2flushControlExtension *flush_control; const __DRItexBufferExtension *tex_buffer; const __DRIimageExtension *image; const __DRIrobustnessExtension *robustness; const __DRInoErrorExtension *no_error; const __DRI2configQueryExtension *config; const __DRI2fenceExtension *fence; + const __DRI2blobExtension *blob; const __DRI2rendererQueryExtension *rendererQuery; const __DRI2interopExtension *interop; + const __DRImutableRenderBufferDriverExtension *mutable_render_buffer; int fd; /* dri2_initialize/dri2_terminate increment/decrement this count, so does @@ -206,6 +210,11 @@ struct dri2_egl_display xcb_screen_t *screen; bool swap_available; #ifdef HAVE_DRI3 + bool multibuffers_available; + int dri3_major_version; + int dri3_minor_version; + int present_major_version; + int present_minor_version; struct loader_dri3_extensions loader_dri3_ext; #endif #endif @@ -219,13 +228,9 @@ struct dri2_egl_display struct wl_shm *wl_shm; struct wl_event_queue *wl_queue; struct zwp_linux_dmabuf_v1 *wl_dmabuf; - struct { - struct u_vector xrgb8888; - struct u_vector argb8888; - struct u_vector rgb565; - } wl_modifiers; + struct u_vector *wl_modifiers; bool authenticated; - int formats; + unsigned formats; uint32_t capabilities; char *device_name; #endif @@ -292,6 +297,7 @@ struct dri2_egl_surface struct { #ifdef HAVE_WAYLAND_PLATFORM struct wl_buffer *wl_buffer; + bool wl_release; __DRIimage *dri_image; /* for is_different_gpu case. NULL else */ __DRIimage *linear_copy; @@ -408,20 +414,79 @@ _EGLImage * dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx, EGLClientBuffer buffer, const EGLint *attr_list); +#ifdef HAVE_X11_PLATFORM EGLBoolean dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp); +void +dri2_teardown_x11(struct dri2_egl_display *dri2_dpy); +unsigned int +dri2_x11_get_red_mask_for_depth(struct dri2_egl_display *dri2_dpy, int depth); +#else +static inline EGLBoolean +dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp) +{ + return _eglError(EGL_NOT_INITIALIZED, "X11 platform not built"); +} +static inline void +dri2_teardown_x11(struct dri2_egl_display *dri2_dpy) {} +static inline unsigned int +dri2_x11_get_red_mask_for_depth(struct dri2_egl_display *dri2_dpy, int depth) +{ + return 0; +} +#endif +#ifdef HAVE_DRM_PLATFORM EGLBoolean dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp); +void +dri2_teardown_drm(struct dri2_egl_display *dri2_dpy); +#else +static inline EGLBoolean +dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) +{ + return _eglError(EGL_NOT_INITIALIZED, "GBM/DRM platform not built"); +} +static inline void +dri2_teardown_drm(struct dri2_egl_display *dri2_dpy) {} +#endif +#ifdef HAVE_WAYLAND_PLATFORM EGLBoolean dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp); +void +dri2_teardown_wayland(struct dri2_egl_display *dri2_dpy); +#else +static inline EGLBoolean +dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp) +{ + return _eglError(EGL_NOT_INITIALIZED, "Wayland platform not built"); +} +static inline void +dri2_teardown_wayland(struct dri2_egl_display *dri2_dpy) {} +#endif +#ifdef HAVE_ANDROID_PLATFORM EGLBoolean dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp); +#else +static inline EGLBoolean +dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp) +{ + return _eglError(EGL_NOT_INITIALIZED, "Android platform not built"); +} +#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 void dri2_flush_drawable_for_swapbuffers(_EGLDisplay *disp, _EGLSurface *draw); @@ -471,4 +536,10 @@ dri2_init_surface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, void dri2_fini_surface(_EGLSurface *surf); +static inline uint64_t +combine_u32_into_u64(uint32_t hi, uint32_t lo) +{ + return (((uint64_t) hi) << 32) | (((uint64_t) lo) & 0xffffffff); +} + #endif /* EGL_DRI2_INCLUDED */