X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fegl%2Fmain%2Fegldisplay.h;h=f73ff99fbeef09c4c6dd0ae42807d79214f9069f;hp=cddea803c24433b3ac225c6b615c764b3605af4b;hb=eeacd66324c54bfe58fd29dd56918efa43d28836;hpb=00b365bc78c131bfd1c19bb22ac55e36f4e8f3c5 diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index cddea803c24..f73ff99fbee 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2008 VMware, Inc. * Copyright 2009-2010 Chia-I Wu * Copyright 2010-2011 LunarG, Inc. * All Rights Reserved. @@ -31,20 +31,26 @@ #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_WINDOWS, _EGL_PLATFORM_X11, _EGL_PLATFORM_WAYLAND, _EGL_PLATFORM_DRM, - _EGL_PLATFORM_FBDEV, _EGL_PLATFORM_ANDROID, + _EGL_PLATFORM_HAIKU, + _EGL_PLATFORM_SURFACELESS, + _EGL_PLATFORM_DEVICE, _EGL_NUM_PLATFORMS, _EGL_INVALID_PLATFORM = -1 @@ -74,6 +80,8 @@ struct _egl_resource EGLBoolean IsLinked; EGLint RefCount; + EGLLabelKHR Label; + /* used to link resources of the same type */ _EGLResource *Next; }; @@ -84,77 +92,110 @@ struct _egl_resource */ struct _egl_extensions { - EGLBoolean MESA_screen_surface; - EGLBoolean MESA_copy_context; - EGLBoolean MESA_drm_display; - EGLBoolean MESA_drm_image; - - EGLBoolean WL_bind_wayland_display; - - EGLBoolean KHR_image_base; - EGLBoolean KHR_image_pixmap; - EGLBoolean KHR_vg_parent_image; + /* Please keep these sorted alphabetically. */ + EGLBoolean ANDROID_blob_cache; + EGLBoolean ANDROID_framebuffer_target; + EGLBoolean ANDROID_image_native_buffer; + EGLBoolean ANDROID_native_fence_sync; + EGLBoolean ANDROID_recordable; + + EGLBoolean CHROMIUM_sync_control; + + EGLBoolean EXT_buffer_age; + EGLBoolean EXT_create_context_robustness; + EGLBoolean EXT_image_dma_buf_import; + EGLBoolean EXT_image_dma_buf_import_modifiers; + EGLBoolean EXT_pixel_format_float; + EGLBoolean EXT_surface_CTA861_3_metadata; + EGLBoolean EXT_surface_SMPTE2086_metadata; + EGLBoolean EXT_swap_buffers_with_damage; + + unsigned int IMG_context_priority; +#define __EGL_CONTEXT_PRIORITY_LOW_BIT 0 +#define __EGL_CONTEXT_PRIORITY_MEDIUM_BIT 1 +#define __EGL_CONTEXT_PRIORITY_HIGH_BIT 2 + + EGLBoolean KHR_cl_event2; + EGLBoolean KHR_config_attribs; + EGLBoolean KHR_context_flush_control; + EGLBoolean KHR_create_context; + EGLBoolean KHR_create_context_no_error; + 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; + EGLBoolean KHR_image_base; + EGLBoolean KHR_image_pixmap; + EGLBoolean KHR_mutable_render_buffer; + EGLBoolean KHR_no_config_context; + EGLBoolean KHR_partial_update; EGLBoolean KHR_reusable_sync; - EGLBoolean KHR_fence_sync; + EGLBoolean KHR_surfaceless_context; + EGLBoolean KHR_wait_sync; - EGLBoolean KHR_surfaceless_gles1; - EGLBoolean KHR_surfaceless_gles2; - EGLBoolean KHR_surfaceless_opengl; + EGLBoolean MESA_drm_image; + EGLBoolean MESA_image_dma_buf_export; + EGLBoolean MESA_query_driver; EGLBoolean NOK_swap_region; EGLBoolean NOK_texture_from_pixmap; - EGLBoolean ANDROID_image_native_buffer; - EGLBoolean ANDROID_swap_rectangle; -}; + EGLBoolean NV_post_sub_buffer; + EGLBoolean WL_bind_wayland_display; + EGLBoolean WL_create_wayland_buffer_from_image; +}; struct _egl_display { /* used to link displays */ _EGLDisplay *Next; - _EGLMutex Mutex; + mtx_t Mutex; _EGLPlatformType Platform; /**< The type of the platform display */ void *PlatformDisplay; /**< A pointer to the platform display */ + _EGLDevice *Device; /**< Device backing the display */ _EGLDriver *Driver; /**< Matched driver of the display */ EGLBoolean Initialized; /**< True if the display is initialized */ /* 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) */ + EGLBoolean ForceSoftware; /**< Use software path only */ + EGLAttrib *Attribs; /**< Platform-specific options */ + int fd; /**< plaform device specific, local fd */ } Options; /* these fields are set by the driver during init */ void *DriverData; /**< Driver private data */ - EGLint VersionMajor; /**< EGL major version */ - EGLint VersionMinor; /**< EGL minor version */ + EGLint Version; /**< EGL version major*10+minor */ EGLint ClientAPIs; /**< Bitmask of APIs supported (EGL_xxx_BIT) */ _EGLExtensions Extensions; /**< Extensions supported */ /* these fields are derived from above */ - char VersionString[1000]; /**< EGL_VERSION */ - char ClientAPIsString[1000]; /**< EGL_CLIENT_APIS */ + char VersionString[100]; /**< EGL_VERSION */ + char ClientAPIsString[100]; /**< EGL_CLIENT_APIS */ char ExtensionsString[_EGL_MAX_EXTENSIONS_LEN]; /**< EGL_EXTENSIONS */ - _EGLArray *Screens; _EGLArray *Configs; /* lists of resources */ _EGLResource *ResourceLists[_EGL_NUM_RESOURCES]; + + EGLLabelKHR Label; + + EGLSetBlobFuncANDROID BlobCacheSet; + EGLGetBlobFuncANDROID BlobCacheGet; }; extern _EGLPlatformType -_eglGetNativePlatform(EGLNativeDisplayType nativeDisplay); +_eglGetNativePlatform(void *nativeDisplay); extern void @@ -162,14 +203,14 @@ _eglFiniDisplay(void); extern _EGLDisplay * -_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy); +_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy, const EGLAttrib *attr); -PUBLIC void -_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *dpy); +extern void +_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *disp); -PUBLIC void +extern void _eglCleanupDisplay(_EGLDisplay *disp); @@ -177,43 +218,43 @@ extern EGLBoolean _eglCheckDisplayHandle(EGLDisplay dpy); -PUBLIC EGLBoolean -_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy); +extern EGLBoolean +_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *disp); /** * Lookup a handle to find the linked display. * Return NULL if the handle has no corresponding linked display. */ -static INLINE _EGLDisplay * -_eglLookupDisplay(EGLDisplay display) +static inline _EGLDisplay * +_eglLookupDisplay(EGLDisplay dpy) { - _EGLDisplay *dpy = (_EGLDisplay *) display; - if (!_eglCheckDisplayHandle(display)) - dpy = NULL; - return dpy; + _EGLDisplay *disp = (_EGLDisplay *) dpy; + if (!_eglCheckDisplayHandle(dpy)) + disp = NULL; + return disp; } /** * Return the handle of a linked display, or EGL_NO_DISPLAY. */ -static INLINE EGLDisplay -_eglGetDisplayHandle(_EGLDisplay *dpy) +static inline EGLDisplay +_eglGetDisplayHandle(_EGLDisplay *disp) { - return (EGLDisplay) ((dpy) ? dpy : EGL_NO_DISPLAY); + return (EGLDisplay) ((disp) ? disp : EGL_NO_DISPLAY); } extern void -_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy); +_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *disp); -PUBLIC void +extern void _eglGetResource(_EGLResource *res); -PUBLIC EGLBoolean +extern EGLBoolean _eglPutResource(_EGLResource *res); @@ -228,11 +269,58 @@ _eglUnlinkResource(_EGLResource *res, _EGLResourceType type); /** * Return true if the resource is linked. */ -static INLINE EGLBoolean +static inline EGLBoolean _eglIsResourceLinked(_EGLResource *res) { return res->IsLinked; } +static inline size_t +_eglNumAttribs(const EGLAttrib *attribs) +{ + size_t len = 0; + + if (attribs) { + while (attribs[len] != EGL_NONE) + len += 2; + len++; + } + return len; +} + +#ifdef HAVE_X11_PLATFORM +_EGLDisplay* +_eglGetX11Display(Display *native_display, const EGLAttrib *attrib_list); +#endif + +#ifdef HAVE_DRM_PLATFORM +struct gbm_device; + +_EGLDisplay* +_eglGetGbmDisplay(struct gbm_device *native_display, + const EGLAttrib *attrib_list); +#endif + +#ifdef HAVE_WAYLAND_PLATFORM +struct wl_display; + +_EGLDisplay* +_eglGetWaylandDisplay(struct wl_display *native_display, + const EGLAttrib *attrib_list); +#endif + +#ifdef HAVE_SURFACELESS_PLATFORM +_EGLDisplay* +_eglGetSurfacelessDisplay(void *native_display, + const EGLAttrib *attrib_list); +#endif + +_EGLDisplay* +_eglGetDeviceDisplay(void *native_display, + const EGLAttrib *attrib_list); + +#ifdef __cplusplus +} +#endif #endif /* EGLDISPLAY_INCLUDED */