eglapi.c revision 57da499d7ba074128e8c97b8076805e403a2b9c4
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 12aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * opaque handles. Internal objects are linked to a display to 13aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * create the handles. 14adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 15aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * For each public API entry point, the opaque handles are looked up 16aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * before being dispatched to the drivers. When it fails to look up 17aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * a handle, one of 18aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 19aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_DISPLAY 20aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_CONFIG 21aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_CONTEXT 22aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_SURFACE 23aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_SCREEN_MESA 24aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_MODE_MESA 25aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 26aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * is generated and the driver function is not called. An 27aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * uninitialized EGLDisplay has no driver associated with it. When 28aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * such display is detected, 29aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 30aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_NOT_INITIALIZED 31aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 32aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * is generated. 33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 34bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * Some of the entry points use current display, context, or surface 35bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * implicitly. For such entry points, the implicit objects are also 36bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * checked before calling the driver function. Other than the 37bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * errors listed above, 38bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * 39bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * EGL_BAD_CURRENT_SURFACE 40bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * 41bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * may also be generated. 42bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * 43adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Notes on naming conventions: 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * eglFooBar - public EGL function 46adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_FOO_BAR - public EGL token 47adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGLDatatype - public EGL datatype 48adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 49adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _eglFooBar - private EGL function 50adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _EGLDatatype - private EGL datatype, typedef'd struct 51adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _egl_struct - private EGL struct, non-typedef'd 52adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 53adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 54adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 55adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 56adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <stdio.h> 57b2006a40eb22899d38cd31691640555228e36975Brian Paul#include <stdlib.h> 58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <string.h> 59adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h" 60adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h" 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglglobals.h" 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h" 64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h" 652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglconfig.h" 662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglscreen.h" 672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglmode.h" 68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 716052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the first EGL function that an application calls. 726052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * We initialize our global vars and create a private _EGLDisplay object. 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 741ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 756052af172f0241e6678cd16efac0a0f14f40146cBrian PauleglGetDisplay(NativeDisplayType nativeDisplay) 76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy; 78be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu dpy = _eglFindDisplay(nativeDisplay); 79be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu if (!dpy) { 80be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu dpy = _eglNewDisplay(nativeDisplay); 81be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu if (dpy) 82be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu _eglLinkDisplay(dpy); 83be9d1ab171b1b29108c781af84dd500707a12925Chia-I Wu } 84721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 886052af172f0241e6678cd16efac0a0f14f40146cBrian Paul/** 896052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the second EGL function that an application calls. 906052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * Here we load/initialize the actual hardware driver. 916052af172f0241e6678cd16efac0a0f14f40146cBrian Paul */ 921ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 977e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White EGLint major_int, minor_int; 987e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White 992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 1002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); 1012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 1032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) { 1040eaa02c836821556c1e8d0141f49f57e23f2548dChia-I Wu drv = _eglOpenDriver(disp); 1052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_NOT_INITIALIZED, __FUNCTION__); 1072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Initialize the particular display now */ 1092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv->API.Initialize(drv, disp, &major_int, &minor_int)) { 1102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglCloseDriver(drv, disp); 1112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_NOT_INITIALIZED, __FUNCTION__); 1127e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White } 113c56e15b093c367e7e17ebd2e153baab8cafd213aBrian Paul 1145a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu disp->APImajor = major_int; 1155a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu disp->APIminor = minor_int; 1165a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu snprintf(disp->Version, sizeof(disp->Version), 1172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu "%d.%d (%s)", major_int, minor_int, drv->Name); 1182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 119310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu /* limit to APIs supported by core */ 120310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu disp->ClientAPIsMask &= _EGL_API_ALL_BITS; 1215a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu 1222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp->Driver = drv; 1232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } else { 1245a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu major_int = disp->APImajor; 1255a2c9372a0d9fa1efd924f9386a4e3df47c17d0eChia-I Wu minor_int = disp->APIminor; 126adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 1272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 1292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 1302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *major = major_int; 1312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *minor = minor_int; 1322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 135adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1381ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 139adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 1422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 1452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); 1462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 1482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv) { 149ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu drv->API.Terminate(drv, disp); 1502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglCloseDriver(drv, disp); 1512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp->Driver = NULL; 1522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 1552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu/** 1592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu * A bunch of check functions and declare macros to simply error checking. 1602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu */ 1612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 1632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) { 1652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 1662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp->Driver) { 1692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 1702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return disp->Driver; 1732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 1782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf) { 1832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_SURFACE, msg); 1842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 187adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 188adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 189adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 1922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context) { 1972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 1982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 2062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!conf) { 2112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 2122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD(dpy) \ 2192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); \ 2232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_SURFACE(dpy, surface) \ 2292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface((surface), disp); \ 2312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckSurface(disp, surf, __FUNCTION__); \ 2342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx) \ 2402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext((ctx), disp); \ 2422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckContext(disp, context, __FUNCTION__); \ 2452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#ifdef EGL_MESA_screen_surface 2512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 2552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!scrn) { 2602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 2612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 2692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m) { 2742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 2752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_SCREEN(dpy, screen) \ 2822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((screen), disp); \ 2842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); \ 2872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_MODE(dpy, mode) \ 2932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode((mode), disp); \ 2952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckMode(disp, m, __FUNCTION__); \ 2982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 3002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 3012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#endif /* EGL_MESA_screen_surface */ 3042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3061ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 3102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryString(drv, disp, name); 311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 313adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3141ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 3162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 317adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 3192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3231ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 3252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 326adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 3282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 330adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3331ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 3352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 3442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 347adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 348adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 3502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 3512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 3522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 3532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 3562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 3582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 3622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!share && share_list != EGL_NO_CONTEXT) { 3632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 3642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 3652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 3682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (context) 3692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkContext(context, disp); 3702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 3712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3751ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx); 3792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 3802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.DestroyContext(drv, disp, context); 381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3841ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 3862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 3902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 3912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 3922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); 3952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 3972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 3982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 3992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 4002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 4012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 4022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 404adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 405adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 406adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 4092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx); 4122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryContext(drv, disp, context, attribute, value); 413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 415adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4161ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 4182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu NativeWindowType window, const EGLint *attrib_list) 419adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 4302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 434adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 435adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 436adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4371ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 4392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu NativePixmapType pixmap, const EGLint *attrib_list) 440adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 4512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 455adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 456adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 457adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4581ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 4602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 461adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 4722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 476adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 477adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4791ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 480adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 481adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 4842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.DestroySurface(drv, disp, surf); 485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 4892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 490adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QuerySurface(drv, disp, surf, attribute, value); 493adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 494adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4951ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 4972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 498adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 501adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 502adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 503adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5041ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 505adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 506adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.BindTexImage(drv, disp, surf, buffer); 509adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 510adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 511adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5121ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 513adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 514adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ReleaseTexImage(drv, disp, surf, buffer); 517adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 518adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 519adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5201ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 521adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 522adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 52357da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 52457da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLSurface *surf; 5252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 52657da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 52757da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu if (!ctx || !_eglIsContextLinked(ctx) || ctx->Display != disp) 52857da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu return _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 52957da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 53057da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu surf = ctx->DrawSurface; 53157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu if (!_eglIsSurfaceLinked(surf)) 53257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 53357da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 53457da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu return drv->API.SwapInterval(drv, disp, surf, interval); 535adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 536adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 537adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5381ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 540adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 541bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 5422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 543bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 544bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 545bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface) 546bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 547bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 5482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SwapBuffers(drv, disp, surf); 549adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 550adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 551adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 553adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target) 554adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.CopyBuffers(drv, disp, surf, target); 557adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 558adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 559adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 561adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void) 562adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 5642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 5672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 5682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 5702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 5712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitGL(drv, disp); 573adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 574adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 575adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5761ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 577adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 578adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 5802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 5832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 5842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 5862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 5872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitNative(drv, disp, engine); 589adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 590adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 591adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5921ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 593adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 594adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 595adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy = _eglGetCurrentDisplay(); 596721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 597adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 598adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 599adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6001ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 601adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 602adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 603adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 6045e7dba541298a29f175f9d077bf6f63030465d94Brian Paul return _eglGetContextHandle(ctx); 605adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 606adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 607adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6081ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 610adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 61161906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 61261906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLSurface *surf; 61361906631202af855d0742586956ff9f34522a525Chia-I Wu 61461906631202af855d0742586956ff9f34522a525Chia-I Wu if (!ctx) 61561906631202af855d0742586956ff9f34522a525Chia-I Wu return EGL_NO_SURFACE; 61661906631202af855d0742586956ff9f34522a525Chia-I Wu 61761906631202af855d0742586956ff9f34522a525Chia-I Wu switch (readdraw) { 61861906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_DRAW: 61961906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->DrawSurface; 62061906631202af855d0742586956ff9f34522a525Chia-I Wu break; 62161906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_READ: 62261906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->ReadSurface; 62361906631202af855d0742586956ff9f34522a525Chia-I Wu break; 62461906631202af855d0742586956ff9f34522a525Chia-I Wu default: 62561906631202af855d0742586956ff9f34522a525Chia-I Wu _eglError(EGL_BAD_PARAMETER, __FUNCTION__); 62661906631202af855d0742586956ff9f34522a525Chia-I Wu surf = NULL; 62761906631202af855d0742586956ff9f34522a525Chia-I Wu break; 62861906631202af855d0742586956ff9f34522a525Chia-I Wu } 62961906631202af855d0742586956ff9f34522a525Chia-I Wu 63061906631202af855d0742586956ff9f34522a525Chia-I Wu return _eglGetSurfaceHandle(surf); 631adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 632adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 633adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6341ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 635adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 636adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 63748822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 63848822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 63975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 64075da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 641adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 642adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 643adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 644adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6451ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))() 646adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6479061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu static const struct { 648adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 649adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 6509061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu } egl_functions[] = { 6519061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu /* extensions only */ 652b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 6537012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 6547012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 6557012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 6561c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 6577012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 6587012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 65948822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 6607012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 6617012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 6627012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 6637012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 6647012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 665b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 666adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 667adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 668adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 6699061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 6709061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (!procname) 6719061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu return NULL; 6729061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strncmp(procname, "egl", 3) == 0) { 6739061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu for (i = 0; egl_functions[i].name; i++) { 6749061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strcmp(egl_functions[i].name, procname) == 0) 6759061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu return egl_functions[i].function; 676adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 677adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 678e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 679e787ffcd02cac9085ac69f631cce235d1cad59c9Chia-I Wu /* preload a driver if there isn't one */ 680e787ffcd02cac9085ac69f631cce235d1cad59c9Chia-I Wu if (!_eglGlobal.NumDrivers) 681e787ffcd02cac9085ac69f631cce235d1cad59c9Chia-I Wu _eglPreloadDriver(NULL); 682e787ffcd02cac9085ac69f631cce235d1cad59c9Chia-I Wu 683e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul /* now loop over drivers to query their procs */ 684e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul for (i = 0; i < _eglGlobal.NumDrivers; i++) { 685e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul _EGLProc p = _eglGlobal.Drivers[i]->API.GetProcAddress(procname); 686e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul if (p) 687e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul return p; 688e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul } 689e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 690adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 691adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 692adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 693adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6949061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#ifdef EGL_MESA_screen_surface 6959061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 6969061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 697adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 698adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 699adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 700adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7011ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 702c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 703adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 704adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 705adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 7072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 7082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu modes, modes_size, num_modes); 709adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 710adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 711adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7121ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 7132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 7142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 715adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 7172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 718adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 719adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 720adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7211ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 7222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 7232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 724adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_MODE(dpy, mode); 7262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 727adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 728adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 729adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7301ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 7312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 7322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 7332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 7342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 7362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 7372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckContext(disp, source_context, __FUNCTION__); 7402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv || !dest_context) { 7412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv) 7422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 7431c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl return EGL_FALSE; 7442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 7452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.CopyContextMESA(drv, disp, source_context, dest_context, 7472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu mask); 7481c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 7491c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 7501c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 751adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 7532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 754adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 7562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetScreensMESA(drv, disp, screens, 7572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu max_screens, num_screens); 758adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 759adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 760adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 761c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface 7622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 7632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 764adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 7672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 7692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 7712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 7732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 7752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 7762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 7772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 7782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 779adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 780adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 781adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 782adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 7842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 785adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 7882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 7892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 7902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 7932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 7952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 7962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 7972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 7982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_MODE_MESA, __FUNCTION__); 7992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 801adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 802adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 803adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 804adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 8057012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 806adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 8082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 8097012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 8107012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8117012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8127012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean 8132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 8142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 8157012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 8162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 8172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 818adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 819adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 820adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 821adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 8222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 8232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 824adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 8262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 8272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 8282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 8292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 8312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 8322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 8332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf) != EGL_TRUE) 8352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = NULL; 8362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surface) 8372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 8382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return (surf != NULL); 839adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 840adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 841adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 842adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 8437012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 844adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 8462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 8472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 8482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 8492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 8512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 8522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 8532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv->API.QueryScreenModeMESA(drv, disp, scrn, &m) != EGL_TRUE) 8552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu m = NULL; 8562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (mode) 8572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 8582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return (m != NULL); 860adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 861adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 862adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8637012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char * 8647012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 8657012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 8662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_MODE(dpy, mode); 8672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryModeStringMESA(drv, disp, m); 8687012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 8697012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8707012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8719061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#endif /* EGL_MESA_screen_surface */ 8729061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 8739061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 874b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 875b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 876b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 877b2006a40eb22899d38cd31691640555228e36975Brian Paul 878b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 879b2006a40eb22899d38cd31691640555228e36975Brian Paul 880d5078b94323241a6482f54797756116b1c864327Brian Paul 881d5078b94323241a6482f54797756116b1c864327Brian Paul/** 882d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 883d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 884d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 885d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 886d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 887d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 888d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 889d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 890d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 891d5078b94323241a6482f54797756116b1c864327Brian Paul */ 892b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 893b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 894b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 895b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 896b2006a40eb22899d38cd31691640555228e36975Brian Paul 89775da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 89875da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu return _eglError(EGL_BAD_ALLOC, "eglBindAPI"); 89975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 90021b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 90121b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu return _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 90221b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 903310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 904b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 905b2006a40eb22899d38cd31691640555228e36975Brian Paul} 906b2006a40eb22899d38cd31691640555228e36975Brian Paul 907b2006a40eb22899d38cd31691640555228e36975Brian Paul 908d5078b94323241a6482f54797756116b1c864327Brian Paul/** 909d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 910d5078b94323241a6482f54797756116b1c864327Brian Paul */ 911d5078b94323241a6482f54797756116b1c864327Brian PaulEGLenum 912d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 913d5078b94323241a6482f54797756116b1c864327Brian Paul{ 914d5078b94323241a6482f54797756116b1c864327Brian Paul /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 915d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 91621b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu return _eglConvertApiFromIndex(t->CurrentAPIIndex); 917d5078b94323241a6482f54797756116b1c864327Brian Paul} 918d5078b94323241a6482f54797756116b1c864327Brian Paul 919d5078b94323241a6482f54797756116b1c864327Brian Paul 920b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface 921b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 922b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 923b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 924b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 9262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 9272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 9292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 9312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 9322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 9332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 9352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 9362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 9372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 9382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 9392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 940b2006a40eb22899d38cd31691640555228e36975Brian Paul} 941b2006a40eb22899d38cd31691640555228e36975Brian Paul 942b2006a40eb22899d38cd31691640555228e36975Brian Paul 943b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 944b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 945b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* unbind current context */ 9472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 9482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 9492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (disp) { 9512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 9522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 9532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 954b2006a40eb22899d38cd31691640555228e36975Brian Paul } 9552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 95675da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 957b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 958b2006a40eb22899d38cd31691640555228e36975Brian Paul} 9597012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9607012d01d888d482f2c6ad1180231a482026d213aJon Smirl 961b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 962b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void) 963b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 9652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 9682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 9692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 9712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 9722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitClient(drv, disp); 974b2006a40eb22899d38cd31691640555228e36975Brian Paul} 9757012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 977b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 978