Home | History | Annotate | Download | only in main
      1 /**************************************************************************
      2  *
      3  * Copyright 2008 VMware, Inc.
      4  * Copyright 2009-2010 Chia-I Wu <olvaffe (at) 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