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