1 /**************************************************************************
2  *
3  * Copyright 2010 LunarG, Inc.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sub license, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice (including the
15  * next paragraph) shall be included in all copies or substantial portions
16  * of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24  * DEALINGS IN THE SOFTWARE.
25  *
26  **************************************************************************/
27 
28 
29 #include <string.h>
30 #include "egltypedefs.h"
31 #include "egldriver.h"
32 #include "eglconfig.h"
33 #include "eglcontext.h"
34 #include "eglsurface.h"
35 #include "eglmisc.h"
36 #include "eglscreen.h"
37 #include "eglmode.h"
38 #include "eglsync.h"
39 
40 
41 static EGLBoolean
_eglReturnFalse(void)42 _eglReturnFalse(void)
43 {
44    return EGL_FALSE;
45 }
46 
47 
48 /**
49  * Plug all the available fallback routines into the given driver's
50  * dispatch table.
51  */
52 void
_eglInitDriverFallbacks(_EGLDriver * drv)53 _eglInitDriverFallbacks(_EGLDriver *drv)
54 {
55    memset(&drv->API, 0, sizeof(drv->API));
56 
57    /* the driver has to implement these */
58    drv->API.Initialize = NULL;
59    drv->API.Terminate = NULL;
60 
61    drv->API.GetConfigs = _eglGetConfigs;
62    drv->API.ChooseConfig = _eglChooseConfig;
63    drv->API.GetConfigAttrib = _eglGetConfigAttrib;
64 
65    drv->API.CreateContext = (CreateContext_t) _eglReturnFalse;
66    drv->API.DestroyContext = (DestroyContext_t) _eglReturnFalse;
67    drv->API.MakeCurrent = (MakeCurrent_t) _eglReturnFalse;
68    drv->API.QueryContext = _eglQueryContext;
69 
70    drv->API.CreateWindowSurface = (CreateWindowSurface_t) _eglReturnFalse;
71    drv->API.CreatePixmapSurface = (CreatePixmapSurface_t) _eglReturnFalse;
72    drv->API.CreatePbufferSurface = (CreatePbufferSurface_t) _eglReturnFalse;
73    drv->API.CreatePbufferFromClientBuffer =
74       (CreatePbufferFromClientBuffer_t) _eglReturnFalse;
75    drv->API.DestroySurface = (DestroySurface_t) _eglReturnFalse;
76    drv->API.QuerySurface = _eglQuerySurface;
77    drv->API.SurfaceAttrib = _eglSurfaceAttrib;
78 
79    drv->API.BindTexImage = (BindTexImage_t) _eglReturnFalse;
80    drv->API.ReleaseTexImage = (ReleaseTexImage_t) _eglReturnFalse;
81    drv->API.CopyBuffers = (CopyBuffers_t) _eglReturnFalse;
82    drv->API.SwapBuffers = (SwapBuffers_t) _eglReturnFalse;
83    drv->API.SwapInterval = _eglSwapInterval;
84 
85    drv->API.WaitClient = (WaitClient_t) _eglReturnFalse;
86    drv->API.WaitNative = (WaitNative_t) _eglReturnFalse;
87    drv->API.GetProcAddress = (GetProcAddress_t) _eglReturnFalse;
88    drv->API.QueryString = _eglQueryString;
89 
90 #ifdef EGL_MESA_screen_surface
91    drv->API.CopyContextMESA = (CopyContextMESA_t) _eglReturnFalse;
92    drv->API.CreateScreenSurfaceMESA =
93       (CreateScreenSurfaceMESA_t) _eglReturnFalse;
94    drv->API.ShowScreenSurfaceMESA = (ShowScreenSurfaceMESA_t) _eglReturnFalse;
95    drv->API.ChooseModeMESA = _eglChooseModeMESA;
96    drv->API.GetModesMESA = _eglGetModesMESA;
97    drv->API.GetModeAttribMESA = _eglGetModeAttribMESA;
98    drv->API.GetScreensMESA = _eglGetScreensMESA;
99    drv->API.ScreenPositionMESA = _eglScreenPositionMESA;
100    drv->API.QueryScreenMESA = _eglQueryScreenMESA;
101    drv->API.QueryScreenSurfaceMESA = _eglQueryScreenSurfaceMESA;
102    drv->API.QueryScreenModeMESA = _eglQueryScreenModeMESA;
103    drv->API.QueryModeStringMESA = _eglQueryModeStringMESA;
104 #endif /* EGL_MESA_screen_surface */
105 
106    drv->API.CreateImageKHR = NULL;
107    drv->API.DestroyImageKHR = NULL;
108 
109    drv->API.CreateSyncKHR = NULL;
110    drv->API.DestroySyncKHR = NULL;
111    drv->API.ClientWaitSyncKHR = NULL;
112    drv->API.SignalSyncKHR = NULL;
113    drv->API.GetSyncAttribKHR = _eglGetSyncAttribKHR;
114 
115 #ifdef EGL_MESA_drm_image
116    drv->API.CreateDRMImageMESA = NULL;
117    drv->API.ExportDRMImageMESA = NULL;
118 #endif
119 
120 #ifdef EGL_NOK_swap_region
121    drv->API.SwapBuffersRegionNOK = NULL;
122 #endif
123 }
124