eglapi.c revision 721ba15bf4596b2e9589e7656005b387724875c3
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/**
2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Public EGL API entrypoints
3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Generally, we use the EGLDisplay parameter as a key to lookup the
5adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * appropriate device driver handle, then jump though the driver's
6adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * dispatch table to handle the function.
7adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
8adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * That allows us the option of supporting multiple, simultaneous,
9adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * heterogeneous hardware devices in the future.
10adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
11adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * The EGLDisplay, EGLConfig, EGLContext and EGLSurface types are
12adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * opaque handles implemented with 32-bit unsigned integers.
13adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * It's up to the driver function or fallback function to look up the
14adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * handle and get an object.
15adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * By using opaque handles, we leave open the possibility of having
16adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * indirect rendering in the future, like GLX.
17adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
18adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
19adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Notes on naming conventions:
20adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
21adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * eglFooBar    - public EGL function
22adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_FOO_BAR  - public EGL token
23adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGLDatatype  - public EGL datatype
24adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
25adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _eglFooBar   - private EGL function
26adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _EGLDatatype - private EGL datatype, typedef'd struct
27adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _egl_struct  - private EGL struct, non-typedef'd
28adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *
29adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */
30adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
31adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
32adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <stdio.h>
34b2006a40eb22899d38cd31691640555228e36975Brian Paul#include <stdlib.h>
35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <string.h>
36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h"
37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h"
38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h"
39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglglobals.h"
40adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h"
41adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h"
42adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
43adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/**
46adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * NOTE: displayName is treated as a string in _eglChooseDriver()!!!
47adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * This will probably change!
48adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * See _eglChooseDriver() for details!
49adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */
501ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY
51adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetDisplay(NativeDisplayType displayName)
52adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
53adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDisplay *dpy;
54adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _eglInitGlobals();
55adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   dpy = _eglNewDisplay(displayName);
56721ba15bf4596b2e9589e7656005b387724875c3Brian Paul   return _eglGetDisplayHandle(dpy);
57adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
59adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy) {
64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglChooseDriver(dpy);
65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (drv)
66daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul         return drv->API.Initialize(drv, dpy, major, minor);
67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return EGL_FALSE;
69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
721ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy)
74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
75adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return _eglCloseDriver(drv, dpy);
78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
81adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
831ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY
84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name)
85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
88daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.QueryString(drv, dpy, name);
89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return NULL;
91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
941ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   /* XXX check drv for null in remaining functions */
99daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.GetConfigs(drv, dpy, configs, config_size, num_config);
100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1031ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
106adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
107daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ChooseConfig(drv, dpy, attrib_list, configs, config_size, num_config);
108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1111ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
114adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
115daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.GetConfigAttrib(drv, dpy, config, attribute, value);
116adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
117adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
118adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1191ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY
120adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list)
121adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
122adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
123daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateContext(drv, dpy, config, share_list, attrib_list);
124adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
125adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
126adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1271ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
128adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx)
129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
130adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
131daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.DestroyContext(drv, dpy, ctx);
132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
134adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1351ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
139daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.MakeCurrent(drv, dpy, draw, read, ctx);
140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
142adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1431ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
147daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryContext(drv, dpy, ctx, attribute, value);
148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
150adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1511ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
152adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list)
153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
154adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
155daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateWindowSurface(drv, dpy, config, window, attrib_list);
156adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
158adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1591ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list)
161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
163daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreatePixmapSurface(drv, dpy, config, pixmap, attrib_list);
164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
165adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
166adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1671ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
168adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
169adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
170adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
171daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreatePbufferSurface(drv, dpy, config, attrib_list);
172adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
174adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1751ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
176adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface)
177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
178adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
179daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.DestroySurface(drv, dpy, surface);
180adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
182adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1831ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
184adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
185adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
186adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
187daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QuerySurface(drv, dpy, surface, attribute, value);
188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
190adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
192adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
193adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
194adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
195daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.SurfaceAttrib(drv, dpy, surface, attribute, value);
196adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
197adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
198adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1991ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
200adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
201adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
202adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
203daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.BindTexImage(drv, dpy, surface, buffer);
204adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
205adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
206adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
208adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
209adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
210adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
211daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ReleaseTexImage(drv, dpy, surface, buffer);
212adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
213adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
214adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2151ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
216adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval)
217adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
218adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
219daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.SwapInterval(drv, dpy, interval);
220adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
221adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
222adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2231ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
224adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
225adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
226adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
227daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.SwapBuffers(drv, dpy, draw);
228adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
229adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
230adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2311ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
232adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target)
233adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
234adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
235daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CopyBuffers(drv, dpy, surface, target);
236adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
237adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
238adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2391ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
240adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void)
241adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
242adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
243adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy != EGL_NO_DISPLAY) {
244adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
245daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.WaitGL(drv, dpy);
246adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
247adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
248adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
249adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
250adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
251adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
253adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine)
254adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
255adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
256adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy != EGL_NO_DISPLAY) {
257adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
258daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.WaitNative(drv, dpy, engine);
259adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
260adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
261adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
262adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
263adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
264adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2651ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY
266adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void)
267adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
268adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDisplay *dpy = _eglGetCurrentDisplay();
269721ba15bf4596b2e9589e7656005b387724875c3Brian Paul   return _eglGetDisplayHandle(dpy);
270adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
271adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
272adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2731ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY
274adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void)
275adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
276adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLContext *ctx = _eglGetCurrentContext();
2775e7dba541298a29f175f9d077bf6f63030465d94Brian Paul   return _eglGetContextHandle(ctx);
278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
279adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
280adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2811ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
282adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw)
283adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLSurface *s = _eglGetCurrentSurface(readdraw);
285721ba15bf4596b2e9589e7656005b387724875c3Brian Paul   return _eglGetSurfaceHandle(s);
286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2891ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY
290adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void)
291adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
29248822796339cb4a55714dc3f1abbe379562ec538Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
29348822796339cb4a55714dc3f1abbe379562ec538Brian Paul   EGLint e = t->LastError;
29448822796339cb4a55714dc3f1abbe379562ec538Brian Paul   t->LastError = EGL_SUCCESS;
295adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return e;
296adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
298adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2991ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))()
300adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
301adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   typedef void (*genericFunc)();
302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   struct name_function {
303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      const char *name;
304adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLProc function;
305adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
306adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   static struct name_function egl_functions[] = {
307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* alphabetical order */
308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglBindTexImage", (_EGLProc) eglBindTexImage },
309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglChooseConfig", (_EGLProc) eglChooseConfig },
310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCopyBuffers", (_EGLProc) eglCopyBuffers },
311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateContext", (_EGLProc) eglCreateContext },
312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface },
313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface },
314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface },
315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroyContext", (_EGLProc) eglDestroyContext },
316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroySurface", (_EGLProc) eglDestroySurface },
317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib },
318adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigs", (_EGLProc) eglGetConfigs },
319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext },
320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay },
321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface },
322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetDisplay", (_EGLProc) eglGetDisplay },
323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetError", (_EGLProc) eglGetError },
324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetProcAddress", (_EGLProc) eglGetProcAddress },
325adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglInitialize", (_EGLProc) eglInitialize },
326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglMakeCurrent", (_EGLProc) eglMakeCurrent },
327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryContext", (_EGLProc) eglQueryContext },
328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryString", (_EGLProc) eglQueryString },
329adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQuerySurface", (_EGLProc) eglQuerySurface },
330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage },
331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib },
332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapBuffers", (_EGLProc) eglSwapBuffers },
333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapInterval", (_EGLProc) eglSwapInterval },
334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglTerminate", (_EGLProc) eglTerminate },
335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitGL", (_EGLProc) eglWaitGL },
336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitNative", (_EGLProc) eglWaitNative },
337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* Extensions */
338b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface
3397012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA },
3407012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModesMESA", (_EGLProc) eglGetModesMESA },
3417012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA },
3421c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA },
3437012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA },
3447012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA },
34548822796339cb4a55714dc3f1abbe379562ec538Brian Paul      { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA },
3467012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA },
3477012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA },
3487012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA },
3497012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA },
3507012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA },
351b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */
352b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2
353b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglBindAPI", (_EGLProc) eglBindAPI },
354b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer },
355b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglQueryAPI", (_EGLProc) eglQueryAPI },
356b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglReleaseThread", (_EGLProc) eglReleaseThread },
357b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglWaitClient", (_EGLProc) eglWaitClient },
358b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */
359adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { NULL, NULL }
360adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
361adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLint i;
362adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   for (i = 0; egl_functions[i].name; i++) {
363adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (strcmp(egl_functions[i].name, procname) == 0) {
364adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul         return (genericFunc) egl_functions[i].function;
365adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      }
366adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
367adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#if 0
368adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   /* XXX enable this code someday */
369adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return (genericFunc) _glapi_get_proc_address(procname);
370adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#else
371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return NULL;
372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif
373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/*
377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension
378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */
379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3801ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
381c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  const EGLint *attrib_list, EGLModeMESA *modes,
383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  EGLint modes_size, EGLint *num_modes)
384adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
385adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
387daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.ChooseModeMESA(drv, dpy, screen, attrib_list, modes, modes_size, num_modes);
388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
390adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3931ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
394c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode)
395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
397adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
398daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetModesMESA(drv, dpy, screen, modes, mode_size, num_mode);
399adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
400adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
401adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
403adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4041ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
405adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value)
406adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
407adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
409daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetModeAttribMESA(drv, dpy, mode, attribute, value);
410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4151ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
416f9bad3dfea43d792876c3a7221b9cfcd107085ebBrian PauleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, EGLint mask)
4171c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl{
4181c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4191c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   if (drv)
420daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.CopyContextMESA(drv, dpy, source, dest, mask);
4211c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   else
4221c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      return EGL_FALSE;
4231c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl}
4241c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
4251c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
426adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
427c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens)
428adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
429c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
430c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   if (drv)
431daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetScreensMESA(drv, dpy, screens, max_screens, num_screens);
432c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   else
433c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return EGL_FALSE;
434adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
435adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
436adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
437c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface
438c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
439adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4407012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
441daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateScreenSurfaceMESA(drv, dpy, config, attrib_list);
442adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
443adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
444adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
445adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
44648822796339cb4a55714dc3f1abbe379562ec538Brian PauleglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode)
447adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4487012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
44948822796339cb4a55714dc3f1abbe379562ec538Brian Paul   return drv->API.ShowScreenSurfaceMESA(drv, dpy, screen, surface, mode);
450adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
451adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
452adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4547012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y)
455adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4567012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
457daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ScreenPositionMESA(drv, dpy, screen, x, y);
4587012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
4597012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4607012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4617012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean
4627012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenMESA( EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value)
4637012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4647012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
465daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenMESA(drv, dpy, screen, attribute, value);
466adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
467adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
468adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
469adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
470c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface)
471adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4727012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
473daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenSurfaceMESA(drv, dpy, screen, surface);
474adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
475adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
476adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4787012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode)
479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4807012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
481daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenModeMESA(drv, dpy, screen, mode);
482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
484adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4857012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char *
4867012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode)
4877012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4887012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
489daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryModeStringMESA(drv, dpy, mode);
4907012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
4917012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4927012d01d888d482f2c6ad1180231a482026d213aJon Smirl
493b2006a40eb22899d38cd31691640555228e36975Brian Paul/**
494b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2
495b2006a40eb22899d38cd31691640555228e36975Brian Paul **/
496b2006a40eb22899d38cd31691640555228e36975Brian Paul
497b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2
498b2006a40eb22899d38cd31691640555228e36975Brian Paul
499b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
500b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api)
501b2006a40eb22899d38cd31691640555228e36975Brian Paul{
502b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
503b2006a40eb22899d38cd31691640555228e36975Brian Paul
504b2006a40eb22899d38cd31691640555228e36975Brian Paul   switch (api) {
5055f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#ifdef EGL_VERSION_1_4
5065f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul   case EGL_OPENGL_API:
5075f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      if (_eglGlobal.OpenGLAPISupported) {
5085f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul         t->CurrentAPI = api;
5095f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul         return EGL_TRUE;
5105f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      }
5115f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
5125f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      return EGL_FALSE;
5135f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#endif
514b2006a40eb22899d38cd31691640555228e36975Brian Paul   case EGL_OPENGL_ES_API:
515b2006a40eb22899d38cd31691640555228e36975Brian Paul      if (_eglGlobal.OpenGLESAPISupported) {
516b2006a40eb22899d38cd31691640555228e36975Brian Paul         t->CurrentAPI = api;
517b2006a40eb22899d38cd31691640555228e36975Brian Paul         return EGL_TRUE;
518b2006a40eb22899d38cd31691640555228e36975Brian Paul      }
519b2006a40eb22899d38cd31691640555228e36975Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
520b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
521b2006a40eb22899d38cd31691640555228e36975Brian Paul   case EGL_OPENVG_API:
522b2006a40eb22899d38cd31691640555228e36975Brian Paul      if (_eglGlobal.OpenVGAPISupported) {
523b2006a40eb22899d38cd31691640555228e36975Brian Paul         t->CurrentAPI = api;
524b2006a40eb22899d38cd31691640555228e36975Brian Paul         return EGL_TRUE;
525b2006a40eb22899d38cd31691640555228e36975Brian Paul      }
526b2006a40eb22899d38cd31691640555228e36975Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
527b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
528b2006a40eb22899d38cd31691640555228e36975Brian Paul   default:
529b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
530b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
531b2006a40eb22899d38cd31691640555228e36975Brian Paul   return EGL_TRUE;
532b2006a40eb22899d38cd31691640555228e36975Brian Paul}
533b2006a40eb22899d38cd31691640555228e36975Brian Paul
534b2006a40eb22899d38cd31691640555228e36975Brian Paul
535b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface
536b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype,
537b2006a40eb22899d38cd31691640555228e36975Brian Paul                                 EGLClientBuffer buffer, EGLConfig config,
538b2006a40eb22899d38cd31691640555228e36975Brian Paul                                 const EGLint *attrib_list)
539b2006a40eb22899d38cd31691640555228e36975Brian Paul{
540b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
541b2006a40eb22899d38cd31691640555228e36975Brian Paul   return drv->API.CreatePbufferFromClientBuffer(drv, dpy, buftype, buffer,
542b2006a40eb22899d38cd31691640555228e36975Brian Paul                                                 config, attrib_list);
543b2006a40eb22899d38cd31691640555228e36975Brian Paul}
544b2006a40eb22899d38cd31691640555228e36975Brian Paul
545b2006a40eb22899d38cd31691640555228e36975Brian Paul
546b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLenum
547b2006a40eb22899d38cd31691640555228e36975Brian PauleglQueryAPI(void)
548b2006a40eb22899d38cd31691640555228e36975Brian Paul{
5495f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul   /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */
550b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
551b2006a40eb22899d38cd31691640555228e36975Brian Paul   return t->CurrentAPI;
552b2006a40eb22899d38cd31691640555228e36975Brian Paul}
553b2006a40eb22899d38cd31691640555228e36975Brian Paul
554b2006a40eb22899d38cd31691640555228e36975Brian Paul
555b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
556b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void)
557b2006a40eb22899d38cd31691640555228e36975Brian Paul{
558b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
559b2006a40eb22899d38cd31691640555228e36975Brian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
560b2006a40eb22899d38cd31691640555228e36975Brian Paul   if (dpy) {
561b2006a40eb22899d38cd31691640555228e36975Brian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
562b2006a40eb22899d38cd31691640555228e36975Brian Paul      /* unbind context */
563b2006a40eb22899d38cd31691640555228e36975Brian Paul      (void) drv->API.MakeCurrent(drv, dpy, EGL_NO_SURFACE,
564b2006a40eb22899d38cd31691640555228e36975Brian Paul                                  EGL_NO_SURFACE, EGL_NO_CONTEXT);
565b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
566b2006a40eb22899d38cd31691640555228e36975Brian Paul   _eglDeleteThreadData(t);
567b2006a40eb22899d38cd31691640555228e36975Brian Paul   return EGL_TRUE;
568b2006a40eb22899d38cd31691640555228e36975Brian Paul}
5697012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5707012d01d888d482f2c6ad1180231a482026d213aJon Smirl
571b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
572b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void)
573b2006a40eb22899d38cd31691640555228e36975Brian Paul{
574b2006a40eb22899d38cd31691640555228e36975Brian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
575b2006a40eb22899d38cd31691640555228e36975Brian Paul   if (dpy != EGL_NO_DISPLAY) {
576b2006a40eb22899d38cd31691640555228e36975Brian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
577b2006a40eb22899d38cd31691640555228e36975Brian Paul      return drv->API.WaitClient(drv, dpy);
578b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
579b2006a40eb22899d38cd31691640555228e36975Brian Paul   else
580b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
581b2006a40eb22899d38cd31691640555228e36975Brian Paul}
5827012d01d888d482f2c6ad1180231a482026d213aJon Smirl
583b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */
584