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