X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fdrivers%2Fdri2%2Fegl_dri2.h;h=be272f9bb25c39ee1378f1fbb7429cbd97c1ee5a;hb=58911b86a15676f116c693e84ea6b9ebabb906ed;hp=d957c7662d53c32fe724ed066e06f94677ab744d;hpb=2889d9640fa98b690c6a89593572bbc9ea5640e3;p=mesa.git diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index d957c7662d5..be272f9bb25 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -28,14 +28,26 @@ #ifndef EGL_DRI2_INCLUDED #define EGL_DRI2_INCLUDED +#ifdef HAVE_X11_PLATFORM #include #include #include #include +#endif + +#ifdef HAVE_WAYLAND_PLATFORM +#include +#include "wayland-drm.h" +#include "wayland-egl-priv.h" +#endif #include #include +#ifdef HAVE_DRM_PLATFORM +#include +#endif + #include "eglconfig.h" #include "eglcontext.h" #include "egldisplay.h" @@ -58,24 +70,44 @@ struct dri2_egl_driver struct dri2_egl_display { - xcb_connection_t *conn; int dri2_major; int dri2_minor; __DRIscreen *dri_screen; + int own_dri_screen; const __DRIconfig **driver_configs; void *driver; __DRIcoreExtension *core; __DRIdri2Extension *dri2; + __DRIswrastExtension *swrast; __DRI2flushExtension *flush; __DRItexBufferExtension *tex_buffer; __DRIimageExtension *image; int fd; +#ifdef HAVE_DRM_PLATFORM + struct gbm_dri_device *gbm_dri; + int own_gbm_device; +#endif + char *device_name; char *driver_name; - __DRIdri2LoaderExtension loader_extension; - const __DRIextension *extensions[3]; + __DRIdri2LoaderExtension dri2_loader_extension; + __DRIswrastLoaderExtension swrast_loader_extension; + const __DRIextension *extensions[4]; + +#ifdef HAVE_X11_PLATFORM + xcb_connection_t *conn; +#endif + +#ifdef HAVE_WAYLAND_PLATFORM + struct wl_display *wl_dpy; + struct wl_drm *wl_server_drm; + struct wl_drm *wl_drm; + int authenticated; +#endif + + int (*authenticate) (_EGLDisplay *disp, uint32_t id); }; struct dri2_egl_context @@ -84,22 +116,65 @@ struct dri2_egl_context __DRIcontext *dri_context; }; +#ifdef HAVE_WAYLAND_PLATFORM +enum wayland_buffer_type { + WL_BUFFER_FRONT, + WL_BUFFER_BACK, + WL_BUFFER_THIRD, + WL_BUFFER_COUNT +}; +#endif + +enum dri2_surface_type { + DRI2_WINDOW_SURFACE, + DRI2_PIXMAP_SURFACE, + DRI2_PBUFFER_SURFACE +}; + struct dri2_egl_surface { _EGLSurface base; __DRIdrawable *dri_drawable; - xcb_drawable_t drawable; __DRIbuffer buffers[5]; int buffer_count; - xcb_xfixes_region_t region; int have_fake_front; int swap_interval; + +#ifdef HAVE_X11_PLATFORM + xcb_drawable_t drawable; + xcb_xfixes_region_t region; + int depth; + int bytes_per_pixel; + xcb_gcontext_t gc; + xcb_gcontext_t swapgc; +#endif + + enum dri2_surface_type type; +#ifdef HAVE_WAYLAND_PLATFORM + struct wl_egl_window *wl_win; + struct wl_egl_pixmap *wl_pix; + struct wl_buffer *wl_drm_buffer[WL_BUFFER_COUNT]; + int wl_buffer_lock[WL_BUFFER_COUNT]; + int dx; + int dy; + __DRIbuffer *dri_buffers[__DRI_BUFFER_COUNT]; + __DRIbuffer *third_buffer; + __DRIbuffer *pending_buffer; + EGLBoolean block_swap_buffers; +#endif +}; + +struct dri2_egl_buffer { + __DRIbuffer *dri_buffer; + struct dri2_egl_display *dri2_dpy; }; + struct dri2_egl_config { _EGLConfig base; - const __DRIconfig *dri_config; + const __DRIconfig *dri_single_config; + const __DRIconfig *dri_double_config; }; struct dri2_egl_image @@ -113,16 +188,28 @@ _EGL_DRIVER_STANDARD_TYPECASTS(dri2_egl) _EGL_DRIVER_TYPECAST(dri2_egl_image, _EGLImage, obj) extern const __DRIimageLookupExtension image_lookup_extension; +extern const __DRIuseInvalidateExtension use_invalidate; EGLBoolean dri2_load_driver(_EGLDisplay *disp); +/* Helper for platforms not using dri2_create_screen */ +void +dri2_setup_screen(_EGLDisplay *disp); + +EGLBoolean +dri2_load_driver_swrast(_EGLDisplay *disp); + EGLBoolean dri2_create_screen(_EGLDisplay *disp); +__DRIimage * +dri2_lookup_egl_image(__DRIscreen *screen, void *image, void *data); + struct dri2_egl_config * dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, - int depth, EGLint surface_type); + int depth, EGLint surface_type, const EGLint *attr_list, + const unsigned int *rgba_masks); _EGLImage * dri2_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp, @@ -132,4 +219,15 @@ dri2_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp, EGLBoolean dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp); +EGLBoolean +dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp); + +EGLBoolean +dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp); + +char * +dri2_get_driver_for_fd(int fd); +char * +dri2_get_device_name_for_fd(int fd); + #endif /* EGL_DRI2_INCLUDED */