eglapi.c revision 721ba15bf4596b2e9589e7656005b387724875c3
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); 56721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 57adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 59adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy) { 64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglChooseDriver(dpy); 65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 66daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.Initialize(drv, dpy, major, minor); 67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 721ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 75adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return _eglCloseDriver(drv, dpy); 78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 81adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 831ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 88daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QueryString(drv, dpy, name); 89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 941ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config) 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* XXX check drv for null in remaining functions */ 99daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.GetConfigs(drv, dpy, configs, config_size, num_config); 100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1031ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config) 105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 106adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 107daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.ChooseConfig(drv, dpy, attrib_list, configs, config_size, num_config); 108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1111ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value) 113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 114adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 115daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.GetConfigAttrib(drv, dpy, config, attribute, value); 116adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 117adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 118adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1191ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 120adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list) 121adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 122adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 123daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CreateContext(drv, dpy, config, share_list, attrib_list); 124adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 125adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 126adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1271ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 128adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 130adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 131daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.DestroyContext(drv, dpy, ctx); 132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 134adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1351ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) 137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 139daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.MakeCurrent(drv, dpy, draw, read, ctx); 140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 142adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1431ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value) 145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 147daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QueryContext(drv, dpy, ctx, attribute, value); 148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 150adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1511ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 152adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list) 153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 154adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 155daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CreateWindowSurface(drv, dpy, config, window, attrib_list); 156adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 158adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1591ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list) 161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 163daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CreatePixmapSurface(drv, dpy, config, pixmap, attrib_list); 164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 165adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 166adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1671ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 168adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) 169adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 170adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 171daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CreatePbufferSurface(drv, dpy, config, attrib_list); 172adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 173adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 174adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1751ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 176adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 178adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 179daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.DestroySurface(drv, dpy, surface); 180adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 181adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 182adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1831ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 184adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value) 185adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 186adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 187daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QuerySurface(drv, dpy, surface, attribute, value); 188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 190adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 192adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value) 193adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 194adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 195daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.SurfaceAttrib(drv, dpy, surface, attribute, value); 196adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 197adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 198adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1991ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 200adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 201adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 202adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 203daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.BindTexImage(drv, dpy, surface, buffer); 204adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 205adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 206adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 208adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 209adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 210adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 211daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.ReleaseTexImage(drv, dpy, surface, buffer); 212adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 213adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 214adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2151ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 216adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 217adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 218adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 219daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.SwapInterval(drv, dpy, interval); 220adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 221adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 222adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2231ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 224adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapBuffers(EGLDisplay dpy, EGLSurface draw) 225adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 226adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 227daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.SwapBuffers(drv, dpy, draw); 228adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 229adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 230adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2311ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 232adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target) 233adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 234adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 235daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CopyBuffers(drv, dpy, surface, target); 236adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 237adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 238adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2391ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 240adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void) 241adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 242adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLDisplay dpy = eglGetCurrentDisplay(); 243adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy != EGL_NO_DISPLAY) { 244adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 245daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.WaitGL(drv, dpy); 246adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 247adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 248adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 249adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 250adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 251adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 253adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 254adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 255adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLDisplay dpy = eglGetCurrentDisplay(); 256adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (dpy != EGL_NO_DISPLAY) { 257adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 258daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.WaitNative(drv, dpy, engine); 259adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 260adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 261adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 262adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 263adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 264adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2651ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 266adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 267adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 268adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy = _eglGetCurrentDisplay(); 269721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 270adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 271adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 272adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2731ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 274adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 275adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 276adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 2775e7dba541298a29f175f9d077bf6f63030465d94Brian Paul return _eglGetContextHandle(ctx); 278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 279adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 280adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2811ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 282adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 283adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *s = _eglGetCurrentSurface(readdraw); 285721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetSurfaceHandle(s); 286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2891ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 290adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 291adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 29248822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 29348822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 29448822796339cb4a55714dc3f1abbe379562ec538Brian Paul t->LastError = EGL_SUCCESS; 295adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 296adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 298adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2991ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))() 300adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 301adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul typedef void (*genericFunc)(); 302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul struct name_function { 303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 304adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 305adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 306adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul static struct name_function egl_functions[] = { 307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* alphabetical order */ 308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateContext", (_EGLProc) eglCreateContext }, 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 318adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetError", (_EGLProc) eglGetError }, 324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 325adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglInitialize", (_EGLProc) eglInitialize }, 326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryContext", (_EGLProc) eglQueryContext }, 328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryString", (_EGLProc) eglQueryString }, 329adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglTerminate", (_EGLProc) eglTerminate }, 335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglWaitGL", (_EGLProc) eglWaitGL }, 336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglWaitNative", (_EGLProc) eglWaitNative }, 337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* Extensions */ 338b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 3397012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 3407012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 3417012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 3421c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 3437012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 3447012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 34548822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 3467012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 3477012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 3487012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 3497012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 3507012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 351b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 352b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 353b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglBindAPI", (_EGLProc) eglBindAPI }, 354b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer }, 355b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglQueryAPI", (_EGLProc) eglQueryAPI }, 356b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglReleaseThread", (_EGLProc) eglReleaseThread }, 357b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglWaitClient", (_EGLProc) eglWaitClient }, 358b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 359adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 360adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 361adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 362adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul for (i = 0; egl_functions[i].name; i++) { 363adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (strcmp(egl_functions[i].name, procname) == 0) { 364adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return (genericFunc) egl_functions[i].function; 365adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 366adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 367adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#if 0 368adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* XXX enable this code someday */ 369adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return (genericFunc) _glapi_get_proc_address(procname); 370adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#else 371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif 373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3801ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 381c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 384adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 385adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 387daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.ChooseModeMESA(drv, dpy, screen, attrib_list, modes, modes_size, num_modes); 388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 390adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3931ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 394c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode) 395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 397adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 398daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.GetModesMESA(drv, dpy, screen, modes, mode_size, num_mode); 399adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 400adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 401adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 403adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4041ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 405adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value) 406adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 407adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (drv) 409daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.GetModeAttribMESA(drv, dpy, mode, attribute, value); 410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul else 411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return EGL_FALSE; 412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4151ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 416f9bad3dfea43d792876c3a7221b9cfcd107085ebBrian PauleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, EGLint mask) 4171c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl{ 4181c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 4191c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl if (drv) 420daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CopyContextMESA(drv, dpy, source, dest, mask); 4211c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl else 4221c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl return EGL_FALSE; 4231c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 4241c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 4251c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 426adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 427c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens) 428adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 429c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 430c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul if (drv) 431daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.GetScreensMESA(drv, dpy, screens, max_screens, num_screens); 432c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul else 433c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul return EGL_FALSE; 434adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 435adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 436adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 437c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface 438c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) 439adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4407012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 441daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.CreateScreenSurfaceMESA(drv, dpy, config, attrib_list); 442adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 443adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 444adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 445adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 44648822796339cb4a55714dc3f1abbe379562ec538Brian PauleglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, EGLSurface surface, EGLModeMESA mode) 447adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4487012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 44948822796339cb4a55714dc3f1abbe379562ec538Brian Paul return drv->API.ShowScreenSurfaceMESA(drv, dpy, screen, surface, mode); 450adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 451adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 452adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 4547012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 455adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4567012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 457daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.ScreenPositionMESA(drv, dpy, screen, x, y); 4587012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 4597012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4607012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4617012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean 4627012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenMESA( EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value) 4637012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 4647012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 465daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QueryScreenMESA(drv, dpy, screen, attribute, value); 466adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 467adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 468adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 469adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 470c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface) 471adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4727012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 473daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QueryScreenSurfaceMESA(drv, dpy, screen, surface); 474adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 475adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 476adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 4787012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4807012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 481daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QueryScreenModeMESA(drv, dpy, screen, mode); 482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 484adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4857012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char * 4867012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 4877012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 4887012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLDriver *drv = _eglLookupDriver(dpy); 489daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul return drv->API.QueryModeStringMESA(drv, dpy, mode); 4907012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 4917012d01d888d482f2c6ad1180231a482026d213aJon Smirl 4927012d01d888d482f2c6ad1180231a482026d213aJon Smirl 493b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 494b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 495b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 496b2006a40eb22899d38cd31691640555228e36975Brian Paul 497b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 498b2006a40eb22899d38cd31691640555228e36975Brian Paul 499b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 500b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 501b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 502b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 503b2006a40eb22899d38cd31691640555228e36975Brian Paul 504b2006a40eb22899d38cd31691640555228e36975Brian Paul switch (api) { 5055f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#ifdef EGL_VERSION_1_4 5065f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul case EGL_OPENGL_API: 5075f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul if (_eglGlobal.OpenGLAPISupported) { 5085f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul t->CurrentAPI = api; 5095f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul return EGL_TRUE; 5105f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul } 5115f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 5125f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul return EGL_FALSE; 5135f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#endif 514b2006a40eb22899d38cd31691640555228e36975Brian Paul case EGL_OPENGL_ES_API: 515b2006a40eb22899d38cd31691640555228e36975Brian Paul if (_eglGlobal.OpenGLESAPISupported) { 516b2006a40eb22899d38cd31691640555228e36975Brian Paul t->CurrentAPI = api; 517b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 518b2006a40eb22899d38cd31691640555228e36975Brian Paul } 519b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 520b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 521b2006a40eb22899d38cd31691640555228e36975Brian Paul case EGL_OPENVG_API: 522b2006a40eb22899d38cd31691640555228e36975Brian Paul if (_eglGlobal.OpenVGAPISupported) { 523b2006a40eb22899d38cd31691640555228e36975Brian Paul t->CurrentAPI = api; 524b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 525b2006a40eb22899d38cd31691640555228e36975Brian Paul } 526b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 527b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 528b2006a40eb22899d38cd31691640555228e36975Brian Paul default: 529b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 530b2006a40eb22899d38cd31691640555228e36975Brian Paul } 531b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 532b2006a40eb22899d38cd31691640555228e36975Brian Paul} 533b2006a40eb22899d38cd31691640555228e36975Brian Paul 534b2006a40eb22899d38cd31691640555228e36975Brian Paul 535b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface 536b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 537b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 538b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 539b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 540b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 541b2006a40eb22899d38cd31691640555228e36975Brian Paul return drv->API.CreatePbufferFromClientBuffer(drv, dpy, buftype, buffer, 542b2006a40eb22899d38cd31691640555228e36975Brian Paul config, attrib_list); 543b2006a40eb22899d38cd31691640555228e36975Brian Paul} 544b2006a40eb22899d38cd31691640555228e36975Brian Paul 545b2006a40eb22899d38cd31691640555228e36975Brian Paul 546b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLenum 547b2006a40eb22899d38cd31691640555228e36975Brian PauleglQueryAPI(void) 548b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 5495f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 550b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 551b2006a40eb22899d38cd31691640555228e36975Brian Paul return t->CurrentAPI; 552b2006a40eb22899d38cd31691640555228e36975Brian Paul} 553b2006a40eb22899d38cd31691640555228e36975Brian Paul 554b2006a40eb22899d38cd31691640555228e36975Brian Paul 555b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 556b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 557b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 558b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 559b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLDisplay dpy = eglGetCurrentDisplay(); 560b2006a40eb22899d38cd31691640555228e36975Brian Paul if (dpy) { 561b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 562b2006a40eb22899d38cd31691640555228e36975Brian Paul /* unbind context */ 563b2006a40eb22899d38cd31691640555228e36975Brian Paul (void) drv->API.MakeCurrent(drv, dpy, EGL_NO_SURFACE, 564b2006a40eb22899d38cd31691640555228e36975Brian Paul EGL_NO_SURFACE, EGL_NO_CONTEXT); 565b2006a40eb22899d38cd31691640555228e36975Brian Paul } 566b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglDeleteThreadData(t); 567b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 568b2006a40eb22899d38cd31691640555228e36975Brian Paul} 5697012d01d888d482f2c6ad1180231a482026d213aJon Smirl 5707012d01d888d482f2c6ad1180231a482026d213aJon Smirl 571b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 572b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void) 573b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 574b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLDisplay dpy = eglGetCurrentDisplay(); 575b2006a40eb22899d38cd31691640555228e36975Brian Paul if (dpy != EGL_NO_DISPLAY) { 576b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLDriver *drv = _eglLookupDriver(dpy); 577b2006a40eb22899d38cd31691640555228e36975Brian Paul return drv->API.WaitClient(drv, dpy); 578b2006a40eb22899d38cd31691640555228e36975Brian Paul } 579b2006a40eb22899d38cd31691640555228e36975Brian Paul else 580b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 581b2006a40eb22899d38cd31691640555228e36975Brian Paul} 5827012d01d888d482f2c6ad1180231a482026d213aJon Smirl 583b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 584