eglapi.c revision f274dfaca4b53bae92dfe6a72c1890c381d84746
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> 591e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu 60adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h" 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h" 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 6394cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu#include "eglcurrent.h" 64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h" 65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h" 662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglconfig.h" 672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglscreen.h" 682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglmode.h" 69a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#include "eglimage.h" 704eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#include "eglsync.h" 71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 74f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * Macros to help return an API entrypoint. 75655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * 76655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * These macros will unlock the display and record the error code. 77f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 78bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_ERROR(disp, err, ret) \ 79bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 80655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (disp) \ 81655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockDisplay(disp); \ 82f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu /* EGL error codes are non-zero */ \ 83f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (err) \ 84f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(err, __FUNCTION__); \ 85bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return ret; \ 86bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 87bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 88bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_SUCCESS(disp, ret) \ 89bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_SUCCESS, ret) 90bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 91b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu/* record EGL_SUCCESS only when ret evaluates to true */ 92bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_EVAL(disp, ret) \ 93bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, (ret) ? EGL_SUCCESS : 0, ret) 94f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 95f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 96bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu/* 97f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * A bunch of macros and checks to simplify error checking. 98f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 99bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 100bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_DISPLAY(disp, ret, drv) \ 101bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 102bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); \ 103bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) \ 104bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 105bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 106bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 107bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_OBJECT(disp, type, obj, ret, drv) \ 108bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 109bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheck ## type(disp, obj, __FUNCTION__); \ 110bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) \ 111bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 112bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 113bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 114bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SURFACE(disp, surf, ret, drv) \ 115bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Surface, surf, ret, drv) 116bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 117bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONTEXT(disp, context, ret, drv) \ 118bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Context, context, ret, drv) 119bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 120bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONFIG(disp, conf, ret, drv) \ 121bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Config, conf, ret, drv) 122bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 123bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SCREEN(disp, scrn, ret, drv) \ 124bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Screen, scrn, ret, drv) 125bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 126bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_MODE(disp, m, ret, drv) \ 127bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Mode, m, ret, drv) 128bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1294eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#define _EGL_CHECK_SYNC(disp, s, ret, drv) \ 1304eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_OBJECT(disp, Sync, s, ret, drv) 131f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 132f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 133f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 134f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 135f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 136f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!disp) { 137f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 138f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 139f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 140f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!disp->Initialized) { 141f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 142f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 143f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 144f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return disp->Driver; 145f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 146f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 147f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 148f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 149f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 150f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 151f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 152f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 153f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 154f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!surf) { 155f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SURFACE, msg); 156f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 157f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 158f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 159f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 160f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 161f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 162f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 163f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 164f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 165f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 166f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 167f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 168f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!context) { 169f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 170f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 171f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 172f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 173f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 174f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 175f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 176f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 177f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 178f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 179f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 180f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 181f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 182f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!conf) { 183f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 184f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 185f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 186f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 187f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 188f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 189f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 1904eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#ifdef EGL_KHR_reusable_sync 1914eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 1924eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 1934eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wustatic INLINE _EGLDriver * 1944eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu_eglCheckSync(_EGLDisplay *disp, _EGLSync *s, const char *msg) 1954eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 1964eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1974eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!drv) 1984eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 1994eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!s) { 2004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglError(EGL_BAD_PARAMETER, msg); 2014eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2024eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu } 2034eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return drv; 2044eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 2054eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2064eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2074eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#endif /* EGL_KHR_reusable_sync */ 2084eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2094eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 210f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#ifdef EGL_MESA_screen_surface 211f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 212f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 213f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 214f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 215f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 216f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 217f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 218f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 219f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!scrn) { 220f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 221f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 222f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 223f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 224f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 225f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 226f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 227f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 228f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 229f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 230f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 231f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 232f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 233f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!m) { 234f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 235f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 236f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 237f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 238f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 239f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 240f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 241f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#endif /* EGL_MESA_screen_surface */ 242f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 243f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 244f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 245655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Lookup and lock a display. 246655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 247655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE _EGLDisplay * 248655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglLockDisplay(EGLDisplay display) 249655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 250655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *dpy = _eglLookupDisplay(display); 251655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (dpy) 252655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&dpy->Mutex); 253655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu return dpy; 254655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 255655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 256655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 257655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 258655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Unlock a display. 259655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 260655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE void 261655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglUnlockDisplay(_EGLDisplay *dpy) 262655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 263655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&dpy->Mutex); 264655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 265655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 266655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 267655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 2686052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the first EGL function that an application calls. 269db5ce8b3843a03c6f83a02a79f033d7e74784dd5Chia-I Wu * It associates a private _EGLDisplay object to the native display. 270adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 2711ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 2724aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglGetDisplay(EGLNativeDisplayType nativeDisplay) 273adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 274f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLPlatformType plat = _eglGetNativePlatform(); 275f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(plat, (void *) nativeDisplay); 276721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 277adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 279adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2806052af172f0241e6678cd16efac0a0f14f40146cBrian Paul/** 2816052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the second EGL function that an application calls. 2826052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * Here we load/initialize the actual hardware driver. 2836052af172f0241e6678cd16efac0a0f14f40146cBrian Paul */ 2841ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 285adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 287655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 2887e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White 2892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 290bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 2912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 292a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (!disp->Initialized) { 293f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!_eglMatchDriver(disp, EGL_FALSE)) 294f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); 2952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 296310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu /* limit to APIs supported by core */ 297a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu disp->ClientAPIs &= _EGL_API_ALL_BITS; 298adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 2992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 3012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 302a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu *major = disp->VersionMajor; 303a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu *minor = disp->VersionMinor; 3042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 306bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3101ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 313655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 316bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 3172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 318a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (disp->Initialized) { 319a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGLDriver *drv = disp->Driver; 320a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu 321ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu drv->API.Terminate(drv, disp); 322a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu /* do not reset disp->Driver */ 323a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu disp->Initialized = EGL_FALSE; 3242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 326bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 3272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 3282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3301ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 333655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 334aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 335b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 336aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 337bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, NULL, drv); 338b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryString(drv, disp, name); 339b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 340bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 341adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 343adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3441ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 3462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 347adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 348655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 349aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 350b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 351aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 352bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 353b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 354b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 355bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 356adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 357adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 358adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3591ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 3612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 362adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 363655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 364aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 365b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 366aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 367bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 368b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 370b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 371bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 374adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3751ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 3772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 378adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 379655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 382b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 3832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 384bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); 385b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 386b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 387bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 389adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 390adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 3922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 3932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 3942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 395655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 3982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 400b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 4012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4026b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_CONTEXT, drv); 4036b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4046b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!config) { 4056b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu /* config may be NULL if surfaceless */ 4066b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_surfaceless_gles1 && 4076b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu !disp->Extensions.KHR_surfaceless_gles2 && 4086b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu !disp->Extensions.KHR_surfaceless_opengl) 4096b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT); 4106b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu } 411b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg 412b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!share && share_list != EGL_NO_CONTEXT) 413bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); 4142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 4164ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (context) ? _eglLinkContext(context) : EGL_NO_CONTEXT; 417b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 418bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 419adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 420adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 421adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4221ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 423adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 424adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 425655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 426aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 427aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 428b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 429aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 430bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 4312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 432b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyContext(drv, disp, context); 433b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 434bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 435adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 436adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 437adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4381ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 4402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 441adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 442655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 4442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 4452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 4462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 447b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 4482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 44917330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp) 450bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 45117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu drv = disp->Driver; 45217330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 45317330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu /* display is allowed to be uninitialized under certain condition */ 45417330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp->Initialized) { 45517330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE || 45617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu ctx != EGL_NO_CONTEXT) 457bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 45817330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu } 4592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 460bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 46117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 4622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 463bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 4646b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!draw_surf || !read_surf) { 4656b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu /* surfaces may be NULL if surfaceless */ 4666b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_surfaceless_gles1 && 4676b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu !disp->Extensions.KHR_surfaceless_gles2 && 4686b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu !disp->Extensions.KHR_surfaceless_opengl) 4696b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4706b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4716b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 4726b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 4736b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4746b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (draw_surf || read_surf) 4756b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_FALSE); 4766b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu } 4772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 478b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 479b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 480bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 481adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 482adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4841ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 4862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 488655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 489aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 490aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 491b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 492aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 493bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 494b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryContext(drv, disp, context, attribute, value); 495b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 496bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 497adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 498adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 499adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5001ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 5024aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativeWindowType window, const EGLint *attrib_list) 503adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 504655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 508b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 510bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 511f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 512f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 5132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 5154ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 516b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 517bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 518adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 519adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 520adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5211ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 5234aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativePixmapType pixmap, const EGLint *attrib_list) 524adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 525655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 529b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 531bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 532f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 533f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE); 5342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 5364ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 537b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 538bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 539adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 540adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 541adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5421ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 5442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 545adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 546655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 550b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 552bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 5532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 5554ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 556b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 557bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 558adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 559adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 560adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5611ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 562adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 563adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 564655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 565aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 566aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 567b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 568aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 569bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 5702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 571b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroySurface(drv, disp, surf); 572b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 573bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 574adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 575adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5761ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 5782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 579adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 580655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 581aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 582aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 583b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 584aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 585bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 586b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); 587b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 588bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 589adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 590adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 5932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 594adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 595655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 596aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 597aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 598b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 599aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 600bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 601b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 602b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 603bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 604adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 605adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 606adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 608adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 610655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 611aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 612aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 613b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 614aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 615bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 616b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.BindTexImage(drv, disp, surf, buffer); 617b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 618bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 619adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 620adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 621adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6221ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 623adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 624adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 625655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 626aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 627aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 628b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 629aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 630bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 631b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); 632b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 633bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 634adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 635adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 636adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6371ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 638adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 639adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 640655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 64157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 64257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLSurface *surf; 643aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 644b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 645aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 646bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 64757da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 648d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 649d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu ctx->Resource.Display != disp) 650bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 65157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 65257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu surf = ctx->DrawSurface; 653d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetSurfaceHandle(surf) == EGL_NO_SURFACE) 654bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 65557da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 656b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapInterval(drv, disp, surf, interval); 657b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 658bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 659adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 660adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 661adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6621ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 664adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 665bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 666655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 667aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 668aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 669b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 670aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 671bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 672bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 673bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 674d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 675d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu surf != ctx->DrawSurface) 676bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 677b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 678b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapBuffers(drv, disp, surf); 679bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 680bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 681adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 682adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 683adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6841ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6854aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 686adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 687655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 688aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 689aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 690b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 691aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 692bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 693f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 694f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_FALSE); 695b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyBuffers(drv, disp, surf, target); 696b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 697bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 698adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 699adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 700adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7011ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 7026c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitClient(void) 703adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7046c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7056c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 7062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 707b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 7082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7096c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 710bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 7112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 712ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu disp = ctx->Resource.Display; 713655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 714655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 715655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu /* let bad current context imply bad current surface */ 716d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 717d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 718bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 719b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 720b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 721a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 723b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitClient(drv, disp, ctx); 7246c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 725bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 7266c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu} 7276c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7296c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WuEGLBoolean EGLAPIENTRY 7306c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitGL(void) 7316c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu{ 7326c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#ifdef EGL_VERSION_1_2 7336c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 7346c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 7356c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint es_index = _eglConvertApiToIndex(EGL_OPENGL_ES_API); 7366c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLBoolean ret; 7376c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7386c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (api_index != es_index && _eglIsCurrentThreadDummy()) 739bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 7406c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7416c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = es_index; 7426c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu ret = eglWaitClient(); 7436c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = api_index; 7446c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return ret; 7456c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#else 7466c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return eglWaitClient(); 7476c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#endif 748adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 749adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 750adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7511ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 752adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 753adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7546c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7556c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 7562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 757b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 7582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7596c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 760bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 761b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 762655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu disp = ctx->Resource.Display; 763655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 764655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 7656c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu /* let bad current context imply bad current surface */ 766d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 767d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 768bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 769b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 770b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 771a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 773b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitNative(drv, disp, engine); 7742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 775bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 776adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 777adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 778adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7791ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 780adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 781adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 782a1717970e78d897f527273278bf1346cc86a5741Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 783b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLDisplay ret; 784b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 785b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (ctx) ? _eglGetDisplayHandle(ctx->Resource.Display) : EGL_NO_DISPLAY; 786b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 787bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 788adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 789adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 790adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 792adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 793adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 794adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 795b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 796b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 797b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetContextHandle(ctx); 798b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 799bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 800adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 801adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 802adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8031ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 804adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 805adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 80661906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 807b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLint err = EGL_SUCCESS; 80861906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLSurface *surf; 809b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 81061906631202af855d0742586956ff9f34522a525Chia-I Wu 81161906631202af855d0742586956ff9f34522a525Chia-I Wu if (!ctx) 812bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_NO_SURFACE); 81361906631202af855d0742586956ff9f34522a525Chia-I Wu 81461906631202af855d0742586956ff9f34522a525Chia-I Wu switch (readdraw) { 81561906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_DRAW: 81661906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->DrawSurface; 81761906631202af855d0742586956ff9f34522a525Chia-I Wu break; 81861906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_READ: 81961906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->ReadSurface; 82061906631202af855d0742586956ff9f34522a525Chia-I Wu break; 82161906631202af855d0742586956ff9f34522a525Chia-I Wu default: 82261906631202af855d0742586956ff9f34522a525Chia-I Wu surf = NULL; 823b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu err = EGL_BAD_PARAMETER; 82461906631202af855d0742586956ff9f34522a525Chia-I Wu break; 82561906631202af855d0742586956ff9f34522a525Chia-I Wu } 82661906631202af855d0742586956ff9f34522a525Chia-I Wu 827b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetSurfaceHandle(surf); 828b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 829bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, err, ret); 830adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 831adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 832adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8331ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 834adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 835adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 83648822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 83748822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 83875da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 83975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 840adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 841adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 842adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 843adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 84495f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I Wu__eglMustCastToProperFunctionPointerType EGLAPIENTRY 84595f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I WueglGetProcAddress(const char *procname) 846adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8479061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu static const struct { 848adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 849adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 8509061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu } egl_functions[] = { 851f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu /* core functions should not be queryable, but, well... */ 852f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef _EGL_GET_CORE_ADDRESSES 853f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu /* alphabetical order */ 854f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglBindAPI", (_EGLProc) eglBindAPI }, 855f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 856f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 857f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 858f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateContext", (_EGLProc) eglCreateContext }, 859f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer }, 860f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 861f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 862f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 863f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 864f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 865f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 866f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 867f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 868f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 869f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 870f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 871f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetError", (_EGLProc) eglGetError }, 872f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 873f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglInitialize", (_EGLProc) eglInitialize }, 874f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 875f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryAPI", (_EGLProc) eglQueryAPI }, 876f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryContext", (_EGLProc) eglQueryContext }, 877f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryString", (_EGLProc) eglQueryString }, 878f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 879f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 880f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglReleaseThread", (_EGLProc) eglReleaseThread }, 881f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 882f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 883f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 884f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglTerminate", (_EGLProc) eglTerminate }, 885f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitClient", (_EGLProc) eglWaitClient }, 886f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitGL", (_EGLProc) eglWaitGL }, 887f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitNative", (_EGLProc) eglWaitNative }, 888f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif /* _EGL_GET_CORE_ADDRESSES */ 889b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 8907012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 8917012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 8927012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 8931c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 8947012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 8957012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 89648822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 8977012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 8987012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 8997012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 9007012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 9017012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 902b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 90378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 90478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu { "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA }, 90578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif 906a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifdef EGL_KHR_image_base 907a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR }, 908a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR }, 909a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 91052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 91152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg { "eglSwapBuffersRegionNOK", (_EGLProc) eglSwapBuffersRegionNOK }, 91252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif 913b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#ifdef EGL_MESA_drm_image 914b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg { "eglCreateDRMImageMESA", (_EGLProc) eglCreateDRMImageMESA }, 915b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg { "eglExportDRMImageMESA", (_EGLProc) eglExportDRMImageMESA }, 916b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#endif 917f274dfaca4b53bae92dfe6a72c1890c381d84746Kristian Høgsberg#ifdef EGL_WL_bind_wayland_display 9186b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke { "eglBindWaylandDisplayWL", (_EGLProc) eglBindWaylandDisplayWL }, 9196b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke { "eglUnbindWaylandDisplayWL", (_EGLProc) eglUnbindWaylandDisplayWL }, 9206b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#endif 921adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 922adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 923adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 924b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLProc ret; 9259061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 9269061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (!procname) 927bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, NULL); 928b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 929b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = NULL; 9309061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strncmp(procname, "egl", 3) == 0) { 9319061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu for (i = 0; egl_functions[i].name; i++) { 932b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (strcmp(egl_functions[i].name, procname) == 0) { 933b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = egl_functions[i].function; 934b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu break; 935b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 936adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 937adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 938f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!ret) 939f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu ret = _eglGetDriverProc(procname); 940e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 941bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 942adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 943adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 944adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9459061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#ifdef EGL_MESA_screen_surface 9469061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 9479061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 948adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 949adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 950adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 951adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 953c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 954adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 955adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 956adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 957655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 958aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 959aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 960b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 961aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 962bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 963b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 964b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu modes, modes_size, num_modes); 965b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 966bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 967adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 968adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 969adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9701ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 9722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 973adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 974655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 975aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 976aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 977b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 978aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 979bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 980b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 981b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 982bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 983adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 984adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 985adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9861ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 9882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 989adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 990655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 991aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 992aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 993b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 994aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 995bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, EGL_FALSE, drv); 996b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 997b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 998bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 999adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1000adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1001adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10021ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 10032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 10042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 10052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1006655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 10082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 10092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1010b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1012bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, source_context, EGL_FALSE, drv); 1013b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!dest_context) 1014bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 10152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1016b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyContextMESA(drv, disp, 1017b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu source_context, dest_context, mask); 1018b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1019bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10201c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 10211c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 10221c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 1023c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 10252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 1026adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1027655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1028aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1029b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1030aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1031bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1032b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetScreensMESA(drv, disp, screens, max_screens, num_screens); 1033b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1034bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1035adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1036adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1037adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1038c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 10392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 10402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 1041adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1042655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 10442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 10452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1046b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 10472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1048bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 10492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 10514ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1052b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1053bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1054adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1055adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1056adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1057c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 10592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 1060adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1061655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 10642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 10652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1066b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1068bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 10692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 1070bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 10712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 1072bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); 1073b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1074b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 10752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1076bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1077adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1078adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1079adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1080c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10817012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 1082adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1083655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1084aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1085aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1086b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1087aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1088bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1089b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 1090b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1091bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10927012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 10937012d01d888d482f2c6ad1180231a482026d213aJon Smirl 10947012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1095c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 10972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 10987012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1099655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1100aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1101aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1102b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1103aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1104bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1105b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 1106b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1107bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1110adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1111c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 11122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 11132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 1114adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1115655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 11162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 11172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 11182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1119b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 11202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1121bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1122b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); 1123b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && surface) 11242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 1125b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1126bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1127adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1128adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1130c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 11317012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 1132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1133655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 11342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 11352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 11362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 1137b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 11382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1139bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1140b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); 1141b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && mode) 11422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 11432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1144bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1147adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1148c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledconst char * EGLAPIENTRY 11497012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 11507012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1151655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1152aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1153aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1154b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 1155aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1156bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, NULL, drv); 1157b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryModeStringMESA(drv, disp, m); 1158b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1159bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 11607012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 11617012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11627012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11639061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#endif /* EGL_MESA_screen_surface */ 11649061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 11659061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 116678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 116778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 116878d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WuEGLDisplay EGLAPIENTRY 116978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WueglGetDRMDisplayMESA(int fd) 117078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu{ 117178d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(_EGL_PLATFORM_DRM, (void *) fd); 117278d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu return _eglGetDisplayHandle(dpy); 117378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu} 117478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 117578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif /* EGL_MESA_drm_display */ 117678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 1177b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 1178b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 1179b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 1180b2006a40eb22899d38cd31691640555228e36975Brian Paul 1181b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 1182b2006a40eb22899d38cd31691640555228e36975Brian Paul 1183d5078b94323241a6482f54797756116b1c864327Brian Paul 1184d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1185d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 1186d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 1187d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 1188d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 1189d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 1190d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 1191d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 1192d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 1193d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 1194d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1195c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1196b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 1197b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1198b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1199b2006a40eb22899d38cd31691640555228e36975Brian Paul 120075da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 1201bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 120275da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 120321b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 1204bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, EGL_FALSE); 120521b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 1206310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 1207b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1208bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1209b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1210b2006a40eb22899d38cd31691640555228e36975Brian Paul 1211b2006a40eb22899d38cd31691640555228e36975Brian Paul 1212d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1213d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 1214d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1215c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLenum EGLAPIENTRY 1216d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 1217d5078b94323241a6482f54797756116b1c864327Brian Paul{ 1218d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1219b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLenum ret; 1220b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1221b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 1222b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglConvertApiFromIndex(t->CurrentAPIIndex); 1223b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1224bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 1225d5078b94323241a6482f54797756116b1c864327Brian Paul} 1226d5078b94323241a6482f54797756116b1c864327Brian Paul 1227d5078b94323241a6482f54797756116b1c864327Brian Paul 1228c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 1229b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 1230b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 1231b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 1232b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1233655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 12342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 12352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 12362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1237b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 12382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1239bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 12402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 12412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 12422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 12434ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1244b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1245bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1246b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1247b2006a40eb22899d38cd31691640555228e36975Brian Paul 1248b2006a40eb22899d38cd31691640555228e36975Brian Paul 1249c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1250b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 1251b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 125211cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu /* unbind current contexts */ 12532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 125411cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 125545ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 125611cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu EGLint i; 125711cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 125811cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu for (i = 0; i < _EGL_API_NUM_APIS; i++) { 125911cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLContext *ctx = t->CurrentContexts[i]; 126011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu if (ctx) { 126111cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLDisplay *disp = ctx->Resource.Display; 1262655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDriver *drv; 1263655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 126445ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = i; 1265655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 1266655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 1267655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu drv = disp->Driver; 126817330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 1269655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&disp->Mutex); 127011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu } 12712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 127245ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu 127345ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = api_index; 1274b2006a40eb22899d38cd31691640555228e36975Brian Paul } 12752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 127675da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 1277b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1278bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1279b2006a40eb22899d38cd31691640555228e36975Brian Paul} 12807012d01d888d482f2c6ad1180231a482026d213aJon Smirl 12817012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1282b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 1283a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1284a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1285a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifdef EGL_KHR_image_base 1286a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1287a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1288c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLImageKHR EGLAPIENTRY 1289a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WueglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, 1290a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu EGLClientBuffer buffer, const EGLint *attr_list) 1291a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1292655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1293a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 1294a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1295a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img; 1296b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLImageKHR ret; 1297a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1298bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 12996b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_image_base) 13006b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 1301b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 1302bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); 1303a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1304a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu img = drv->API.CreateImageKHR(drv, 1305a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu disp, context, target, buffer, attr_list); 13064ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1307b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1308bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1309a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1310a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1311a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1312c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1313b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) 1314a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1315655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1316a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img = _eglLookupImage(image, disp); 1317a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1318b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1319a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1320bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 13216b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_image_base) 13226b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_FALSE); 1323a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!img) 1324bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1325a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1326a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _eglUnlinkImage(img); 1327b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyImageKHR(drv, disp, img); 1328b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1329bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1330a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1331a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1332a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1333a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 133452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 133552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 13364eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#ifdef EGL_KHR_reusable_sync 13374eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13384eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13394eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLSyncKHR EGLAPIENTRY 13404eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) 13414eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13424eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13434eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13444eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *sync; 13454eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLSyncKHR ret; 13464eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13474eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv); 13486b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_reusable_sync) 13496b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_SYNC_KHR); 13504eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13514eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list); 13524ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (sync) ? _eglLinkSync(sync) : EGL_NO_SYNC_KHR; 13534eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13544eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13554eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13564eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13574eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13584eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13594eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) 13604eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13614eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13624eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13634eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13644eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 13654eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13664eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13676b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 13686b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 13694eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglUnlinkSync(s); 13704eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.DestroySyncKHR(drv, disp, s); 13714eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13724eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13734eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13744eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13754eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13764eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLint EGLAPIENTRY 13774eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) 13784eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13794eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13804eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13814eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13824eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLint ret; 13834eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13844eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13856b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 13864eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.ClientWaitSyncKHR(drv, disp, s, flags, timeout); 13874eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13884eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13894eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13904eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13914eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13924eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13934eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) 13944eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13954eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13964eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13974eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13984eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 13994eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 14016b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 14024eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.SignalSyncKHR(drv, disp, s, mode); 14034eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14044eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14054eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14064eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14074eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14084eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 14094eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value) 14104eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 14114eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 14124eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 14134eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 14144eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 14154eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14164eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 14176b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 14184eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value); 14194eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14204eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14214eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14224eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14234eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14244eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#endif /* EGL_KHR_reusable_sync */ 14254eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14264eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 142752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 142852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 1429c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 143052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergeglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, 143152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLint numRects, const EGLint *rects) 143252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg{ 143352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLContext *ctx = _eglGetCurrentContext(); 143452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 143552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLSurface *surf = _eglLookupSurface(surface, disp); 143652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDriver *drv; 143752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLBoolean ret; 143852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 143952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 144052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 14416b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.NOK_swap_region) 14426b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_FALSE); 14436b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 144452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg /* surface must be bound to current context in EGL 1.4 */ 1445d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 1446d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu surf != ctx->DrawSurface) 144752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 144852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 14496b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); 145052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 145152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 145252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg} 145352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 145452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif /* EGL_NOK_swap_region */ 1455b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1456b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1457b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#ifdef EGL_MESA_drm_image 1458b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1459b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergEGLImageKHR EGLAPIENTRY 1460b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergeglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list) 1461b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg{ 1462b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1463b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDriver *drv; 1464b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLImage *img; 1465b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLImageKHR ret; 1466b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1467b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 14686b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.MESA_drm_image) 14696b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 1470b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1471b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg img = drv->API.CreateDRMImageMESA(drv, disp, attr_list); 14724ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1473b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1474b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1475b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg} 1476b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1477b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergEGLBoolean EGLAPIENTRY 1478b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergeglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, 1479b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLint *name, EGLint *handle, EGLint *stride) 1480b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg{ 1481b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1482b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLImage *img = _eglLookupImage(image, disp); 1483b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDriver *drv; 1484b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLBoolean ret; 1485b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1486b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 14876b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.MESA_drm_image); 14886b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 1489b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg if (!img) 1490b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1491b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1492b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg ret = drv->API.ExportDRMImageMESA(drv, disp, img, name, handle, stride); 1493b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1494b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1495b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg} 1496b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1497b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#endif 14986b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 14996b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#ifdef EGL_WL_bind_wayland_display 15006b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzkestruct wl_display; 15016b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15026b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeEGLBoolean EGLAPIENTRY 15036b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeeglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 15046b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke{ 15056b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDisplay *disp = _eglLockDisplay(dpy); 15066b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDriver *drv; 15076b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke EGLBoolean ret; 15086b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15096b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 15106b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke assert(disp->Extensions.WL_bind_wayland_display); 15116b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15126b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke if (!display) 15136b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 15146b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15156b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke ret = drv->API.BindWaylandDisplayWL(drv, disp, display); 15166b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15176b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_EVAL(disp, ret); 15186b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke} 15196b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15206b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeEGLBoolean EGLAPIENTRY 15216b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeeglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 15226b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke{ 15236b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDisplay *disp = _eglLockDisplay(dpy); 15246b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDriver *drv; 15256b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke EGLBoolean ret; 15266b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15276b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 15286b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke assert(disp->Extensions.WL_bind_wayland_display); 15296b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15306b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke if (!display) 15316b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 15326b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15336b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke ret = drv->API.UnbindWaylandDisplayWL(drv, disp, display); 15346b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15356b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_EVAL(disp, ret); 15366b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke} 15376b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#endif 1538