X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Fegldisplay.h;h=97ae2b01ba01b2ebe9112909b67de1773aa47f41;hb=6b369c4c7cd8a52f99bbff2a57fb316b33a87495;hp=5d44eb1ea88f35eca4c8148de45c01c35356a75d;hpb=dbb866ab33862defc2749134805bafebf323fd11;p=mesa.git diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index 5d44eb1ea88..97ae2b01ba0 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -1,17 +1,36 @@ #ifndef EGLDISPLAY_INCLUDED #define EGLDISPLAY_INCLUDED + #include "egltypedefs.h" #include "egldefines.h" +#include "eglmutex.h" +#include "eglarray.h" + + +enum _egl_platform_type { + _EGL_PLATFORM_WINDOWS, + _EGL_PLATFORM_X11, + _EGL_PLATFORM_WAYLAND, + _EGL_PLATFORM_DRM, + _EGL_PLATFORM_FBDEV, + + _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 }; +/* this cannot and need not go into egltypedefs.h */ +typedef enum _egl_resource_type _EGLResourceType; /** @@ -19,7 +38,12 @@ enum _egl_resource_type { */ struct _egl_resource { + /* which display the resource belongs to */ _EGLDisplay *Display; + EGLBoolean IsLinked; + EGLint RefCount; + + /* used to link resources of the same type */ _EGLResource *Next; }; @@ -31,64 +55,80 @@ 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; + 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_reusable_sync; + EGLBoolean KHR_fence_sync; - char String[_EGL_MAX_EXTENSIONS_LEN]; + EGLBoolean KHR_surfaceless_gles1; + EGLBoolean KHR_surfaceless_gles2; + EGLBoolean KHR_surfaceless_opengl; + + EGLBoolean NOK_swap_region; + EGLBoolean NOK_texture_from_pixmap; }; -struct _egl_display +struct _egl_display { /* used to link displays */ _EGLDisplay *Next; - EGLNativeDisplayType NativeDisplay; - - _EGLDriver *Driver; - void *DriverData; /* private to driver */ + _EGLMutex Mutex; - int APImajor, APIminor; /**< as returned by eglInitialize() */ - char Version[1000]; /**< initialized from APImajor/minor, DriverName */ + _EGLPlatformType Platform; /**< The type of the platform display */ + void *PlatformDisplay; /**< A pointer to the platform display */ - /** Bitmask of supported APIs (EGL_xx_BIT) set by the driver during init */ - EGLint ClientAPIsMask; - char ClientAPIs[1000]; /**< updated by eglQueryString */ + _EGLDriver *Driver; /**< Matched driver of the display */ + EGLBoolean Initialized; /**< True if the display is initialized */ - _EGLExtensions Extensions; + /* 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; - int LargestPbuffer; + /* 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 ClientAPIs; /**< Bitmask of APIs supported (EGL_xxx_BIT) */ + _EGLExtensions Extensions; /**< Extensions supported */ - EGLint NumScreens; - _EGLScreen **Screens; /* array [NumScreens] */ + /* these fields are derived from above */ + char VersionString[1000]; /**< EGL_VERSION */ + char ClientAPIsString[1000]; /**< EGL_CLIENT_APIS */ + char ExtensionsString[_EGL_MAX_EXTENSIONS_LEN]; /**< EGL_EXTENSIONS */ - EGLint MaxConfigs; - EGLint NumConfigs; - _EGLConfig **Configs; /* array [NumConfigs] of ptr to _EGLConfig */ + _EGLArray *Screens; + _EGLArray *Configs; /* lists of resources */ _EGLResource *ResourceLists[_EGL_NUM_RESOURCES]; }; -extern void -_eglFiniDisplay(void); - - -extern _EGLDisplay * -_eglNewDisplay(NativeDisplayType displayName); - - -extern EGLDisplay -_eglLinkDisplay(_EGLDisplay *dpy); +extern _EGLPlatformType +_eglGetNativePlatform(void); extern void -_eglUnlinkDisplay(_EGLDisplay *dpy); +_eglFiniDisplay(void); extern _EGLDisplay * -_eglFindDisplay(NativeDisplayType nativeDisplay); +_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy); PUBLIC void @@ -99,36 +139,12 @@ PUBLIC void _eglCleanupDisplay(_EGLDisplay *disp); -#ifndef _EGL_SKIP_HANDLE_CHECK - - extern EGLBoolean _eglCheckDisplayHandle(EGLDisplay dpy); -extern EGLBoolean -_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy); - - -#else /* !_EGL_SKIP_HANDLE_CHECK */ - -/* Only do a quick check. This is NOT standard compliant. */ - -static INLINE EGLBoolean -_eglCheckDisplayHandle(EGLDisplay dpy) -{ - return ((_EGLDisplay *) dpy != NULL); -} - - -static INLINE EGLBoolean +PUBLIC EGLBoolean _eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy); -{ - return (((_EGLResource *) res)->Display == dpy); -} - - -#endif /* _EGL_SKIP_HANDLE_CHECK */ /** @@ -155,18 +171,20 @@ _eglGetDisplayHandle(_EGLDisplay *dpy) } -/** - * Return true if the display is linked. - */ -static INLINE EGLBoolean -_eglIsDisplayLinked(_EGLDisplay *dpy) -{ - return (EGLBoolean) (_eglGetDisplayHandle(dpy) != EGL_NO_DISPLAY); -} +extern void +_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy); + + +PUBLIC void +_eglGetResource(_EGLResource *res); + + +PUBLIC EGLBoolean +_eglPutResource(_EGLResource *res); extern void -_eglLinkResource(_EGLResource *res, _EGLResourceType type, _EGLDisplay *dpy); +_eglLinkResource(_EGLResource *res, _EGLResourceType type); extern void @@ -179,7 +197,7 @@ _eglUnlinkResource(_EGLResource *res, _EGLResourceType type); static INLINE EGLBoolean _eglIsResourceLinked(_EGLResource *res) { - return (res->Display != NULL); + return res->IsLinked; }