Merge remote branch 'origin/master' into gallium_draw_llvm
[mesa.git] / src / egl / main / egldisplay.h
1 #ifndef EGLDISPLAY_INCLUDED
2 #define EGLDISPLAY_INCLUDED
3
4
5 #include "egltypedefs.h"
6 #include "egldefines.h"
7 #include "eglmutex.h"
8
9
10 enum _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 */
18 typedef enum _egl_resource_type _EGLResourceType;
19
20
21 /**
22 * A resource of a display.
23 */
24 struct _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 */
38 struct _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
54 struct _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
88 extern void
89 _eglFiniDisplay(void);
90
91
92 extern _EGLDisplay *
93 _eglFindDisplay(EGLNativeDisplayType displayName);
94
95
96 PUBLIC void
97 _eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *dpy);
98
99
100 PUBLIC void
101 _eglCleanupDisplay(_EGLDisplay *disp);
102
103
104 extern EGLBoolean
105 _eglCheckDisplayHandle(EGLDisplay dpy);
106
107
108 PUBLIC 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 */
116 static 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 */
129 static INLINE EGLDisplay
130 _eglGetDisplayHandle(_EGLDisplay *dpy)
131 {
132 return (EGLDisplay) ((dpy) ? dpy : EGL_NO_DISPLAY);
133 }
134
135
136 extern void
137 _eglLinkResource(_EGLResource *res, _EGLResourceType type, _EGLDisplay *dpy);
138
139
140 extern void
141 _eglUnlinkResource(_EGLResource *res, _EGLResourceType type);
142
143
144 /**
145 * Return true if the resource is linked.
146 */
147 static INLINE EGLBoolean
148 _eglIsResourceLinked(_EGLResource *res)
149 {
150 return res->IsLinked;
151 }
152
153
154 #endif /* EGLDISPLAY_INCLUDED */