eglapi.c revision 9061d733d3f31293c145cf3b7a0f71c1bfd31989
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#include <stdio.h> 33b2006a40eb22899d38cd31691640555228e36975Brian Paul#include <stdlib.h> 34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <string.h> 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h" 36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h" 37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglglobals.h" 39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h" 40adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h" 412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglconfig.h" 422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglscreen.h" 432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglmode.h" 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 46adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 476052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the first EGL function that an application calls. 486052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * We initialize our global vars and create a private _EGLDisplay object. 49adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 501ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 516052af172f0241e6678cd16efac0a0f14f40146cBrian PauleglGetDisplay(NativeDisplayType nativeDisplay) 52adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 53adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy; 54be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu dpy = _eglFindDisplay(nativeDisplay); 55be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu if (!dpy) { 56be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu dpy = _eglNewDisplay(nativeDisplay); 57be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu if (dpy) 58be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu _eglLinkDisplay(dpy); 59be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu } 60721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 646052af172f0241e6678cd16efac0a0f14f40146cBrian Paul/** 656052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the second EGL function that an application calls. 666052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * Here we load/initialize the actual hardware driver. 676052af172f0241e6678cd16efac0a0f14f40146cBrian Paul */ 681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 737e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White EGLint major_int, minor_int; 747e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White 752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); 772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) { 800eaa02c836821556c1e8d0141f49f57e23f2548dChia-I Wu drv = _eglOpenDriver(disp); 812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_NOT_INITIALIZED, __FUNCTION__); 832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Initialize the particular display now */ 852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv->API.Initialize(drv, disp, &major_int, &minor_int)) { 862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglCloseDriver(drv, disp); 872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_NOT_INITIALIZED, __FUNCTION__); 887e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White } 89c56e15b093c367e7e17ebd2e153baab8cafd213aBrian Paul 905a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu disp->APImajor = major_int; 915a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu disp->APIminor = minor_int; 925a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu snprintf(disp->Version, sizeof(disp->Version), 932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu "%d.%d (%s)", major_int, minor_int, drv->Name); 942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 955a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu /* update the global notion of supported APIs */ 965a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu _eglGlobal.ClientAPIsMask |= disp->ClientAPIsMask; 975a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu 982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp->Driver = drv; 992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } else { 1005a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu major_int = disp->APImajor; 1015a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu minor_int = disp->APIminor; 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 1032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 1052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 1062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *major = major_int; 1072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *minor = minor_int; 1082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 111adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1141ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 115adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 116adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 1182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 1212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); 1222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 1242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv) { 125ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu drv->API.Terminate(drv, disp); 1262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglCloseDriver(drv, disp); 1272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp->Driver = NULL; 1282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 1312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu/** 1352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu * A bunch of check functions and declare macros to simply error checking. 1362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu */ 1372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 1392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) { 1412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 1422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp->Driver) { 1452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 1462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return disp->Driver; 1492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 1542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf) { 1592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_SURFACE, msg); 1602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 163adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 165adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 1682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context) { 1732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 1742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 1772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 1822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!conf) { 1872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 1882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 1912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD(dpy) \ 1952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 1962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 1972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 1982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); \ 1992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_SURFACE(dpy, surface) \ 2052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface((surface), disp); \ 2072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckSurface(disp, surf, __FUNCTION__); \ 2102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx) \ 2162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext((ctx), disp); \ 2182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckContext(disp, context, __FUNCTION__); \ 2212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#ifdef EGL_MESA_screen_surface 2272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 2312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!scrn) { 2362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 2372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 2452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m) { 2502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 2512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_SCREEN(dpy, screen) \ 2582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((screen), disp); \ 2602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); \ 2632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_MODE(dpy, mode) \ 2692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode((mode), disp); \ 2712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckMode(disp, m, __FUNCTION__); \ 2742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#endif /* EGL_MESA_screen_surface */ 2802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2821ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 283adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 2852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 2862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryString(drv, disp, name); 287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 289adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2901ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 2912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 2922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 293adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 2942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 2952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 296adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 298adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2991ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 3012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 3042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 306adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3091ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 3112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 3202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 324adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3251ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 3262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 3272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 3282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 3292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 3322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 3342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 3382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!share && share_list != EGL_NO_CONTEXT) { 3392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 3402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 3412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 3442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (context) 3452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkContext(context, disp); 3462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 3472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 348adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 349adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 350adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3511ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 352adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 353adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx); 3552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 3562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.DestroyContext(drv, disp, context); 357adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 358adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 359adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 3622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 363adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 3662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 3672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 3682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); 3712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 3732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 3742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 3752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 3762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 3772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 3782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 380adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3831ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 3852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx); 3882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryContext(drv, disp, context, attribute, value); 389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 390adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3921ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 3932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 3942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu NativeWindowType window, const EGLint *attrib_list) 395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 4062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4131ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 4152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu NativePixmapType pixmap, const EGLint *attrib_list) 416adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 4272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 431adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 432adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 433adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4341ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 4362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 437adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 4482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 452adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4551ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 456adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 457adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 4602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.DestroySurface(drv, disp, surf); 461adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 462adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4631ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 4652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 466adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QuerySurface(drv, disp, surf, attribute, value); 469adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 470adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4711ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 4732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 474adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4801ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 481adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.BindTexImage(drv, disp, surf, buffer); 485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4881ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 489adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 490adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ReleaseTexImage(drv, disp, surf, buffer); 493adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 494adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 495adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4961ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 497adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 498adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 5002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SwapInterval(drv, disp, interval); 501adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 502adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 503adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5041ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 506adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SwapBuffers(drv, disp, surf); 509adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 510adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 511adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5121ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 513adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target) 514adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.CopyBuffers(drv, disp, surf, target); 517adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 518adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 519adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5201ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 521adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void) 522adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 5242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 5272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 5282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 5302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 5312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitGL(drv, disp); 533adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 534adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 535adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5361ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 537adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 538adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 5402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 5432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 5442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 5462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 5472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitNative(drv, disp, engine); 549adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 550adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 551adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 553adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 554adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 555adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy = _eglGetCurrentDisplay(); 556721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 557adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 558adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 559adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 561adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 562adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 563adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 5645e7dba541298a29f175f9d077bf6f63030465d94Brian Paul return _eglGetContextHandle(ctx); 565adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 566adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 567adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 569adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 570adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 571adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *s = _eglGetCurrentSurface(readdraw); 572721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetSurfaceHandle(s); 573adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 574adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 575adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5761ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 577adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 578adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 57948822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 58048822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 58175da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 58275da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 583adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 584adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 585adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 586adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))() 588adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5899061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu static const struct { 590adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 591adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 5929061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu } egl_functions[] = { 5939061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu /* extensions only */ 594b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 5957012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 5967012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 5977012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 5981c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 5997012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 6007012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 60148822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 6027012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 6037012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 6047012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 6057012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 6067012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 607b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 608adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 610adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 6119061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 6129061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (!procname) 6139061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu return NULL; 6149061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strncmp(procname, "egl", 3) == 0) { 6159061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu for (i = 0; egl_functions[i].name; i++) { 6169061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strcmp(egl_functions[i].name, procname) == 0) 6179061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu return egl_functions[i].function; 618adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 619adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 620e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 621e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul /* now loop over drivers to query their procs */ 622e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul for (i = 0; i < _eglGlobal.NumDrivers; i++) { 623e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul _EGLProc p = _eglGlobal.Drivers[i]->API.GetProcAddress(procname); 624e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul if (p) 625e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul return p; 626e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul } 627e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 628adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 629adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 630adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 631adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6329061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#ifdef EGL_MESA_screen_surface 6339061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 6349061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 635adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 636adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 637adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 638adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6391ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 640c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 641adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 642adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 643adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 6452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 6462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu modes, modes_size, num_modes); 647adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 648adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 649adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6501ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 6522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 653adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 6552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 656adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 657adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 658adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6591ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 6612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 662adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_MODE(dpy, mode); 6642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 665adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 666adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 667adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 6702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 6712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 6722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 6732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 6742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 6752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 6762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 6772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckContext(disp, source_context, __FUNCTION__); 6782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv || !dest_context) { 6792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv) 6802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 6811c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl return EGL_FALSE; 6822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 6832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 6842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.CopyContextMESA(drv, disp, source_context, dest_context, 6852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu mask); 6861c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 6871c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 6881c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 689adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 6902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 6912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 692adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 6942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetScreensMESA(drv, disp, screens, 6952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu max_screens, num_screens); 696adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 697adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 698adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 699c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface 7002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 7012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 702adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 7052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 7072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 7092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 7112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 7132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 7142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 7152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 7162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 717adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 718adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 719adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 720adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 7222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 723adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 7262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 7272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 7282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 7312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 7332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 7342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 7352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 7362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_MODE_MESA, __FUNCTION__); 7372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 739adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 740adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 741adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 742adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7437012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 744adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 7462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 7477012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 7487012d01d888d482f2c6ad1180231a482026d213aJon Smirl 7497012d01d888d482f2c6ad1180231a482026d213aJon Smirl 7507012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean 7512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 7522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 7537012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 7542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 7552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 756adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 757adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 758adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 759adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 7612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 762adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 7652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 7672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 7692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 7712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf) != EGL_TRUE) 7732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = NULL; 7742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surface) 7752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 7762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return (surf != NULL); 777adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 778adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 779adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 780adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7817012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 782adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 7852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 7872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 7892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 7912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv->API.QueryScreenModeMESA(drv, disp, scrn, &m) != EGL_TRUE) 7932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu m = NULL; 7942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (mode) 7952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 7962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return (m != NULL); 798adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 799adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 800adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8017012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char * 8027012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 8037012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 8042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_MODE(dpy, mode); 8052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryModeStringMESA(drv, disp, m); 8067012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 8077012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8087012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8099061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#endif /* EGL_MESA_screen_surface */ 8109061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 8119061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 812b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 813b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 814b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 815b2006a40eb22899d38cd31691640555228e36975Brian Paul 816b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 817b2006a40eb22899d38cd31691640555228e36975Brian Paul 818d5078b94323241a6482f54797756116b1c864327Brian Paul 819d5078b94323241a6482f54797756116b1c864327Brian Paul/** 820d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 821d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 822d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 823d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 824d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 825d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 826d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 827d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 828d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 829d5078b94323241a6482f54797756116b1c864327Brian Paul */ 830b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 831b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 832b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 833b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 834b2006a40eb22899d38cd31691640555228e36975Brian Paul 83575da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 83675da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu return _eglError(EGL_BAD_ALLOC, "eglBindAPI"); 83775da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 83821b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 83921b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu return _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 84021b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 841b2006a40eb22899d38cd31691640555228e36975Brian Paul switch (api) { 8425f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#ifdef EGL_VERSION_1_4 8435f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul case EGL_OPENGL_API: 844d5078b94323241a6482f54797756116b1c864327Brian Paul if (_eglGlobal.ClientAPIsMask & EGL_OPENGL_BIT) { 84521b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 8465f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul return EGL_TRUE; 8475f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul } 8485f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 8495f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul return EGL_FALSE; 8505f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#endif 851b2006a40eb22899d38cd31691640555228e36975Brian Paul case EGL_OPENGL_ES_API: 852d5078b94323241a6482f54797756116b1c864327Brian Paul if (_eglGlobal.ClientAPIsMask & (EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT)) { 85321b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 854b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 855b2006a40eb22899d38cd31691640555228e36975Brian Paul } 856b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 857b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 858b2006a40eb22899d38cd31691640555228e36975Brian Paul case EGL_OPENVG_API: 859d5078b94323241a6482f54797756116b1c864327Brian Paul if (_eglGlobal.ClientAPIsMask & EGL_OPENVG_BIT) { 86021b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 861b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 862b2006a40eb22899d38cd31691640555228e36975Brian Paul } 863b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 864b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 865b2006a40eb22899d38cd31691640555228e36975Brian Paul default: 866b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 867b2006a40eb22899d38cd31691640555228e36975Brian Paul } 868b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 869b2006a40eb22899d38cd31691640555228e36975Brian Paul} 870b2006a40eb22899d38cd31691640555228e36975Brian Paul 871b2006a40eb22899d38cd31691640555228e36975Brian Paul 872d5078b94323241a6482f54797756116b1c864327Brian Paul/** 873d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 874d5078b94323241a6482f54797756116b1c864327Brian Paul */ 875d5078b94323241a6482f54797756116b1c864327Brian PaulEGLenum 876d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 877d5078b94323241a6482f54797756116b1c864327Brian Paul{ 878d5078b94323241a6482f54797756116b1c864327Brian Paul /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 879d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 88021b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu return _eglConvertApiFromIndex(t->CurrentAPIIndex); 881d5078b94323241a6482f54797756116b1c864327Brian Paul} 882d5078b94323241a6482f54797756116b1c864327Brian Paul 883d5078b94323241a6482f54797756116b1c864327Brian Paul 884b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface 885b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 886b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 887b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 888b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 8892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 8902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 8912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 8922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 8932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 8952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 8962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 8972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 8992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 9002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 9012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 9022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 9032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 904b2006a40eb22899d38cd31691640555228e36975Brian Paul} 905b2006a40eb22899d38cd31691640555228e36975Brian Paul 906b2006a40eb22899d38cd31691640555228e36975Brian Paul 907b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 908b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 909b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* unbind current context */ 9112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 9122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 9132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (disp) { 9152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 9162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 9172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 918b2006a40eb22899d38cd31691640555228e36975Brian Paul } 9192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 92075da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 921b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 922b2006a40eb22899d38cd31691640555228e36975Brian Paul} 9237012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9247012d01d888d482f2c6ad1180231a482026d213aJon Smirl 925b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 926b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void) 927b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 9292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 9322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 9332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 9352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 9362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitClient(drv, disp); 938b2006a40eb22899d38cd31691640555228e36975Brian Paul} 9397012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 941b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 942