eglapi.c revision 1ed1027e886980b9b0f48fa6bfcf3d6e209c7787
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);
56adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy)
57adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return dpy->Handle;
58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
59adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_NO_DISPLAY;
60adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
631ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
66adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy) {
67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglChooseDriver(dpy);
68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (drv)
69daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul         return drv->API.Initialize(drv, dpy, major, minor);
70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return EGL_FALSE;
72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
751ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy)
77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return _eglCloseDriver(drv, dpy);
81adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
83adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
861ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY
87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name)
88adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
91daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.QueryString(drv, dpy, name);
92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return NULL;
94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
971ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
99adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   /* XXX check drv for null in remaining functions */
102daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.GetConfigs(drv, dpy, configs, config_size, num_config);
103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1061ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
107adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
110daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ChooseConfig(drv, dpy, attrib_list, configs, config_size, num_config);
111adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1141ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
115adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
116adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
117adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
118daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.GetConfigAttrib(drv, dpy, config, attribute, value);
119adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
120adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
121adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1221ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY
123adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list)
124adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
125adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
126daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateContext(drv, dpy, config, share_list, attrib_list);
127adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
128adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1301ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
131adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx)
132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
134daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.DestroyContext(drv, dpy, ctx);
135adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1381ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
139adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
142daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.MakeCurrent(drv, dpy, draw, read, ctx);
143adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1461ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
147adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
150daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryContext(drv, dpy, ctx, attribute, value);
151adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
152adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1541ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
155adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list)
156adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
158daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateWindowSurface(drv, dpy, config, window, attrib_list);
159adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1621ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
163adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list)
164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
165adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
166daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreatePixmapSurface(drv, dpy, config, pixmap, attrib_list);
167adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
168adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
169adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1701ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
171adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
172adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
174daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreatePbufferSurface(drv, dpy, config, attrib_list);
175adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
176adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1781ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
179adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface)
180adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
182daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.DestroySurface(drv, dpy, surface);
183adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
184adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
185adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1861ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
187adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
190daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QuerySurface(drv, dpy, surface, attribute, value);
191adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
192adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
193adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
1941ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
195adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
196adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
197adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
198daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.SurfaceAttrib(drv, dpy, surface, attribute, value);
199adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
200adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
201adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2021ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
203adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
204adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
205adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
206daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.BindTexImage(drv, dpy, surface, buffer);
207adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
208adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
209adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2101ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
211adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
212adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
213adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
214daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ReleaseTexImage(drv, dpy, surface, buffer);
215adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
216adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
217adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2181ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
219adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval)
220adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
221adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
222daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.SwapInterval(drv, dpy, interval);
223adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
224adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
225adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2261ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
227adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
228adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
229adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
230daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.SwapBuffers(drv, dpy, draw);
231adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
232adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
233adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2341ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
235adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target)
236adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
237adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
238daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CopyBuffers(drv, dpy, surface, target);
239adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
240adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
241adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2421ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
243adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void)
244adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
245adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
246adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy != EGL_NO_DISPLAY) {
247adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
248daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.WaitGL(drv, dpy);
249adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
250adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
251adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
252adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
253adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
254adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2551ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
256adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine)
257adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
258adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
259adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy != EGL_NO_DISPLAY) {
260adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
261daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.WaitNative(drv, dpy, engine);
262adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
263adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
264adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
265adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
266adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
267adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY
269adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void)
270adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
271adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDisplay *dpy = _eglGetCurrentDisplay();
272adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy)
273adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return dpy->Handle;
274adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
275adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_NO_DISPLAY;
276adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
277adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2791ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY
280adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void)
281adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
282adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLContext *ctx = _eglGetCurrentContext();
283adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (ctx)
284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return ctx->Handle;
285adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_NO_CONTEXT;
287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
289adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2901ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
291adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw)
292adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
293adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLSurface *s = _eglGetCurrentSurface(readdraw);
294adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (s)
295adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return s->Handle;
296adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_NO_SURFACE;
298adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
299adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
300adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3011ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY
302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void)
303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
30448822796339cb4a55714dc3f1abbe379562ec538Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
30548822796339cb4a55714dc3f1abbe379562ec538Brian Paul   EGLint e = t->LastError;
30648822796339cb4a55714dc3f1abbe379562ec538Brian Paul   t->LastError = EGL_SUCCESS;
307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return e;
308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3111ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))()
312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   typedef void (*genericFunc)();
314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   struct name_function {
315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      const char *name;
316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLProc function;
317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
318adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   static struct name_function egl_functions[] = {
319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* alphabetical order */
320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglBindTexImage", (_EGLProc) eglBindTexImage },
321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglChooseConfig", (_EGLProc) eglChooseConfig },
322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCopyBuffers", (_EGLProc) eglCopyBuffers },
323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateContext", (_EGLProc) eglCreateContext },
324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface },
325adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface },
326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface },
327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroyContext", (_EGLProc) eglDestroyContext },
328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroySurface", (_EGLProc) eglDestroySurface },
329adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib },
330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigs", (_EGLProc) eglGetConfigs },
331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext },
332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay },
333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface },
334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetDisplay", (_EGLProc) eglGetDisplay },
335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetError", (_EGLProc) eglGetError },
336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetProcAddress", (_EGLProc) eglGetProcAddress },
337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglInitialize", (_EGLProc) eglInitialize },
338adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglMakeCurrent", (_EGLProc) eglMakeCurrent },
339adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryContext", (_EGLProc) eglQueryContext },
340adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryString", (_EGLProc) eglQueryString },
341adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQuerySurface", (_EGLProc) eglQuerySurface },
342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage },
343adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib },
344adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapBuffers", (_EGLProc) eglSwapBuffers },
345adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapInterval", (_EGLProc) eglSwapInterval },
346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglTerminate", (_EGLProc) eglTerminate },
347adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitGL", (_EGLProc) eglWaitGL },
348adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitNative", (_EGLProc) eglWaitNative },
349adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* Extensions */
350b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface
3517012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA },
3527012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModesMESA", (_EGLProc) eglGetModesMESA },
3537012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA },
3541c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA },
3557012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA },
3567012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA },
35748822796339cb4a55714dc3f1abbe379562ec538Brian Paul      { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA },
3587012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA },
3597012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA },
3607012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA },
3617012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA },
3627012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA },
363b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */
364b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2
365b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglBindAPI", (_EGLProc) eglBindAPI },
366b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer },
367b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglQueryAPI", (_EGLProc) eglQueryAPI },
368b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglReleaseThread", (_EGLProc) eglReleaseThread },
369b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglWaitClient", (_EGLProc) eglWaitClient },
370b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */
371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { NULL, NULL }
372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLint i;
374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   for (i = 0; egl_functions[i].name; i++) {
375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (strcmp(egl_functions[i].name, procname) == 0) {
376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul         return (genericFunc) egl_functions[i].function;
377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      }
378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#if 0
380adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   /* XXX enable this code someday */
381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return (genericFunc) _glapi_get_proc_address(procname);
382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#else
383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return NULL;
384adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif
385adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/*
389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension
390adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */
391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3921ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
393c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
394adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  const EGLint *attrib_list, EGLModeMESA *modes,
395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  EGLint modes_size, EGLint *num_modes)
396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
397adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
398adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
399daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.ChooseModeMESA(drv, dpy, screen, attrib_list, modes, modes_size, num_modes);
400adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
401adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
403adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
404adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4051ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
406c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode)
407adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
409adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
410daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetModesMESA(drv, dpy, screen, modes, mode_size, num_mode);
411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
415adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4161ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
417adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value)
418adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
419adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
420adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
421daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetModeAttribMESA(drv, dpy, mode, attribute, value);
422adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
423adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
424adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
425adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
426adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4271ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
428f9bad3dfea43d792876c3a7221b9cfcd107085ebBrian PauleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, EGLint mask)
4291c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl{
4301c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4311c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   if (drv)
432daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.CopyContextMESA(drv, dpy, source, dest, mask);
4331c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   else
4341c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      return EGL_FALSE;
4351c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl}
4361c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
4371c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
438adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
439c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens)
440adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
441c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
442c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   if (drv)
443daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetScreensMESA(drv, dpy, screens, max_screens, num_screens);
444c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   else
445c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return EGL_FALSE;
446adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
447adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
448adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
449c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface
450c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
451adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4527012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
453daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateScreenSurfaceMESA(drv, dpy, config, attrib_list);
454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
455adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
456adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
457adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
45848822796339cb4a55714dc3f1abbe379562ec538Brian PauleglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode)
459adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4607012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
46148822796339cb4a55714dc3f1abbe379562ec538Brian Paul   return drv->API.ShowScreenSurfaceMESA(drv, dpy, screen, surface, mode);
462adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
463adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
464adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
465adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4667012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y)
467adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4687012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
469daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ScreenPositionMESA(drv, dpy, screen, x, y);
4707012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
4717012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4727012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4737012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean
4747012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenMESA( EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value)
4757012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4767012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
477daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenMESA(drv, dpy, screen, attribute, value);
478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
480adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
481adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
482c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface)
483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4847012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
485daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenSurfaceMESA(drv, dpy, screen, surface);
486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
488adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
489adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4907012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode)
491adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4927012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
493daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenModeMESA(drv, dpy, screen, mode);
494adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
495adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
496adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4977012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char *
4987012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode)
4997012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
5007012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
501daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryModeStringMESA(drv, dpy, mode);
5027012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
5037012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5047012d01d888d482f2c6ad1180231a482026d213aJon Smirl
505b2006a40eb22899d38cd31691640555228e36975Brian Paul/**
506b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2
507b2006a40eb22899d38cd31691640555228e36975Brian Paul **/
508b2006a40eb22899d38cd31691640555228e36975Brian Paul
509b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2
510b2006a40eb22899d38cd31691640555228e36975Brian Paul
511b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
512b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api)
513b2006a40eb22899d38cd31691640555228e36975Brian Paul{
514b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
515b2006a40eb22899d38cd31691640555228e36975Brian Paul
516b2006a40eb22899d38cd31691640555228e36975Brian Paul   switch (api) {
517b2006a40eb22899d38cd31691640555228e36975Brian Paul   case EGL_OPENGL_ES_API:
518b2006a40eb22899d38cd31691640555228e36975Brian Paul      if (_eglGlobal.OpenGLESAPISupported) {
519b2006a40eb22899d38cd31691640555228e36975Brian Paul         t->CurrentAPI = api;
520b2006a40eb22899d38cd31691640555228e36975Brian Paul         return EGL_TRUE;
521b2006a40eb22899d38cd31691640555228e36975Brian Paul      }
522b2006a40eb22899d38cd31691640555228e36975Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
523b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
524b2006a40eb22899d38cd31691640555228e36975Brian Paul   case EGL_OPENVG_API:
525b2006a40eb22899d38cd31691640555228e36975Brian Paul      if (_eglGlobal.OpenVGAPISupported) {
526b2006a40eb22899d38cd31691640555228e36975Brian Paul         t->CurrentAPI = api;
527b2006a40eb22899d38cd31691640555228e36975Brian Paul         return EGL_TRUE;
528b2006a40eb22899d38cd31691640555228e36975Brian Paul      }
529b2006a40eb22899d38cd31691640555228e36975Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
530b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
531b2006a40eb22899d38cd31691640555228e36975Brian Paul   default:
532b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
533b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
534b2006a40eb22899d38cd31691640555228e36975Brian Paul   return EGL_TRUE;
535b2006a40eb22899d38cd31691640555228e36975Brian Paul}
536b2006a40eb22899d38cd31691640555228e36975Brian Paul
537b2006a40eb22899d38cd31691640555228e36975Brian Paul
538b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface
539b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype,
540b2006a40eb22899d38cd31691640555228e36975Brian Paul                                 EGLClientBuffer buffer, EGLConfig config,
541b2006a40eb22899d38cd31691640555228e36975Brian Paul                                 const EGLint *attrib_list)
542b2006a40eb22899d38cd31691640555228e36975Brian Paul{
543b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
544b2006a40eb22899d38cd31691640555228e36975Brian Paul   return drv->API.CreatePbufferFromClientBuffer(drv, dpy, buftype, buffer,
545b2006a40eb22899d38cd31691640555228e36975Brian Paul                                                 config, attrib_list);
546b2006a40eb22899d38cd31691640555228e36975Brian Paul}
547b2006a40eb22899d38cd31691640555228e36975Brian Paul
548b2006a40eb22899d38cd31691640555228e36975Brian Paul
549b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLenum
550b2006a40eb22899d38cd31691640555228e36975Brian PauleglQueryAPI(void)
551b2006a40eb22899d38cd31691640555228e36975Brian Paul{
552b2006a40eb22899d38cd31691640555228e36975Brian Paul   /* returns one of EGL_OPENGL_ES_API or EGL_OPENVG_API */
553b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
554b2006a40eb22899d38cd31691640555228e36975Brian Paul   return t->CurrentAPI;
555b2006a40eb22899d38cd31691640555228e36975Brian Paul}
556b2006a40eb22899d38cd31691640555228e36975Brian Paul
557b2006a40eb22899d38cd31691640555228e36975Brian Paul
558b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
559b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void)
560b2006a40eb22899d38cd31691640555228e36975Brian Paul{
561b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
562b2006a40eb22899d38cd31691640555228e36975Brian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
563b2006a40eb22899d38cd31691640555228e36975Brian Paul   if (dpy) {
564b2006a40eb22899d38cd31691640555228e36975Brian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
565b2006a40eb22899d38cd31691640555228e36975Brian Paul      /* unbind context */
566b2006a40eb22899d38cd31691640555228e36975Brian Paul      (void) drv->API.MakeCurrent(drv, dpy, EGL_NO_SURFACE,
567b2006a40eb22899d38cd31691640555228e36975Brian Paul                                  EGL_NO_SURFACE, EGL_NO_CONTEXT);
568b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
569b2006a40eb22899d38cd31691640555228e36975Brian Paul   _eglDeleteThreadData(t);
570b2006a40eb22899d38cd31691640555228e36975Brian Paul   return EGL_TRUE;
571b2006a40eb22899d38cd31691640555228e36975Brian Paul}
5727012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5737012d01d888d482f2c6ad1180231a482026d213aJon Smirl
574b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
575b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void)
576b2006a40eb22899d38cd31691640555228e36975Brian Paul{
577b2006a40eb22899d38cd31691640555228e36975Brian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
578b2006a40eb22899d38cd31691640555228e36975Brian Paul   if (dpy != EGL_NO_DISPLAY) {
579b2006a40eb22899d38cd31691640555228e36975Brian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
580b2006a40eb22899d38cd31691640555228e36975Brian Paul      return drv->API.WaitClient(drv, dpy);
581b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
582b2006a40eb22899d38cd31691640555228e36975Brian Paul   else
583b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
584b2006a40eb22899d38cd31691640555228e36975Brian Paul}
5857012d01d888d482f2c6ad1180231a482026d213aJon Smirl
586b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */
587