eglapi.c revision 1c606a9aa1d1fa79fe5c92f42651385917322d5f
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>
34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <string.h>
35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/**#include "glapi.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 */
50adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLDisplay APIENTRY
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
63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
66adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy) {
67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglChooseDriver(dpy);
68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (drv)
69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul         return drv->Initialize(drv, dpy, major, minor);
70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return EGL_FALSE;
72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
75adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
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
86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulconst char * APIENTRY
87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name)
88adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return drv->QueryString(drv, dpy, name);
92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return NULL;
94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
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 */
102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->GetConfigs(drv, dpy, configs, config_size, num_config);
103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
106adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
107adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->ChooseConfig(drv, dpy, attrib_list, configs, config_size, num_config);
111adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
114adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
115adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
116adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
117adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
118adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->GetConfigAttrib(drv, dpy, config, attribute, value);
119adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
120adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
121adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
122adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLContext APIENTRY
123adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list)
124adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
125adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
126adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->CreateContext(drv, dpy, config, share_list, attrib_list);
127adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
128adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
130adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
131adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx)
132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
134adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->DestroyContext(drv, dpy, ctx);
135adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
139adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
142adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->MakeCurrent(drv, dpy, draw, read, ctx);
143adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
147adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
150adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->QueryContext(drv, dpy, ctx, attribute, value);
151adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
152adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
154adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY
155adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list)
156adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
158adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->CreateWindowSurface(drv, dpy, config, window, attrib_list);
159adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY
163adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list)
164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
165adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
166adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->CreatePixmapSurface(drv, dpy, config, pixmap, attrib_list);
167adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
168adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
169adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
170adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY
171adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
172adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
174adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->CreatePbufferSurface(drv, dpy, config, attrib_list);
175adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
176adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
178adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
179adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface)
180adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
182adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->DestroySurface(drv, dpy, surface);
183adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
184adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
185adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
186adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
187adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
190adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->QuerySurface(drv, dpy, surface, attribute, value);
191adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
192adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
193adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
194adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
195adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
196adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
197adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
198adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->SurfaceAttrib(drv, dpy, surface, attribute, value);
199adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
200adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
201adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
202adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
203adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
204adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
205adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
206adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->BindTexImage(drv, dpy, surface, buffer);
207adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
208adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
209adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
210adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
211adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
212adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
213adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
214adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->ReleaseTexImage(drv, dpy, surface, buffer);
215adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
216adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
217adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
218adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
219adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval)
220adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
221adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
222adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->SwapInterval(drv, dpy, interval);
223adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
224adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
225adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
226adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
227adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
228adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
229adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
230adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->SwapBuffers(drv, dpy, draw);
231adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
232adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
233adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
234adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
235adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target)
236adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
237adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
238adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return drv->CopyBuffers(drv, dpy, surface, target);
239adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
240adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
241adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
242adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
243adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void)
244adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
245adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
246adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy != EGL_NO_DISPLAY) {
247adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
248adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return drv->WaitGL(drv, dpy);
249adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
250adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
251adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
252adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
253adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
254adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
255adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
256adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine)
257adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
258adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLDisplay dpy = eglGetCurrentDisplay();
259adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (dpy != EGL_NO_DISPLAY) {
260adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLDriver *drv = _eglLookupDriver(dpy);
261adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return drv->WaitNative(drv, dpy, engine);
262adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
263adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
264adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
265adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
266adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
267adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
268adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLDisplay APIENTRY
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
279adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLContext APIENTRY
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
290adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLSurface APIENTRY
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
301adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLint APIENTRY
302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void)
303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
304adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLint e = _eglGlobal.LastError;
305adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _eglGlobal.LastError = EGL_SUCCESS;
306adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return e;
307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulvoid (* APIENTRY eglGetProcAddress(const char *procname))()
311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   typedef void (*genericFunc)();
313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   struct name_function {
314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      const char *name;
315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      _EGLProc function;
316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   static struct name_function egl_functions[] = {
318adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* alphabetical order */
319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglBindTexImage", (_EGLProc) eglBindTexImage },
320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglChooseConfig", (_EGLProc) eglChooseConfig },
321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCopyBuffers", (_EGLProc) eglCopyBuffers },
322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateContext", (_EGLProc) eglCreateContext },
323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface },
324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface },
325adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface },
326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroyContext", (_EGLProc) eglDestroyContext },
327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglDestroySurface", (_EGLProc) eglDestroySurface },
328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib },
329adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetConfigs", (_EGLProc) eglGetConfigs },
330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext },
331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay },
332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface },
333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetDisplay", (_EGLProc) eglGetDisplay },
334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetError", (_EGLProc) eglGetError },
335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglGetProcAddress", (_EGLProc) eglGetProcAddress },
336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglInitialize", (_EGLProc) eglInitialize },
337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglMakeCurrent", (_EGLProc) eglMakeCurrent },
338adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryContext", (_EGLProc) eglQueryContext },
339adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQueryString", (_EGLProc) eglQueryString },
340adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglQuerySurface", (_EGLProc) eglQuerySurface },
341adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage },
342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib },
343adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapBuffers", (_EGLProc) eglSwapBuffers },
344adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglSwapInterval", (_EGLProc) eglSwapInterval },
345adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglTerminate", (_EGLProc) eglTerminate },
346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitGL", (_EGLProc) eglWaitGL },
347adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { "eglWaitNative", (_EGLProc) eglWaitNative },
348adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      /* Extensions */
3497012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA },
3507012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModesMESA", (_EGLProc) eglGetModesMESA },
3517012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA },
3521c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA },
3537012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA },
3547012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA },
3557012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglShowSurfaceMESA", (_EGLProc) eglShowSurfaceMESA },
3567012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA },
3577012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryDisplayMESA", (_EGLProc) eglQueryDisplayMESA },
3587012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA },
3597012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA },
3607012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA },
3617012d01d888d482f2c6ad1180231a482026d213aJon Smirl      { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA },
362adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      { NULL, NULL }
363adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   };
364adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   EGLint i;
365adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   for (i = 0; egl_functions[i].name; i++) {
366adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      if (strcmp(egl_functions[i].name, procname) == 0) {
367adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul         return (genericFunc) egl_functions[i].function;
368adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      }
369adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   }
370adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#if 0
371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   /* XXX enable this code someday */
372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return (genericFunc) _glapi_get_proc_address(procname);
373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#else
374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   return NULL;
375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif
376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/*
380adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension
381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */
382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
384c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
385adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  const EGLint *attrib_list, EGLModeMESA *modes,
386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul                  EGLint modes_size, EGLint *num_modes)
387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
390c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return drv->ChooseModeMESA(drv, dpy, screen, attrib_list, modes, modes_size, num_modes);
391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
393adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
394adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
397c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode)
398adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
399adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
400adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
401c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return drv->GetModesMESA(drv, dpy, screen, modes, mode_size, num_mode);
402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
403adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
404adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
405adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
406adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
407adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean APIENTRY
408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value)
409adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   if (drv)
412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return drv->GetModeAttribMESA(drv, dpy, mode, attribute, value);
413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul   else
414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul      return EGL_FALSE;
415adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
416adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
417adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4181c606a9aa1d1fa79fe5c92f42651385917322d5fJon SmirlEGLBoolean APIENTRY
4191c606a9aa1d1fa79fe5c92f42651385917322d5fJon SmirleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, unsigned long mask)
4201c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl{
4211c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4221c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   if (drv)
4231c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      return drv->CopyContextMESA(drv, dpy, source, dest, mask);
4241c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl   else
4251c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl      return EGL_FALSE;
4261c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl}
4271c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
4281c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl
429adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
430c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens)
431adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
432c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   _EGLDriver *drv = _eglLookupDriver(dpy);
433c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   if (drv)
434c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return drv->GetScreensMESA(drv, dpy, screens, max_screens, num_screens);
435c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul   else
436c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul      return EGL_FALSE;
437adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
438adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
439adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
440c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface
441c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
442adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4437012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4447012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->CreateScreenSurfaceMESA(drv, dpy, config, attrib_list);
445adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
446adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
447adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
448adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4497012d01d888d482f2c6ad1180231a482026d213aJon SmirleglShowSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode)
450adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4517012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4527012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->ShowSurfaceMESA(drv, dpy, screen, surface, mode);
453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
455adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
456adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4577012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y)
458adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4597012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4607012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->ScreenPositionMESA(drv, dpy, screen, x, y);
4617012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
4627012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4637012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4647012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean
4657012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryDisplayMESA(EGLDisplay dpy, EGLint attrib, EGLint *value)
4667012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4677012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4687012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->QueryDisplayMESA(drv, dpy, attrib, value);
4697012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
4707012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4717012d01d888d482f2c6ad1180231a482026d213aJon Smirl
4727012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean
4737012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenMESA( EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value)
4747012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4757012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4767012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->QueryScreenMESA(drv, dpy, screen, attribute, value);
477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
480adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
481c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface)
482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4837012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4847012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->QueryScreenSurfaceMESA(drv, dpy, screen, surface);
485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
488adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean
4897012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode)
490adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{
4917012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
4927012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->QueryScreenModeMESA(drv, dpy, screen, mode);
493adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}
494adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
495adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul
4967012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char *
4977012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode)
4987012d01d888d482f2c6ad1180231a482026d213aJon Smirl{
4997012d01d888d482f2c6ad1180231a482026d213aJon Smirl   _EGLDriver *drv = _eglLookupDriver(dpy);
5007012d01d888d482f2c6ad1180231a482026d213aJon Smirl   return drv->QueryModeStringMESA(drv, dpy, mode);
5017012d01d888d482f2c6ad1180231a482026d213aJon Smirl}
5027012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5037012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5047012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5057012d01d888d482f2c6ad1180231a482026d213aJon Smirl
5067012d01d888d482f2c6ad1180231a482026d213aJon Smirl
507