X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Fegldisplay.h;h=62d9a112f1f4de2a035e519b88c59d1e2bbe296b;hb=9db5cc829f6bd7ba09f3bf0bf057b7162d05d037;hp=42e305f91ac34073d248f6ad19ff86377d782b1b;hpb=bcc13b74443137043e8a34f8cb64a5add0d8af93;p=mesa.git diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index 42e305f91ac..62d9a112f1f 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -1,16 +1,67 @@ +/************************************************************************** + * + * Copyright 2008 VMware, Inc. + * Copyright 2009-2010 Chia-I Wu + * Copyright 2010-2011 LunarG, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + #ifndef EGLDISPLAY_INCLUDED #define EGLDISPLAY_INCLUDED +#include "c99_compat.h" +#include "c11/threads.h" #include "egltypedefs.h" #include "egldefines.h" -#include "eglmutex.h" +#include "eglarray.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +enum _egl_platform_type { + _EGL_PLATFORM_X11, + _EGL_PLATFORM_WAYLAND, + _EGL_PLATFORM_DRM, + _EGL_PLATFORM_ANDROID, + _EGL_PLATFORM_HAIKU, + _EGL_PLATFORM_SURFACELESS, + + _EGL_NUM_PLATFORMS, + _EGL_INVALID_PLATFORM = -1 +}; +typedef enum _egl_platform_type _EGLPlatformType; enum _egl_resource_type { _EGL_RESOURCE_CONTEXT, _EGL_RESOURCE_SURFACE, _EGL_RESOURCE_IMAGE, + _EGL_RESOURCE_SYNC, _EGL_NUM_RESOURCES }; @@ -26,6 +77,9 @@ struct _egl_resource /* which display the resource belongs to */ _EGLDisplay *Display; EGLBoolean IsLinked; + EGLint RefCount; + + EGLLabelKHR Label; /* used to link resources of the same type */ _EGLResource *Next; @@ -37,69 +91,104 @@ struct _egl_resource */ struct _egl_extensions { - EGLBoolean MESA_screen_surface; - EGLBoolean MESA_copy_context; - EGLBoolean KHR_image_base; - EGLBoolean KHR_image_pixmap; - EGLBoolean KHR_vg_parent_image; + /* Please keep these sorted alphabetically. */ + EGLBoolean ANDROID_framebuffer_target; + EGLBoolean ANDROID_image_native_buffer; + EGLBoolean ANDROID_recordable; + + EGLBoolean CHROMIUM_sync_control; + + EGLBoolean EXT_buffer_age; + EGLBoolean EXT_create_context_robustness; + EGLBoolean EXT_image_dma_buf_import; + EGLBoolean EXT_swap_buffers_with_damage; + + EGLBoolean KHR_cl_event2; + EGLBoolean KHR_create_context; + EGLBoolean KHR_fence_sync; + EGLBoolean KHR_get_all_proc_addresses; + EGLBoolean KHR_gl_colorspace; + EGLBoolean KHR_gl_renderbuffer_image; EGLBoolean KHR_gl_texture_2D_image; - EGLBoolean KHR_gl_texture_cubemap_image; EGLBoolean KHR_gl_texture_3D_image; - EGLBoolean KHR_gl_renderbuffer_image; + EGLBoolean KHR_gl_texture_cubemap_image; + EGLBoolean KHR_image_base; + EGLBoolean KHR_image_pixmap; + EGLBoolean KHR_no_config_context; + EGLBoolean KHR_reusable_sync; + EGLBoolean KHR_surfaceless_context; + EGLBoolean KHR_wait_sync; + + EGLBoolean MESA_drm_image; + EGLBoolean MESA_image_dma_buf_export; + EGLBoolean NOK_swap_region; EGLBoolean NOK_texture_from_pixmap; - char String[_EGL_MAX_EXTENSIONS_LEN]; + EGLBoolean NV_post_sub_buffer; + + EGLBoolean WL_bind_wayland_display; + EGLBoolean WL_create_wayland_buffer_from_image; }; -struct _egl_display +struct _egl_display { /* used to link displays */ _EGLDisplay *Next; - _EGLMutex Mutex; + mtx_t Mutex; - EGLNativeDisplayType NativeDisplay; + _EGLPlatformType Platform; /**< The type of the platform display */ + void *PlatformDisplay; /**< A pointer to the platform display */ - EGLBoolean Initialized; /**< True if the display is initialized */ - _EGLDriver *Driver; - void *DriverData; /* private to driver */ + _EGLDriver *Driver; /**< Matched driver of the display */ + EGLBoolean Initialized; /**< True if the display is initialized */ - int APImajor, APIminor; /**< as returned by eglInitialize() */ - char Version[1000]; /**< initialized from APImajor/minor, DriverName */ + /* options that affect how the driver initializes the display */ + struct { + EGLBoolean TestOnly; /**< Driver should not set fields when true */ + EGLBoolean UseFallback; /**< Use fallback driver (sw or less features) */ + } Options; - /** Bitmask of supported APIs (EGL_xx_BIT) set by the driver during init */ - EGLint ClientAPIsMask; - char ClientAPIs[1000]; /**< updated by eglQueryString */ + /* these fields are set by the driver during init */ + void *DriverData; /**< Driver private data */ + EGLint Version; /**< EGL version major*10+minor */ + EGLint ClientAPIs; /**< Bitmask of APIs supported (EGL_xxx_BIT) */ + _EGLExtensions Extensions; /**< Extensions supported */ - _EGLExtensions Extensions; + /* these fields are derived from above */ + char VersionString[100]; /**< EGL_VERSION */ + char ClientAPIsString[100]; /**< EGL_CLIENT_APIS */ + char ExtensionsString[_EGL_MAX_EXTENSIONS_LEN]; /**< EGL_EXTENSIONS */ - EGLint NumScreens; - _EGLScreen **Screens; /* array [NumScreens] */ - - EGLint MaxConfigs; - EGLint NumConfigs; - _EGLConfig **Configs; /* array [NumConfigs] of ptr to _EGLConfig */ + _EGLArray *Screens; + _EGLArray *Configs; /* lists of resources */ _EGLResource *ResourceLists[_EGL_NUM_RESOURCES]; + + EGLLabelKHR Label; }; +extern _EGLPlatformType +_eglGetNativePlatform(void *nativeDisplay); + + extern void _eglFiniDisplay(void); extern _EGLDisplay * -_eglFindDisplay(EGLNativeDisplayType displayName); +_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy); -PUBLIC void +extern void _eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *dpy); -PUBLIC void +extern void _eglCleanupDisplay(_EGLDisplay *disp); @@ -107,7 +196,7 @@ extern EGLBoolean _eglCheckDisplayHandle(EGLDisplay dpy); -PUBLIC EGLBoolean +extern EGLBoolean _eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy); @@ -115,7 +204,7 @@ _eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy); * Lookup a handle to find the linked display. * Return NULL if the handle has no corresponding linked display. */ -static INLINE _EGLDisplay * +static inline _EGLDisplay * _eglLookupDisplay(EGLDisplay display) { _EGLDisplay *dpy = (_EGLDisplay *) display; @@ -128,7 +217,7 @@ _eglLookupDisplay(EGLDisplay display) /** * Return the handle of a linked display, or EGL_NO_DISPLAY. */ -static INLINE EGLDisplay +static inline EGLDisplay _eglGetDisplayHandle(_EGLDisplay *dpy) { return (EGLDisplay) ((dpy) ? dpy : EGL_NO_DISPLAY); @@ -136,7 +225,19 @@ _eglGetDisplayHandle(_EGLDisplay *dpy) extern void -_eglLinkResource(_EGLResource *res, _EGLResourceType type, _EGLDisplay *dpy); +_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy); + + +extern void +_eglGetResource(_EGLResource *res); + + +extern EGLBoolean +_eglPutResource(_EGLResource *res); + + +extern void +_eglLinkResource(_EGLResource *res, _EGLResourceType type); extern void @@ -146,11 +247,41 @@ _eglUnlinkResource(_EGLResource *res, _EGLResourceType type); /** * Return true if the resource is linked. */ -static INLINE EGLBoolean +static inline EGLBoolean _eglIsResourceLinked(_EGLResource *res) { return res->IsLinked; } +#ifdef HAVE_X11_PLATFORM +_EGLDisplay* +_eglGetX11Display(Display *native_display, const EGLint *attrib_list); +#endif + +#ifdef HAVE_DRM_PLATFORM +struct gbm_device; + +_EGLDisplay* +_eglGetGbmDisplay(struct gbm_device *native_display, + const EGLint *attrib_list); +#endif + +#ifdef HAVE_WAYLAND_PLATFORM +struct wl_display; + +_EGLDisplay* +_eglGetWaylandDisplay(struct wl_display *native_display, + const EGLint *attrib_list); +#endif + +#ifdef HAVE_SURFACELESS_PLATFORM +_EGLDisplay* +_eglGetSurfacelessDisplay(void *native_display, + const EGLint *attrib_list); +#endif + +#ifdef __cplusplus +} +#endif #endif /* EGLDISPLAY_INCLUDED */