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 114 /* misc functions */ 115 EGLBoolean (*WaitClient)(_EGLDriver *drv, _EGLDisplay *dpy, 116 _EGLContext *ctx); 117 EGLBoolean (*WaitNative)(_EGLDriver *drv, _EGLDisplay *dpy, 118 EGLint engine); 119 120 /* this function may be called from multiple threads at the same time */ 121 _EGLProc (*GetProcAddress)(_EGLDriver *drv, const char *procname); 122 123 _EGLSurface *(*CreatePbufferFromClientBuffer)(_EGLDriver *drv, 124 _EGLDisplay *dpy, 125 EGLenum buftype, 126 EGLClientBuffer buffer, 127 _EGLConfig *config, 128 const EGLint *attrib_list); 129 130 _EGLImage *(*CreateImageKHR)(_EGLDriver *drv, _EGLDisplay *dpy, 131 _EGLContext *ctx, EGLenum target, 132 EGLClientBuffer buffer, 133 const EGLint *attr_list); 134 EGLBoolean (*DestroyImageKHR)(_EGLDriver *drv, _EGLDisplay *dpy, 135 _EGLImage *image); 136 137 _EGLSync *(*CreateSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, EGLenum type, 138 const EGLAttrib *attrib_list); 139 EGLBoolean (*DestroySyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, 140 _EGLSync *sync); 141 EGLint (*ClientWaitSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, 142 _EGLSync *sync, EGLint flags, EGLTime timeout); 143 EGLint (*WaitSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSync *sync); 144 EGLBoolean (*SignalSyncKHR)(_EGLDriver *drv, _EGLDisplay *dpy, 145 _EGLSync *sync, EGLenum mode); 146 EGLBoolean (*GetSyncAttrib)(_EGLDriver *drv, _EGLDisplay *dpy, 147 _EGLSync *sync, EGLint attribute, 148 EGLAttrib *value); 149 EGLint (*DupNativeFenceFDANDROID)(_EGLDriver *drv, _EGLDisplay *dpy, 150 _EGLSync *sync); 151 152 EGLBoolean (*SwapBuffersRegionNOK)(_EGLDriver *drv, _EGLDisplay *disp, 153 _EGLSurface *surf, EGLint numRects, 154 const EGLint *rects); 155 156 _EGLImage *(*CreateDRMImageMESA)(_EGLDriver *drv, _EGLDisplay *disp, 157 const EGLint *attr_list); 158 EGLBoolean (*ExportDRMImageMESA)(_EGLDriver *drv, _EGLDisplay *disp, 159 _EGLImage *img, EGLint *name, 160 EGLint *handle, EGLint *stride); 161 162 EGLBoolean (*BindWaylandDisplayWL)(_EGLDriver *drv, _EGLDisplay *disp, 163 struct wl_display *display); 164 EGLBoolean (*UnbindWaylandDisplayWL)(_EGLDriver *drv, _EGLDisplay *disp, 165 struct wl_display *display); 166 EGLBoolean (*QueryWaylandBufferWL)(_EGLDriver *drv, _EGLDisplay *displ, 167 struct wl_resource *buffer, 168 EGLint attribute, EGLint *value); 169 170 struct wl_buffer *(*CreateWaylandBufferFromImageWL)(_EGLDriver *drv, 171 _EGLDisplay *disp, 172 _EGLImage *img); 173 174 EGLBoolean (*SwapBuffersWithDamageEXT)(_EGLDriver *drv, _EGLDisplay *dpy, 175 _EGLSurface *surface, 176 const EGLint *rects, EGLint n_rects); 177 178 EGLBoolean (*PostSubBufferNV)(_EGLDriver *drv, _EGLDisplay *disp, 179 _EGLSurface *surface, EGLint x, EGLint y, 180 EGLint width, EGLint height); 181 182 EGLint (*QueryBufferAge)(_EGLDriver *drv, 183 _EGLDisplay *dpy, _EGLSurface *surface); 184 EGLBoolean (*GetSyncValuesCHROMIUM)(_EGLDisplay *dpy, _EGLSurface *surface, 185 EGLuint64KHR *ust, EGLuint64KHR *msc, 186 EGLuint64KHR *sbc); 187 188 EGLBoolean (*ExportDMABUFImageQueryMESA)(_EGLDriver *drv, _EGLDisplay *disp, 189 _EGLImage *img, EGLint *fourcc, 190 EGLint *nplanes, 191 EGLuint64KHR *modifiers); 192 EGLBoolean (*ExportDMABUFImageMESA)(_EGLDriver *drv, _EGLDisplay *disp, 193 _EGLImage *img, EGLint *fds, 194 EGLint *strides, EGLint *offsets); 195 196 int (*GLInteropQueryDeviceInfo)(_EGLDisplay *dpy, _EGLContext *ctx, 197 struct mesa_glinterop_device_info *out); 198 int (*GLInteropExportObject)(_EGLDisplay *dpy, _EGLContext *ctx, 199 struct mesa_glinterop_export_in *in, 200 struct mesa_glinterop_export_out *out); 201 }; 202 203 #ifdef __cplusplus 204 } 205 #endif 206 207 #endif /* EGLAPI_INCLUDED */ 208