eglapi.c revision 0eaa02c836821556c1e8d0141f49f57e23f2548d
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 902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv->APImajor = major_int; 912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv->APIminor = minor_int; 922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu snprintf(drv->Version, sizeof(drv->Version), 932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu "%d.%d (%s)", major_int, minor_int, drv->Name); 942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp->Driver = drv; 962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } else { 972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu major_int = drv->APImajor; 982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu minor_int = drv->APIminor; 99adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 1002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 1022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 1032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *major = major_int; 1042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *minor = minor_int; 1052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1111ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 113adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 1152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 1182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); 1192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 1212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv) { 1222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* TODO drv->API.Terminate should be called here */ 1232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglCloseDriver(drv, disp); 1242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp->Driver = NULL; 1252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 1282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu/** 1322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu * A bunch of check functions and declare macros to simply error checking. 1332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu */ 1342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 1362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) { 1382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 1392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp->Driver) { 1422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 1432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return disp->Driver; 1462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 1512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf) { 1562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_SURFACE, msg); 1572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 1652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context) { 1702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 1712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 1742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 1782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 1792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 1822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!conf) { 1842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 1852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 1862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 1872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 1882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD(dpy) \ 1922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 1932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 1942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 1952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); \ 1962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 1972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 1982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 1992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_SURFACE(dpy, surface) \ 2022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface((surface), disp); \ 2042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckSurface(disp, surf, __FUNCTION__); \ 2072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx) \ 2132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext((ctx), disp); \ 2152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckContext(disp, context, __FUNCTION__); \ 2182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#ifdef EGL_MESA_screen_surface 2242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 2282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!scrn) { 2332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 2342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wustatic INLINE _EGLDriver * 2412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 2422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 2432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 2452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m) { 2472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 2482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return NULL; 2492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv; 2512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 2522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_SCREEN(dpy, screen) \ 2552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((screen), disp); \ 2572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); \ 2602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#define _EGL_DECLARE_DD_AND_MODE(dpy, mode) \ 2662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); \ 2672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode((mode), disp); \ 2682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; \ 2692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu do { \ 2702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckMode(disp, m, __FUNCTION__); \ 2712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) \ 2722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; \ 2732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } while (0) 2742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#endif /* EGL_MESA_screen_surface */ 2772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2791ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 280adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 281adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 2822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 2832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryString(drv, disp, name); 284adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 285adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 2882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 2892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 290adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 2912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 2922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 293adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 294adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 295adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2961ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 2972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 2982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 299adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 3012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 304adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 305adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3061ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 3082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 3172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 319adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 320adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3221ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 3232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 3242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 3252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 3262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 3292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 3312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 3352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!share && share_list != EGL_NO_CONTEXT) { 3362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 3372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 3382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 3412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (context) 3422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkContext(context, disp); 3432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 3442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_CONTEXT; 345adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 347adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3481ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 349adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 350adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx); 3522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 3532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.DestroyContext(drv, disp, context); 354adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 355adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 356adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3571ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 3592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 360adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 3632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 3642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 3652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); 3682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 3692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 3702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 3712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 3722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 3732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 3742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 3752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 379adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3801ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 3822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 383adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_CONTEXT(dpy, ctx); 3852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryContext(drv, disp, context, attribute, value); 386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3891ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 3902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 3912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu NativeWindowType window, const EGLint *attrib_list) 392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 3932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 3942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 3972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 3992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 4032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 407adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 409adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4101ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 4122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu NativePixmapType pixmap, const EGLint *attrib_list) 413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 4242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 428adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 429adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 430adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4311ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 4332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 434adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 4362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 4392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 4412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 4422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 4432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 4452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 4462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 4472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 4482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 449adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 450adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 451adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 4572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.DestroySurface(drv, disp, surf); 458adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 459adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 4622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 463adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QuerySurface(drv, disp, surf, attribute, value); 466adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 467adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 4702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 471adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 474adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 475adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 476adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4771ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 478adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 479adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.BindTexImage(drv, disp, surf, buffer); 482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 484adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4851ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 4892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ReleaseTexImage(drv, disp, surf, buffer); 490adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 491adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 492adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4931ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 494adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 495adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 4962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 4972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SwapInterval(drv, disp, interval); 498adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 499adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 500adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5011ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 503adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.SwapBuffers(drv, disp, surf); 506adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 507adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 508adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5091ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 510adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyBuffers(EGLDisplay dpy, EGLSurface surface, NativePixmapType target) 511adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SURFACE(dpy, surface); 5132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.CopyBuffers(drv, disp, surf, target); 514adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 515adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 516adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5171ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 518adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void) 519adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 5212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 5242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 5252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 5272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 5282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitGL(drv, disp); 530adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 531adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 532adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5331ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 534adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 535adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 5362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 5372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 5402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 5412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 5432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 5442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitNative(drv, disp, engine); 546adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 547adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 548adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 550adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 551adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 552adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *dpy = _eglGetCurrentDisplay(); 553721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 554adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 555adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 556adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5571ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 558adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 559adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 560adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 5615e7dba541298a29f175f9d077bf6f63030465d94Brian Paul return _eglGetContextHandle(ctx); 562adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 563adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 564adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5651ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 566adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 567adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 568adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *s = _eglGetCurrentSurface(readdraw); 569721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetSurfaceHandle(s); 570adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 571adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 572adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5731ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 574adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 575adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 57648822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 57748822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 57875da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 57975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 580adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 581adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 582adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 583adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5841ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulvoid (* EGLAPIENTRY eglGetProcAddress(const char *procname))() 585adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 586adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul typedef void (*genericFunc)(); 587adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul struct name_function { 588adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 589adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 590adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 591adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul static struct name_function egl_functions[] = { 592adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* alphabetical order */ 593adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 594adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 595adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 596adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateContext", (_EGLProc) eglCreateContext }, 597adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 598adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 599adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 600adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 601adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 602adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 603adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 604adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 605adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 606adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 607adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 608adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetError", (_EGLProc) eglGetError }, 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 610adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglInitialize", (_EGLProc) eglInitialize }, 611adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 612adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryContext", (_EGLProc) eglQueryContext }, 613adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryString", (_EGLProc) eglQueryString }, 614adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 615adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 616adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 617adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 618adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 619adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglTerminate", (_EGLProc) eglTerminate }, 620adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglWaitGL", (_EGLProc) eglWaitGL }, 621adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglWaitNative", (_EGLProc) eglWaitNative }, 622adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* Extensions */ 623b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 6247012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 6257012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 6267012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 6271c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 6287012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 6297012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 63048822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 6317012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 6327012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 6337012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 6347012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 6357012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 636b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 637b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 638b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglBindAPI", (_EGLProc) eglBindAPI }, 639b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer }, 640b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglQueryAPI", (_EGLProc) eglQueryAPI }, 641b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglReleaseThread", (_EGLProc) eglReleaseThread }, 642b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglWaitClient", (_EGLProc) eglWaitClient }, 643b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 644adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 645adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 646adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 647adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul for (i = 0; egl_functions[i].name; i++) { 648adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (strcmp(egl_functions[i].name, procname) == 0) { 649adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return (genericFunc) egl_functions[i].function; 650adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 651adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 652e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 653e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul /* now loop over drivers to query their procs */ 654e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul for (i = 0; i < _eglGlobal.NumDrivers; i++) { 655e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul _EGLProc p = _eglGlobal.Drivers[i]->API.GetProcAddress(procname); 656e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul if (p) 657e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul return p; 658e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul } 659e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 660adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return NULL; 661adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 662adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 663adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 664adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 665adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 666adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 667adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 669c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 670adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 671adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 672adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 6742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 6752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu modes, modes_size, num_modes); 676adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 677adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 678adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6791ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 6812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 682adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 6842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 685adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 686adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 687adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6881ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 6902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 691adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_MODE(dpy, mode); 6932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 694adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 695adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 696adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6971ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 6992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 7002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 7012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 7032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 7042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckContext(disp, source_context, __FUNCTION__); 7072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv || !dest_context) { 7082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv) 7092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglError(EGL_BAD_CONTEXT, __FUNCTION__); 7101c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl return EGL_FALSE; 7112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 7122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.CopyContextMESA(drv, disp, source_context, dest_context, 7142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu mask); 7151c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 7161c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 7171c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 718adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 7202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 721adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD(dpy); 7232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.GetScreensMESA(drv, disp, screens, 7242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu max_screens, num_screens); 725adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 726adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 727adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 728c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PaulEGLSurface 7292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 7302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 731adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 7342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 7362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 7382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 7402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 7422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 7432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 7442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 7452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 746adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 747adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 748adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 749adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 7512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 752adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 7552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 7562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 7572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 7602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 7622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 7632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_SURFACE, __FUNCTION__); 7642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 7652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglError(EGL_BAD_MODE_MESA, __FUNCTION__); 7662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 768adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 769adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 770adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 771adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7727012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 773adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 7752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 7767012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 7777012d01d888d482f2c6ad1180231a482026d213aJon Smirl 7787012d01d888d482f2c6ad1180231a482026d213aJon Smirl 7797012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean 7802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 7812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 7827012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 7832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_SCREEN(dpy, screen); 7842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 785adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 786adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 787adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 788adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 7892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 7902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 791adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 7932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 7942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 7952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 7962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 7982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 7992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 8002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf) != EGL_TRUE) 8022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = NULL; 8032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surface) 8042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 8052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return (surf != NULL); 806adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 807adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 808adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 809adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean 8107012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 811adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 8132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 8142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 8152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 8162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckScreen(disp, scrn, __FUNCTION__); 8182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 8192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_FALSE; 8202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (drv->API.QueryScreenModeMESA(drv, disp, scrn, &m) != EGL_TRUE) 8222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu m = NULL; 8232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (mode) 8242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 8252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 8262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return (m != NULL); 827adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 828adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 829adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8307012d01d888d482f2c6ad1180231a482026d213aJon Smirlconst char * 8317012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 8327012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 8332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_DECLARE_DD_AND_MODE(dpy, mode); 8342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.QueryModeStringMESA(drv, disp, m); 8357012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 8367012d01d888d482f2c6ad1180231a482026d213aJon Smirl 8377012d01d888d482f2c6ad1180231a482026d213aJon Smirl 838b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 839b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 840b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 841b2006a40eb22899d38cd31691640555228e36975Brian Paul 842b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 843b2006a40eb22899d38cd31691640555228e36975Brian Paul 844d5078b94323241a6482f54797756116b1c864327Brian Paul 845d5078b94323241a6482f54797756116b1c864327Brian Paul/** 846d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 847d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 848d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 849d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 850d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 851d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 852d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 853d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 854d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 855d5078b94323241a6482f54797756116b1c864327Brian Paul */ 856b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 857b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 858b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 859b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 860b2006a40eb22899d38cd31691640555228e36975Brian Paul 86175da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 86275da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu return _eglError(EGL_BAD_ALLOC, "eglBindAPI"); 86375da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 86421b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 86521b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu return _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 86621b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 867b2006a40eb22899d38cd31691640555228e36975Brian Paul switch (api) { 8685f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#ifdef EGL_VERSION_1_4 8695f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul case EGL_OPENGL_API: 870d5078b94323241a6482f54797756116b1c864327Brian Paul if (_eglGlobal.ClientAPIsMask & EGL_OPENGL_BIT) { 87121b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 8725f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul return EGL_TRUE; 8735f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul } 8745f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 8755f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul return EGL_FALSE; 8765f8a4f3e5e8fe78f1abe9ca6dd1131ad53d3d943Brian Paul#endif 877b2006a40eb22899d38cd31691640555228e36975Brian Paul case EGL_OPENGL_ES_API: 878d5078b94323241a6482f54797756116b1c864327Brian Paul if (_eglGlobal.ClientAPIsMask & (EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT)) { 87921b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 880b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 881b2006a40eb22899d38cd31691640555228e36975Brian Paul } 882b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 883b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 884b2006a40eb22899d38cd31691640555228e36975Brian Paul case EGL_OPENVG_API: 885d5078b94323241a6482f54797756116b1c864327Brian Paul if (_eglGlobal.ClientAPIsMask & EGL_OPENVG_BIT) { 88621b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 887b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 888b2006a40eb22899d38cd31691640555228e36975Brian Paul } 889b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglError(EGL_BAD_PARAMETER, "eglBindAPI"); 890b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 891b2006a40eb22899d38cd31691640555228e36975Brian Paul default: 892b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_FALSE; 893b2006a40eb22899d38cd31691640555228e36975Brian Paul } 894b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 895b2006a40eb22899d38cd31691640555228e36975Brian Paul} 896b2006a40eb22899d38cd31691640555228e36975Brian Paul 897b2006a40eb22899d38cd31691640555228e36975Brian Paul 898d5078b94323241a6482f54797756116b1c864327Brian Paul/** 899d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 900d5078b94323241a6482f54797756116b1c864327Brian Paul */ 901d5078b94323241a6482f54797756116b1c864327Brian PaulEGLenum 902d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 903d5078b94323241a6482f54797756116b1c864327Brian Paul{ 904d5078b94323241a6482f54797756116b1c864327Brian Paul /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 905d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 90621b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu return _eglConvertApiFromIndex(t->CurrentAPIIndex); 907d5078b94323241a6482f54797756116b1c864327Brian Paul} 908d5078b94323241a6482f54797756116b1c864327Brian Paul 909d5078b94323241a6482f54797756116b1c864327Brian Paul 910b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface 911b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 912b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 913b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 914b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLookupDisplay(dpy); 9162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 9172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 9192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = _eglCheckConfig(disp, conf, __FUNCTION__); 9212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 9222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 9232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 9252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 9262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (surf) 9272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglLinkSurface(surf, disp); 9282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu else 9292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_NO_SURFACE; 930b2006a40eb22899d38cd31691640555228e36975Brian Paul} 931b2006a40eb22899d38cd31691640555228e36975Brian Paul 932b2006a40eb22899d38cd31691640555228e36975Brian Paul 933b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 934b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 935b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* unbind current context */ 9372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 9382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 9392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (disp) { 9412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 9422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 9432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 944b2006a40eb22899d38cd31691640555228e36975Brian Paul } 9452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 94675da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 947b2006a40eb22899d38cd31691640555228e36975Brian Paul return EGL_TRUE; 948b2006a40eb22899d38cd31691640555228e36975Brian Paul} 9497012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9507012d01d888d482f2c6ad1180231a482026d213aJon Smirl 951b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean 952b2006a40eb22899d38cd31691640555228e36975Brian PauleglWaitClient(void) 953b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 9542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglGetCurrentDisplay(); 9552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 9582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return EGL_TRUE; 9592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* a current display is always initialized */ 9612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 9622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return drv->API.WaitClient(drv, disp); 964b2006a40eb22899d38cd31691640555228e36975Brian Paul} 9657012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 967b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 968