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 EGLDRIVER_INCLUDED
     32 #define EGLDRIVER_INCLUDED
     33 
     34 
     35 #include "c99_compat.h"
     36 
     37 #include "egltypedefs.h"
     38 #include "eglapi.h"
     39 #include <stddef.h>
     40 
     41 
     42 #ifdef __cplusplus
     43 extern "C" {
     44 #endif
     45 
     46 /**
     47  * Define an inline driver typecast function.
     48  *
     49  * Note that this macro defines a function and should not be ended with a
     50  * semicolon when used.
     51  */
     52 #define _EGL_DRIVER_TYPECAST(drvtype, egltype, code)           \
     53    static inline struct drvtype *drvtype(const egltype *obj)   \
     54    { return (struct drvtype *) code; }
     55 
     56 
     57 /**
     58  * Define the driver typecast functions for _EGLDriver, _EGLDisplay,
     59  * _EGLContext, _EGLSurface, and _EGLConfig.
     60  *
     61  * Note that this macro defines several functions and should not be ended with
     62  * a semicolon when used.
     63  */
     64 #define _EGL_DRIVER_STANDARD_TYPECASTS(drvname)                            \
     65    _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj)               \
     66    /* note that this is not a direct cast */                               \
     67    _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \
     68    _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj)             \
     69    _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj)             \
     70    _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj)
     71 
     72 
     73 /**
     74  * Base class for device drivers.
     75  */
     76 struct _egl_driver
     77 {
     78    const char *Name;  /**< name of this driver */
     79 
     80    _EGLAPI API;  /**< EGL API dispatch table */
     81 };
     82 
     83 
     84 extern _EGLDriver*
     85 _eglBuiltInDriver(void);
     86 
     87 
     88 extern _EGLDriver *
     89 _eglMatchDriver(_EGLDisplay *dpy);
     90 
     91 
     92 extern __eglMustCastToProperFunctionPointerType
     93 _eglGetDriverProc(const char *procname);
     94 
     95 
     96 extern void
     97 _eglUnloadDrivers(void);
     98 
     99 
    100 /* defined in eglfallbacks.c */
    101 extern void
    102 _eglInitDriverFallbacks(_EGLDriver *drv);
    103 
    104 
    105 extern void
    106 _eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *),
    107                       void *callback_data);
    108 
    109 
    110 #ifdef __cplusplus
    111 }
    112 #endif
    113 
    114 
    115 #endif /* EGLDRIVER_INCLUDED */
    116