egldriver.h revision f2001df508fda599a18b3586d2775e970a3db13a
1/**************************************************************************
2 *
3 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
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 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
66typedef _EGLDriver *(*_EGLMain_t)(const char *args);
67
68
69/**
70 * Base class for device drivers.
71 */
72struct _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
87extern _EGLDriver *
88_eglBuiltInDriverGALLIUM(const char *args);
89
90
91extern _EGLDriver *
92_eglBuiltInDriverDRI2(const char *args);
93
94
95extern _EGLDriver *
96_eglBuiltInDriverGLX(const char *args);
97
98
99PUBLIC _EGLDriver *
100_eglMain(const char *args);
101
102
103extern _EGLDriver *
104_eglMatchDriver(_EGLDisplay *dpy, EGLBoolean test_only);
105
106
107extern __eglMustCastToProperFunctionPointerType
108_eglGetDriverProc(const char *procname);
109
110
111extern void
112_eglUnloadDrivers(void);
113
114
115/* defined in eglfallbacks.c */
116PUBLIC void
117_eglInitDriverFallbacks(_EGLDriver *drv);
118
119
120PUBLIC void
121_eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *),
122                      void *callback_data);
123
124
125#endif /* EGLDRIVER_INCLUDED */
126