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