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