• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**************************************************************************
2  *
3  * Copyright 2008 VMware, Inc.
4  * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
5  * Copyright 2010-2011 LunarG, Inc.
6  * All Rights Reserved.
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sub license, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice (including the
17  * next paragraph) shall be included in all copies or substantial portions
18  * of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
23  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  * DEALINGS IN THE SOFTWARE.
27  *
28  **************************************************************************/
29 
30 
31 #ifndef EGLAPI_INCLUDED
32 #define EGLAPI_INCLUDED
33 
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 /**
40  * A generic function ptr type
41  */
42 typedef void (*_EGLProc)(void);
43 
44 struct wl_display;
45 struct mesa_glinterop_device_info;
46 struct mesa_glinterop_export_in;
47 struct mesa_glinterop_export_out;
48 
49 /**
50  * The API dispatcher jumps through these functions
51  */
52 struct _egl_api
53 {
54    /* driver funcs */
55    EGLBoolean (*Initialize)(_EGLDriver *, _EGLDisplay *dpy);
56    EGLBoolean (*Terminate)(_EGLDriver *, _EGLDisplay *dpy);
57 
58    /* config funcs */
59    EGLBoolean (*GetConfigs)(_EGLDriver *drv, _EGLDisplay *dpy,
60                             EGLConfig *configs, EGLint config_size,
61                             EGLint *num_config);
62    EGLBoolean (*ChooseConfig)(_EGLDriver *drv, _EGLDisplay *dpy,
63                               const EGLint *attrib_list, EGLConfig *configs,
64                               EGLint config_size, EGLint *num_config);
65    EGLBoolean (*GetConfigAttrib)(_EGLDriver *drv, _EGLDisplay *dpy,
66                                  _EGLConfig *config, EGLint attribute,
67                                  EGLint *value);
68 
69    /* context funcs */
70    _EGLContext *(*CreateContext)(_EGLDriver *drv, _EGLDisplay *dpy,
71                                  _EGLConfig *config, _EGLContext *share_list,
72                                  const EGLint *attrib_list);
73    EGLBoolean (*DestroyContext)(_EGLDriver *drv, _EGLDisplay *dpy,
74                                 _EGLContext *ctx);
75    /* this is the only function (other than Initialize) that may be called
76     * with an uninitialized display
77     */
78    EGLBoolean (*MakeCurrent)(_EGLDriver *drv, _EGLDisplay *dpy,
79                              _EGLSurface *draw, _EGLSurface *read,
80                              _EGLContext *ctx);
81    EGLBoolean (*QueryContext)(_EGLDriver *drv, _EGLDisplay *dpy,
82                               _EGLContext *ctx, EGLint attribute,
83                               EGLint *value);
84 
85    /* surface funcs */
86    _EGLSurface *(*CreateWindowSurface)(_EGLDriver *drv, _EGLDisplay *dpy,
87                                        _EGLConfig *config, void *native_window,
88                                        const EGLint *attrib_list);
89    _EGLSurface *(*CreatePixmapSurface)(_EGLDriver *drv, _EGLDisplay *dpy,
90                                        _EGLConfig *config, void *native_pixmap,
91                                        const EGLint *attrib_list);
92    _EGLSurface *(*CreatePbufferSurface)(_EGLDriver *drv, _EGLDisplay *dpy,
93                                         _EGLConfig *config,
94                                         const EGLint *attrib_list);
95    EGLBoolean (*DestroySurface)(_EGLDriver *drv, _EGLDisplay *dpy,
96                                 _EGLSurface *surface);
97    EGLBoolean (*QuerySurface)(_EGLDriver *drv, _EGLDisplay *dpy,
98                               _EGLSurface *surface, EGLint attribute,
99                               EGLint *value);
100    EGLBoolean (*SurfaceAttrib)(_EGLDriver *drv, _EGLDisplay *dpy,
101                                _EGLSurface *surface, EGLint attribute,
102                                EGLint value);
103    EGLBoolean (*BindTexImage)(_EGLDriver *drv, _EGLDisplay *dpy,
104                               _EGLSurface *surface, EGLint buffer);
105    EGLBoolean (*ReleaseTexImage)(_EGLDriver *drv, _EGLDisplay *dpy,
106                                  _EGLSurface *surface, EGLint buffer);
107    EGLBoolean (*SwapInterval)(_EGLDriver *drv, _EGLDisplay *dpy,
108                               _EGLSurface *surf, EGLint interval);
109    EGLBoolean (*SwapBuffers)(_EGLDriver *drv, _EGLDisplay *dpy,
110                              _EGLSurface *draw);
111    EGLBoolean (*CopyBuffers)(_EGLDriver *drv, _EGLDisplay *dpy,
112                              _EGLSurface *surface, void *native_pixmap_target);
113    EGLBoolean (*SetDamageRegion)(_EGLDriver *drv, _EGLDisplay *dpy,
114                                  _EGLSurface *surface, EGLint *rects, EGLint n_rects);
115 
116    /* misc functions */
117    EGLBoolean (*WaitClient)(_EGLDriver *drv, _EGLDisplay *dpy,
118                             _EGLContext *ctx);
119    EGLBoolean (*WaitNative)(_EGLDriver *drv, _EGLDisplay *dpy,
120                             EGLint engine);
121 
122    /* this function may be called from multiple threads at the same time */
123    _EGLProc (*GetProcAddress)(_EGLDriver *drv, const char *procname);
124 
125    _EGLSurface *(*CreatePbufferFromClientBuffer)(_EGLDriver *drv,
126                                                  _EGLDisplay *dpy,
127                                                  EGLenum buftype,
128                                                  EGLClientBuffer buffer,
129                                                  _EGLConfig *config,
130                                                  const EGLint *attrib_list);
131 
132    _EGLImage *(*CreateImageKHR)(_EGLDriver *drv, _EGLDisplay *dpy,
133                                 _EGLContext *ctx, EGLenum target,
134                                 EGLClientBuffer buffer,
135                                 const EGLint *attr_list);
136    EGLBoolean (*DestroyImageKHR)(_EGLDriver *drv, _EGLDisplay *dpy,
137                                  _EGLImage *image);
138 
139    _EGLSync *(*CreateSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, EGLenum type,
140                               const EGLAttrib *attrib_list);
141    EGLBoolean (*DestroySyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy,
142                                 _EGLSync *sync);
143    EGLint (*ClientWaitSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy,
144                                _EGLSync *sync, EGLint flags, EGLTime timeout);
145    EGLint (*WaitSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync);
146    EGLBoolean (*SignalSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy,
147                                _EGLSync *sync, EGLenum mode);
148    EGLBoolean (*GetSyncAttrib)(_EGLDriver *drv, _EGLDisplay *dpy,
149                                _EGLSync *sync, EGLint attribute,
150                                EGLAttrib *value);
151    EGLint (*DupNativeFenceFDANDROID)(_EGLDriver *drv, _EGLDisplay *dpy,
152                                      _EGLSync *sync);
153 
154    EGLBoolean (*SwapBuffersRegionNOK)(_EGLDriver *drv, _EGLDisplay *disp,
155                                       _EGLSurface *surf, EGLint numRects,
156                                       const EGLint *rects);
157 
158    _EGLImage *(*CreateDRMImageMESA)(_EGLDriver *drv, _EGLDisplay *disp,
159                                     const EGLint *attr_list);
160    EGLBoolean (*ExportDRMImageMESA)(_EGLDriver *drv, _EGLDisplay *disp,
161                                     _EGLImage *img, EGLint *name,
162                                     EGLint *handle, EGLint *stride);
163 
164    EGLBoolean (*BindWaylandDisplayWL)(_EGLDriver *drv, _EGLDisplay *disp,
165                                       struct wl_display *display);
166    EGLBoolean (*UnbindWaylandDisplayWL)(_EGLDriver *drv, _EGLDisplay *disp,
167                                         struct wl_display *display);
168    EGLBoolean (*QueryWaylandBufferWL)(_EGLDriver *drv, _EGLDisplay *displ,
169                                       struct wl_resource *buffer,
170                                       EGLint attribute, EGLint *value);
171 
172    struct wl_buffer *(*CreateWaylandBufferFromImageWL)(_EGLDriver *drv,
173                                                        _EGLDisplay *disp,
174                                                        _EGLImage *img);
175 
176    EGLBoolean (*SwapBuffersWithDamageEXT)(_EGLDriver *drv, _EGLDisplay *dpy,
177                                           _EGLSurface *surface,
178                                           const EGLint *rects, EGLint n_rects);
179 
180    EGLBoolean (*PostSubBufferNV)(_EGLDriver *drv, _EGLDisplay *disp,
181                                  _EGLSurface *surface, EGLint x, EGLint y,
182                                  EGLint width, EGLint height);
183 
184    EGLint (*QueryBufferAge)(_EGLDriver *drv,
185                             _EGLDisplay *dpy, _EGLSurface *surface);
186    EGLBoolean (*GetSyncValuesCHROMIUM)(_EGLDisplay *dpy, _EGLSurface *surface,
187                                        EGLuint64KHR *ust, EGLuint64KHR *msc,
188                                        EGLuint64KHR *sbc);
189 
190    EGLBoolean (*ExportDMABUFImageQueryMESA)(_EGLDriver *drv, _EGLDisplay *disp,
191                                             _EGLImage *img, EGLint *fourcc,
192                                             EGLint *nplanes,
193                                             EGLuint64KHR *modifiers);
194    EGLBoolean (*ExportDMABUFImageMESA)(_EGLDriver *drv, _EGLDisplay *disp,
195                                        _EGLImage *img, EGLint *fds,
196                                        EGLint *strides, EGLint *offsets);
197 
198    int (*GLInteropQueryDeviceInfo)(_EGLDisplay *dpy, _EGLContext *ctx,
199                                    struct mesa_glinterop_device_info *out);
200    int (*GLInteropExportObject)(_EGLDisplay *dpy, _EGLContext *ctx,
201                                 struct mesa_glinterop_export_in *in,
202                                 struct mesa_glinterop_export_out *out);
203 
204    EGLBoolean (*QueryDmaBufFormatsEXT)(_EGLDriver *drv, _EGLDisplay *dpy,
205                                        EGLint max_formats, EGLint *formats,
206                                        EGLint *num_formats);
207    EGLBoolean (*QueryDmaBufModifiersEXT) (_EGLDriver *drv, _EGLDisplay *dpy,
208                                           EGLint format, EGLint max_modifiers,
209                                           EGLuint64KHR *modifiers,
210                                           EGLBoolean *external_only,
211                                           EGLint *num_modifiers);
212 };
213 
214 #ifdef __cplusplus
215 }
216 #endif
217 
218 #endif /* EGLAPI_INCLUDED */
219