eglapi.c revision 5f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943
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();
2835e7dba541298a29f175f9d077bf6f63030465d94Brian Paul   return _eglGetContextHandle(ctx);
284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
285adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY
288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw)
289adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
290adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLSurface *s = _eglGetCurrentSurface(readdraw);
291adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (s)
292adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return s->Handle;
293adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
294adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_NO_SURFACE;
295adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
296adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
2981ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY
299adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void)
300adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
30148822796339cb4a55714dc3f1abbe379562ec538Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
30248822796339cb4a55714dc3f1abbe379562ec538Brian Paul   EGLint e = t->LastError;
30348822796339cb4a55714dc3f1abbe379562ec538Brian Paul   t->LastError = EGL_SUCCESS;
304adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return e;
305adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
306adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3081ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))()
309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   typedef void (*genericFunc)();
311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   struct name_function {
312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      const char *name;
313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLProc function;
314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   static struct name_function egl_functions[] = {
316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* alphabetical order */
317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglBindTexImage", (_EGLProc) eglBindTexImage },
318adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglChooseConfig", (_EGLProc) eglChooseConfig },
319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCopyBuffers", (_EGLProc) eglCopyBuffers },
320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateContext", (_EGLProc) eglCreateContext },
321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface },
322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface },
323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface },
324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroyContext", (_EGLProc) eglDestroyContext },
325adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroySurface", (_EGLProc) eglDestroySurface },
326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib },
327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigs", (_EGLProc) eglGetConfigs },
328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext },
329adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay },
330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface },
331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetDisplay", (_EGLProc) eglGetDisplay },
332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetError", (_EGLProc) eglGetError },
333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetProcAddress", (_EGLProc) eglGetProcAddress },
334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglInitialize", (_EGLProc) eglInitialize },
335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglMakeCurrent", (_EGLProc) eglMakeCurrent },
336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryContext", (_EGLProc) eglQueryContext },
337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryString", (_EGLProc) eglQueryString },
338adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQuerySurface", (_EGLProc) eglQuerySurface },
339adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage },
340adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib },
341adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapBuffers", (_EGLProc) eglSwapBuffers },
342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapInterval", (_EGLProc) eglSwapInterval },
343adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglTerminate", (_EGLProc) eglTerminate },
344adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitGL", (_EGLProc) eglWaitGL },
345adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitNative", (_EGLProc) eglWaitNative },
346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* Extensions */
347b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface
3487012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA },
3497012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModesMESA", (_EGLProc) eglGetModesMESA },
3507012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA },
3511c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA },
3527012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA },
3537012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA },
35448822796339cb4a55714dc3f1abbe379562ec538Brian Paul      { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA },
3557012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA },
3567012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA },
3577012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA },
3587012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA },
3597012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA },
360b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */
361b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2
362b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglBindAPI", (_EGLProc) eglBindAPI },
363b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer },
364b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglQueryAPI", (_EGLProc) eglQueryAPI },
365b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglReleaseThread", (_EGLProc) eglReleaseThread },
366b2006a40eb22899d38cd31691640555228e36975Brian Paul      { "eglWaitClient", (_EGLProc) eglWaitClient },
367b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */
368adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { NULL, NULL }
369adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
370adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLint i;
371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   for (i = 0; egl_functions[i].name; i++) {
372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (strcmp(egl_functions[i].name, procname) == 0) {
373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul         return (genericFunc) egl_functions[i].function;
374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      }
375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#if 0
377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   /* XXX enable this code someday */
378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return (genericFunc) _glapi_get_proc_address(procname);
379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#else
380adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return NULL;
381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif
382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
384adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
385adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/*
386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension
387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */
388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
3891ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
390c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  const EGLint *attrib_list, EGLModeMESA *modes,
392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  EGLint modes_size, EGLint *num_modes)
393adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
394adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
396daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.ChooseModeMESA(drv, dpy, screen, attrib_list, modes, modes_size, num_modes);
397adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
398adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
399adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
400adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
401adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4021ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
403c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode)
404adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
405adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
406adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
407daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetModesMESA(drv, dpy, screen, modes, mode_size, num_mode);
408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
409adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4131ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value)
415adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
416adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
417adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
418daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetModeAttribMESA(drv, dpy, mode, attribute, value);
419adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
420adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
421adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
422adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
423adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4241ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY
425f9bad3dfea43d792876c3a7221b9cfcd107085ebBrian PauleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, EGLint mask)
4261c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl{
4271c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4281c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   if (drv)
429daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.CopyContextMESA(drv, dpy, source, dest, mask);
4301c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   else
4311c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      return EGL_FALSE;
4321c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl}
4331c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
4341c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
435adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
436c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens)
437adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
438c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
439c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   if (drv)
440daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul      return drv->API.GetScreensMESA(drv, dpy, screens, max_screens, num_screens);
441c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   else
442c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return EGL_FALSE;
443adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
444adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
445adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
446c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface
447c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
448adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4497012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
450daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.CreateScreenSurfaceMESA(drv, dpy, config, attrib_list);
451adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
452adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
45548822796339cb4a55714dc3f1abbe379562ec538Brian PauleglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode)
456adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4577012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
45848822796339cb4a55714dc3f1abbe379562ec538Brian Paul   return drv->API.ShowScreenSurfaceMESA(drv, dpy, screen, surface, mode);
459adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
460adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
461adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
462adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4637012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y)
464adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4657012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
466daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.ScreenPositionMESA(drv, dpy, screen, x, y);
4677012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
4687012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4697012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4707012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean
4717012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenMESA( EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value)
4727012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4737012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
474daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenMESA(drv, dpy, screen, attribute, value);
475adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
476adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
479c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface)
480adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4817012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
482daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenSurfaceMESA(drv, dpy, screen, surface);
483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
484adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4877012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode)
488adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4897012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
490daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryScreenModeMESA(drv, dpy, screen, mode);
491adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
492adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
493adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4947012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char *
4957012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode)
4967012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4977012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
498daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul   return drv->API.QueryModeStringMESA(drv, dpy, mode);
4997012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
5007012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5017012d01d888d482f2c6ad1180231a482026d213aJon Smirl
502b2006a40eb22899d38cd31691640555228e36975Brian Paul/**
503b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2
504b2006a40eb22899d38cd31691640555228e36975Brian Paul **/
505b2006a40eb22899d38cd31691640555228e36975Brian Paul
506b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2
507b2006a40eb22899d38cd31691640555228e36975Brian Paul
508b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
509b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api)
510b2006a40eb22899d38cd31691640555228e36975Brian Paul{
511b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
512b2006a40eb22899d38cd31691640555228e36975Brian Paul
513b2006a40eb22899d38cd31691640555228e36975Brian Paul   switch (api) {
5145f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#ifdef EGL_VERSION_1_4
5155f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul   case EGL_OPENGL_API:
5165f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      if (_eglGlobal.OpenGLAPISupported) {
5175f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul         t->CurrentAPI = api;
5185f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul         return EGL_TRUE;
5195f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      }
5205f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
5215f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul      return EGL_FALSE;
5225f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#endif
523b2006a40eb22899d38cd31691640555228e36975Brian Paul   case EGL_OPENGL_ES_API:
524b2006a40eb22899d38cd31691640555228e36975Brian Paul      if (_eglGlobal.OpenGLESAPISupported) {
525b2006a40eb22899d38cd31691640555228e36975Brian Paul         t->CurrentAPI = api;
526b2006a40eb22899d38cd31691640555228e36975Brian Paul         return EGL_TRUE;
527b2006a40eb22899d38cd31691640555228e36975Brian Paul      }
528b2006a40eb22899d38cd31691640555228e36975Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
529b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
530b2006a40eb22899d38cd31691640555228e36975Brian Paul   case EGL_OPENVG_API:
531b2006a40eb22899d38cd31691640555228e36975Brian Paul      if (_eglGlobal.OpenVGAPISupported) {
532b2006a40eb22899d38cd31691640555228e36975Brian Paul         t->CurrentAPI = api;
533b2006a40eb22899d38cd31691640555228e36975Brian Paul         return EGL_TRUE;
534b2006a40eb22899d38cd31691640555228e36975Brian Paul      }
535b2006a40eb22899d38cd31691640555228e36975Brian Paul      _eglError(EGL_BAD_PARAMETER, "eglBindAPI");
536b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
537b2006a40eb22899d38cd31691640555228e36975Brian Paul   default:
538b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
539b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
540b2006a40eb22899d38cd31691640555228e36975Brian Paul   return EGL_TRUE;
541b2006a40eb22899d38cd31691640555228e36975Brian Paul}
542b2006a40eb22899d38cd31691640555228e36975Brian Paul
543b2006a40eb22899d38cd31691640555228e36975Brian Paul
544b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface
545b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype,
546b2006a40eb22899d38cd31691640555228e36975Brian Paul                                 EGLClientBuffer buffer, EGLConfig config,
547b2006a40eb22899d38cd31691640555228e36975Brian Paul                                 const EGLint *attrib_list)
548b2006a40eb22899d38cd31691640555228e36975Brian Paul{
549b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
550b2006a40eb22899d38cd31691640555228e36975Brian Paul   return drv->API.CreatePbufferFromClientBuffer(drv, dpy, buftype, buffer,
551b2006a40eb22899d38cd31691640555228e36975Brian Paul                                                 config, attrib_list);
552b2006a40eb22899d38cd31691640555228e36975Brian Paul}
553b2006a40eb22899d38cd31691640555228e36975Brian Paul
554b2006a40eb22899d38cd31691640555228e36975Brian Paul
555b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLenum
556b2006a40eb22899d38cd31691640555228e36975Brian PauleglQueryAPI(void)
557b2006a40eb22899d38cd31691640555228e36975Brian Paul{
5585f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul   /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */
559b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
560b2006a40eb22899d38cd31691640555228e36975Brian Paul   return t->CurrentAPI;
561b2006a40eb22899d38cd31691640555228e36975Brian Paul}
562b2006a40eb22899d38cd31691640555228e36975Brian Paul
563b2006a40eb22899d38cd31691640555228e36975Brian Paul
564b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
565b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void)
566b2006a40eb22899d38cd31691640555228e36975Brian Paul{
567b2006a40eb22899d38cd31691640555228e36975Brian Paul   _EGLThreadInfo *t = _eglGetCurrentThread();
568b2006a40eb22899d38cd31691640555228e36975Brian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
569b2006a40eb22899d38cd31691640555228e36975Brian Paul   if (dpy) {
570b2006a40eb22899d38cd31691640555228e36975Brian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
571b2006a40eb22899d38cd31691640555228e36975Brian Paul      /* unbind context */
572b2006a40eb22899d38cd31691640555228e36975Brian Paul      (void) drv->API.MakeCurrent(drv, dpy, EGL_NO_SURFACE,
573b2006a40eb22899d38cd31691640555228e36975Brian Paul                                  EGL_NO_SURFACE, EGL_NO_CONTEXT);
574b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
575b2006a40eb22899d38cd31691640555228e36975Brian Paul   _eglDeleteThreadData(t);
576b2006a40eb22899d38cd31691640555228e36975Brian Paul   return EGL_TRUE;
577b2006a40eb22899d38cd31691640555228e36975Brian Paul}
5787012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5797012d01d888d482f2c6ad1180231a482026d213aJon Smirl
580b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean
581b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void)
582b2006a40eb22899d38cd31691640555228e36975Brian Paul{
583b2006a40eb22899d38cd31691640555228e36975Brian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
584b2006a40eb22899d38cd31691640555228e36975Brian Paul   if (dpy != EGL_NO_DISPLAY) {
585b2006a40eb22899d38cd31691640555228e36975Brian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
586b2006a40eb22899d38cd31691640555228e36975Brian Paul      return drv->API.WaitClient(drv, dpy);
587b2006a40eb22899d38cd31691640555228e36975Brian Paul   }
588b2006a40eb22899d38cd31691640555228e36975Brian Paul   else
589b2006a40eb22899d38cd31691640555228e36975Brian Paul      return EGL_FALSE;
590b2006a40eb22899d38cd31691640555228e36975Brian Paul}
5917012d01d888d482f2c6ad1180231a482026d213aJon Smirl
592b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */
593