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