egldisplay.h revision cdc920a0
1#ifndef EGLDISPLAY_INCLUDED 2#define EGLDISPLAY_INCLUDED 3 4 5#include "egltypedefs.h" 6#include "egldefines.h" 7#include "eglmutex.h" 8 9 10enum _egl_resource_type { 11 _EGL_RESOURCE_CONTEXT, 12 _EGL_RESOURCE_SURFACE, 13 _EGL_RESOURCE_IMAGE, 14 15 _EGL_NUM_RESOURCES 16}; 17/* this cannot and need not go into egltypedefs.h */ 18typedef enum _egl_resource_type _EGLResourceType; 19 20 21/** 22 * A resource of a display. 23 */ 24struct _egl_resource 25{ 26 /* which display the resource belongs to */ 27 _EGLDisplay *Display; 28 EGLBoolean IsLinked; 29 30 /* used to link resources of the same type */ 31 _EGLResource *Next; 32}; 33 34 35/** 36 * Optional EGL extensions info. 37 */ 38struct _egl_extensions 39{ 40 EGLBoolean MESA_screen_surface; 41 EGLBoolean MESA_copy_context; 42 EGLBoolean KHR_image_base; 43 EGLBoolean KHR_image_pixmap; 44 EGLBoolean KHR_vg_parent_image; 45 EGLBoolean KHR_gl_texture_2D_image; 46 EGLBoolean KHR_gl_texture_cubemap_image; 47 EGLBoolean KHR_gl_texture_3D_image; 48 EGLBoolean KHR_gl_renderbuffer_image; 49 50 char String[_EGL_MAX_EXTENSIONS_LEN]; 51}; 52 53 54struct _egl_display 55{ 56 /* used to link displays */ 57 _EGLDisplay *Next; 58 59 _EGLMutex Mutex; 60 61 EGLNativeDisplayType NativeDisplay; 62 63 EGLBoolean Initialized; /**< True if the display is initialized */ 64 _EGLDriver *Driver; 65 void *DriverData; /* private to driver */ 66 67 int APImajor, APIminor; /**< as returned by eglInitialize() */ 68 char Version[1000]; /**< initialized from APImajor/minor, DriverName */ 69 70 /** Bitmask of supported APIs (EGL_xx_BIT) set by the driver during init */ 71 EGLint ClientAPIsMask; 72 char ClientAPIs[1000]; /**< updated by eglQueryString */ 73 74 _EGLExtensions Extensions; 75 76 EGLint NumScreens; 77 _EGLScreen **Screens; /* array [NumScreens] */ 78 79 EGLint MaxConfigs; 80 EGLint NumConfigs; 81 _EGLConfig **Configs; /* array [NumConfigs] of ptr to _EGLConfig */ 82 83 /* lists of resources */ 84 _EGLResource *ResourceLists[_EGL_NUM_RESOURCES]; 85}; 86 87 88extern void 89_eglFiniDisplay(void); 90 91 92extern _EGLDisplay * 93_eglFindDisplay(EGLNativeDisplayType displayName); 94 95 96PUBLIC void 97_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *dpy); 98 99 100PUBLIC void 101_eglCleanupDisplay(_EGLDisplay *disp); 102 103 104extern EGLBoolean 105_eglCheckDisplayHandle(EGLDisplay dpy); 106 107 108PUBLIC EGLBoolean 109_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy); 110 111 112/** 113 * Lookup a handle to find the linked display. 114 * Return NULL if the handle has no corresponding linked display. 115 */ 116static INLINE _EGLDisplay * 117_eglLookupDisplay(EGLDisplay display) 118{ 119 _EGLDisplay *dpy = (_EGLDisplay *) display; 120 if (!_eglCheckDisplayHandle(display)) 121 dpy = NULL; 122 return dpy; 123} 124 125 126/** 127 * Return the handle of a linked display, or EGL_NO_DISPLAY. 128 */ 129static INLINE EGLDisplay 130_eglGetDisplayHandle(_EGLDisplay *dpy) 131{ 132 return (EGLDisplay) ((dpy) ? dpy : EGL_NO_DISPLAY); 133} 134 135 136extern void 137_eglLinkResource(_EGLResource *res, _EGLResourceType type, _EGLDisplay *dpy); 138 139 140extern void 141_eglUnlinkResource(_EGLResource *res, _EGLResourceType type); 142 143 144/** 145 * Return true if the resource is linked. 146 */ 147static INLINE EGLBoolean 148_eglIsResourceLinked(_EGLResource *res) 149{ 150 return res->IsLinked; 151} 152 153 154#endif /* EGLDISPLAY_INCLUDED */ 155