Home | History | Annotate | Download | only in main
      1 /**************************************************************************
      2  *
      3  * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
      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 "egltypedefs.h"
     36 #include "eglapi.h"
     37 #include <stddef.h>
     38 
     39 /**
     40  * Define an inline driver typecast function.
     41  *
     42  * Note that this macro defines a function and should not be ended with a
     43  * semicolon when used.
     44  */
     45 #define _EGL_DRIVER_TYPECAST(drvtype, egltype, code)           \
     46    static INLINE struct drvtype *drvtype(const egltype *obj)   \
     47    { return (struct drvtype *) code; }
     48 
     49 
     50 /**
     51  * Define the driver typecast functions for _EGLDriver, _EGLDisplay,
     52  * _EGLContext, _EGLSurface, and _EGLConfig.
     53  *
     54  * Note that this macro defines several functions and should not be ended with
     55  * a semicolon when used.
     56  */
     57 #define _EGL_DRIVER_STANDARD_TYPECASTS(drvname)                            \
     58    _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj)               \
     59    /* note that this is not a direct cast */                               \
     60    _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \
     61    _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj)             \
     62    _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj)             \
     63    _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj)
     64 
     65 
     66 typedef _EGLDriver *(*_EGLMain_t)(const char *args);
     67 
     68 
     69 /**
     70  * Base class for device drivers.
     71  */
     72 struct _egl_driver
     73 {
     74    const char *Name;  /**< name of this driver */
     75 
     76    /**
     77     * Release the driver resource.
     78     *
     79     * It is called before dlclose().
     80     */
     81    void (*Unload)(_EGLDriver *drv);
     82 
     83    _EGLAPI API;  /**< EGL API dispatch table */
     84 };
     85 
     86 
     87 extern _EGLDriver *
     88 _eglBuiltInDriverGALLIUM(const char *args);
     89 
     90 
     91 extern _EGLDriver *
     92 _eglBuiltInDriverDRI2(const char *args);
     93 
     94 
     95 extern _EGLDriver *
     96 _eglBuiltInDriverGLX(const char *args);
     97 
     98 
     99 PUBLIC _EGLDriver *
    100 _eglMain(const char *args);
    101 
    102 
    103 extern _EGLDriver *
    104 _eglMatchDriver(_EGLDisplay *dpy, EGLBoolean test_only);
    105 
    106 
    107 extern __eglMustCastToProperFunctionPointerType
    108 _eglGetDriverProc(const char *procname);
    109 
    110 
    111 extern void
    112 _eglUnloadDrivers(void);
    113 
    114 
    115 /* defined in eglfallbacks.c */
    116 PUBLIC void
    117 _eglInitDriverFallbacks(_EGLDriver *drv);
    118 
    119 
    120 PUBLIC void
    121 _eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *),
    122                       void *callback_data);
    123 
    124 
    125 #endif /* EGLDRIVER_INCLUDED */
    126