eglapi.c revision 4eebea74a81ec5fbacf2347ea88cac137ddd4d69
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 601e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu#include "eglstring.h" 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h" 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h" 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 6494cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu#include "eglcurrent.h" 65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h" 66adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h" 672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglconfig.h" 682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglscreen.h" 692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglmode.h" 70a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#include "eglimage.h" 714eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#include "eglsync.h" 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 75f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * Macros to help return an API entrypoint. 76655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * 77655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * These macros will unlock the display and record the error code. 78f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 79bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_ERROR(disp, err, ret) \ 80bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 81655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (disp) \ 82655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockDisplay(disp); \ 83f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu /* EGL error codes are non-zero */ \ 84f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (err) \ 85f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(err, __FUNCTION__); \ 86bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return ret; \ 87bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 88bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 89bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_SUCCESS(disp, ret) \ 90bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_SUCCESS, ret) 91bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 92b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu/* record EGL_SUCCESS only when ret evaluates to true */ 93bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_EVAL(disp, ret) \ 94bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, (ret) ? EGL_SUCCESS : 0, ret) 95f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 96f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 97bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu/* 98f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * A bunch of macros and checks to simplify error checking. 99f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 100bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 101bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_DISPLAY(disp, ret, drv) \ 102bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 103bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); \ 104bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) \ 105bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 106bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 107bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 108bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_OBJECT(disp, type, obj, ret, drv) \ 109bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 110bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheck ## type(disp, obj, __FUNCTION__); \ 111bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) \ 112bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 113bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 114bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 115bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SURFACE(disp, surf, ret, drv) \ 116bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Surface, surf, ret, drv) 117bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 118bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONTEXT(disp, context, ret, drv) \ 119bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Context, context, ret, drv) 120bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 121bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONFIG(disp, conf, ret, drv) \ 122bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Config, conf, ret, drv) 123bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 124bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SCREEN(disp, scrn, ret, drv) \ 125bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Screen, scrn, ret, drv) 126bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 127bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_MODE(disp, m, ret, drv) \ 128bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Mode, m, ret, drv) 129bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1304eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#define _EGL_CHECK_SYNC(disp, s, ret, drv) \ 1314eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_OBJECT(disp, Sync, s, ret, drv) 132f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 133f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 134f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 135f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 136f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 137f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!disp) { 138f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 139f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 140f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 141f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!disp->Initialized) { 142f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 143f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 144f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 145f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return disp->Driver; 146f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 147f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 148f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 149f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 150f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 151f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 152f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 153f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 154f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 155f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!surf) { 156f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SURFACE, msg); 157f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 158f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 159f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 160f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 161f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 162f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 163f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 164f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 165f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 166f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 167f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 168f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 169f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!context) { 170f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 171f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 172f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 173f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 174f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 175f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 176f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 177f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 178f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 179f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 180f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 181f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 182f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 183f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!conf) { 184f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 185f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 186f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 187f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 188f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 189f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 190f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 1914eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#ifdef EGL_KHR_reusable_sync 1924eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 1934eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 1944eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wustatic INLINE _EGLDriver * 1954eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu_eglCheckSync(_EGLDisplay *disp, _EGLSync *s, const char *msg) 1964eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 1974eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 1984eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!drv) 1994eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!s) { 2014eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglError(EGL_BAD_PARAMETER, msg); 2024eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2034eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu } 2044eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return drv; 2054eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 2064eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2074eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2084eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#endif /* EGL_KHR_reusable_sync */ 2094eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2104eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 211f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#ifdef EGL_MESA_screen_surface 212f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 213f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 214f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 215f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 216f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 217f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 218f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 219f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 220f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!scrn) { 221f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 222f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 223f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 224f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 225f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 226f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 227f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 228f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 229f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 230f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 231f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 232f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 233f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 234f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!m) { 235f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 236f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 237f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 238f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 239f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 240f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 241f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 242f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#endif /* EGL_MESA_screen_surface */ 243f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 244f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 245f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 246655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Lookup and lock a display. 247655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 248655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE _EGLDisplay * 249655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglLockDisplay(EGLDisplay display) 250655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 251655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *dpy = _eglLookupDisplay(display); 252655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (dpy) 253655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&dpy->Mutex); 254655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu return dpy; 255655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 256655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 257655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 258655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 259655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Unlock a display. 260655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 261655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE void 262655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglUnlockDisplay(_EGLDisplay *dpy) 263655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 264655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&dpy->Mutex); 265655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 266655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 267655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 268655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 2696052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the first EGL function that an application calls. 270db5ce8b3843a03c6f83a02a79f033d7e74784dd5Chia-I Wu * It associates a private _EGLDisplay object to the native display. 271adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 2721ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 2734aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglGetDisplay(EGLNativeDisplayType nativeDisplay) 274adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 275f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLPlatformType plat = _eglGetNativePlatform(); 276f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(plat, (void *) nativeDisplay); 277721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 279adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 280adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2816052af172f0241e6678cd16efac0a0f14f40146cBrian Paul/** 2826052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the second EGL function that an application calls. 2836052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * Here we load/initialize the actual hardware driver. 2846052af172f0241e6678cd16efac0a0f14f40146cBrian Paul */ 2851ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 286adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 288655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 2897e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White 2902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 291bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 2922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 293a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (!disp->Initialized) { 294f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!_eglMatchDriver(disp, EGL_FALSE)) 295f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); 2962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 297f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu _eglsnprintf(disp->Version, sizeof(disp->Version), "%d.%d (%s)", 298f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu disp->APImajor, disp->APIminor, disp->Driver->Name); 299310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu /* limit to APIs supported by core */ 300310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu disp->ClientAPIsMask &= _EGL_API_ALL_BITS; 301adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 3022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 3042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 305f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu *major = disp->APImajor; 306f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu *minor = disp->APIminor; 3072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 309bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3131ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 314adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 316655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 319bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 3202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 321a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (disp->Initialized) { 322a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGLDriver *drv = disp->Driver; 323a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu 324ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu drv->API.Terminate(drv, disp); 325a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu /* do not reset disp->Driver */ 326a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu disp->Initialized = EGL_FALSE; 3272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 329bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 3302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 3312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3331ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 334adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 336655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 337aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 338b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 339aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 340bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, NULL, drv); 341b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryString(drv, disp, name); 342b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 343bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 344adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 345adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 346adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3471ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 3492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 350adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 351655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 352aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 353b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 354aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 355bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 356b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 357b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 358bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 359adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 360adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 361adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3621ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 3642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 365adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 366655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 367aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 368b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 369aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 370bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 371b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 373b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 374bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 375adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 376adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3781ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 3802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 382655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 385b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 3862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 387bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); 388b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 389b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 390bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 391adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 393adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3941ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 3952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 3962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 3972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 398655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 4012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 403b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 4042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 405b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg if (config) 406b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg _EGL_CHECK_CONFIG(disp, conf, EGL_NO_CONTEXT, drv); 407b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg else 408b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg drv = _eglCheckDisplay(disp, __FUNCTION__); 409b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg 410b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!share && share_list != EGL_NO_CONTEXT) 411bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); 4122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 414b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (context) ? _eglLinkContext(context, disp) : EGL_NO_CONTEXT; 415b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 416bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 417adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 418adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 419adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4201ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 421adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 422adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 423655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 424aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 425aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 426b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 427aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 428bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 4292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 430b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyContext(drv, disp, context); 431b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 432bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 433adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 434adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 435adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4361ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 4382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 439adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 440655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 4422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 4432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 4442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 445b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 4462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 44717330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp) 448bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 44917330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu drv = disp->Driver; 45017330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 45117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu /* display is allowed to be uninitialized under certain condition */ 45217330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp->Initialized) { 45317330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE || 45417330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu ctx != EGL_NO_CONTEXT) 455bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 45617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu } 4572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 458bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 45917330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 4602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 461bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 4622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 4632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 464bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 466b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 467b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 468bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 469adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 470adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 471adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4721ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 4742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 475adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 476655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 477aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 478aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 479b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 480aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 481bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 482b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryContext(drv, disp, context, attribute, value); 483b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 484bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 486adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 487adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4881ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 4904aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativeWindowType window, const EGLint *attrib_list) 491adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 492655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 496b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 4972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 498bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 499f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 500f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 5012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 503b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 504b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 505bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 506adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 507adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 508adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5091ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 5114aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativePixmapType pixmap, const EGLint *attrib_list) 512adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 513655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 517b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 519bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 520f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 521f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE); 5222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 524b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 525b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 526bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 527adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 528adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 529adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5301ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 5322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 533adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 534655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 538b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 540bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 5412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 543b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 544b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 545bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 546adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 547adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 548adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 550adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 551adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 552655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 553aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 554aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 555b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 556aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 557bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 5582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 559b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroySurface(drv, disp, surf); 560b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 561bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 562adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 563adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5641ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 5662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 567adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 568655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 569aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 570aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 571b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 572aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 573bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 574b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); 575b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 576bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 577adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 578adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5791ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 5812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 582adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 583655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 584aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 585aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 586b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 587aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 588bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 589b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 590b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 591bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 592adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 593adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 594adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5951ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 596adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 597adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 598655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 599aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 600aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 601b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 602aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 603bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 604b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.BindTexImage(drv, disp, surf, buffer); 605b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 606bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 607adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 608adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6101ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 611adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 612adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 613655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 614aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 615aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 616b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 617aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 618bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 619b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); 620b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 621bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 622adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 623adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 624adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6251ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 626adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 627adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 628655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 62957da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 63057da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLSurface *surf; 631aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 632b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 633aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 634bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 63557da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 636ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu if (!ctx || !_eglIsContextLinked(ctx) || ctx->Resource.Display != disp) 637bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 63857da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 63957da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu surf = ctx->DrawSurface; 64057da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu if (!_eglIsSurfaceLinked(surf)) 641bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 64257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 643b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapInterval(drv, disp, surf, interval); 644b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 645bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 646adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 647adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 648adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 651adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 652bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 653655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 654aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 655aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 656b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 657aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 658bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 659bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 660bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 661bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface) 662bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 663b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 664b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapBuffers(drv, disp, surf); 665bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 666bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 667adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 668adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 669adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6701ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6714aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 672adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 673655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 674aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 675aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 676b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 677aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 678bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 679f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 680f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_FALSE); 681b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyBuffers(drv, disp, surf, target); 682b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 683bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 684adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 685adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 686adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6886c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitClient(void) 689adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6906c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 6916c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 6922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 693b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 6942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 6956c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 696bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 6972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 698ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu disp = ctx->Resource.Display; 699655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 700655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 701655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu /* let bad current context imply bad current surface */ 702655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!_eglIsContextLinked(ctx) || !_eglIsSurfaceLinked(ctx->DrawSurface)) 703bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 704b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 705b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 706a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 708b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitClient(drv, disp, ctx); 7096c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 710bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 7116c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu} 7126c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7146c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WuEGLBoolean EGLAPIENTRY 7156c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitGL(void) 7166c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu{ 7176c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#ifdef EGL_VERSION_1_2 7186c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 7196c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 7206c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint es_index = _eglConvertApiToIndex(EGL_OPENGL_ES_API); 7216c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLBoolean ret; 7226c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7236c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (api_index != es_index && _eglIsCurrentThreadDummy()) 724bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 7256c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7266c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = es_index; 7276c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu ret = eglWaitClient(); 7286c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = api_index; 7296c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return ret; 7306c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#else 7316c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return eglWaitClient(); 7326c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#endif 733adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 734adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 735adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7361ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 737adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 738adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7396c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7406c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 7412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 742b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 7432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7446c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 745bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 746b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 747655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu disp = ctx->Resource.Display; 748655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 749655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 7506c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu /* let bad current context imply bad current surface */ 7516c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!_eglIsContextLinked(ctx) || !_eglIsSurfaceLinked(ctx->DrawSurface)) 752bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 753b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 754b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 755a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 757b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitNative(drv, disp, engine); 7582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 759bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 760adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 761adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 762adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7631ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 764adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 765adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 766a1717970e78d897f527273278bf1346cc86a5741Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 767b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLDisplay ret; 768b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 769b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (ctx) ? _eglGetDisplayHandle(ctx->Resource.Display) : EGL_NO_DISPLAY; 770b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 771bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 772adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 773adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 774adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7751ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 776adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 777adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 778adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 779b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 780b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 781b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetContextHandle(ctx); 782b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 783bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 784adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 785adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 786adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 788adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 789adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 79061906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 791b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLint err = EGL_SUCCESS; 79261906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLSurface *surf; 793b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 79461906631202af855d0742586956ff9f34522a525Chia-I Wu 79561906631202af855d0742586956ff9f34522a525Chia-I Wu if (!ctx) 796bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_NO_SURFACE); 79761906631202af855d0742586956ff9f34522a525Chia-I Wu 79861906631202af855d0742586956ff9f34522a525Chia-I Wu switch (readdraw) { 79961906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_DRAW: 80061906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->DrawSurface; 80161906631202af855d0742586956ff9f34522a525Chia-I Wu break; 80261906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_READ: 80361906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->ReadSurface; 80461906631202af855d0742586956ff9f34522a525Chia-I Wu break; 80561906631202af855d0742586956ff9f34522a525Chia-I Wu default: 80661906631202af855d0742586956ff9f34522a525Chia-I Wu surf = NULL; 807b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu err = EGL_BAD_PARAMETER; 80861906631202af855d0742586956ff9f34522a525Chia-I Wu break; 80961906631202af855d0742586956ff9f34522a525Chia-I Wu } 81061906631202af855d0742586956ff9f34522a525Chia-I Wu 811b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetSurfaceHandle(surf); 812b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 813bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, err, ret); 814adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 815adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 816adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8171ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 818adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 819adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 82048822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 82148822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 82275da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 82375da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 824adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 825adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 826adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 827adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 82895f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I Wu__eglMustCastToProperFunctionPointerType EGLAPIENTRY 82995f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I WueglGetProcAddress(const char *procname) 830adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8319061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu static const struct { 832adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 833adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 8349061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu } egl_functions[] = { 8359061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu /* extensions only */ 836b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 8377012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 8387012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 8397012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 8401c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 8417012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 8427012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 84348822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 8447012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 8457012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 8467012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 8477012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 8487012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 849b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 85078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 85178d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu { "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA }, 85278d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif 853a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifdef EGL_KHR_image_base 854a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR }, 855a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR }, 856a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 85752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 85852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg { "eglSwapBuffersRegionNOK", (_EGLProc) eglSwapBuffersRegionNOK }, 85952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif 860adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 861adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 862adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 863b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLProc ret; 8649061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 8659061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (!procname) 866bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, NULL); 867b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 868b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = NULL; 8699061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strncmp(procname, "egl", 3) == 0) { 8709061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu for (i = 0; egl_functions[i].name; i++) { 871b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (strcmp(egl_functions[i].name, procname) == 0) { 872b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = egl_functions[i].function; 873b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu break; 874b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 875adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 876adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 877f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!ret) 878f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu ret = _eglGetDriverProc(procname); 879e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 880bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 881adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 882adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 883adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8849061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#ifdef EGL_MESA_screen_surface 8859061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 8869061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 887adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 888adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 889adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 890adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 892c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 893adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 894adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 895adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 896655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 897aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 898aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 899b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 900aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 901bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 902b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 903b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu modes, modes_size, num_modes); 904b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 905bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 906adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 907adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 908adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9091ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 9112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 912adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 913655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 914aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 915aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 916b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 917aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 918bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 919b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 920b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 921bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 922adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 923adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 924adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9251ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 9272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 928adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 929655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 930aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 931aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 932b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 933aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 934bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, EGL_FALSE, drv); 935b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 936b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 937bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 938adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 939adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 940adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9411ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 9432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 9442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 945655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 9462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 9472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 9482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 949b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 9502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 951bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, source_context, EGL_FALSE, drv); 952b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!dest_context) 953bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 9542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 955b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyContextMESA(drv, disp, 956b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu source_context, dest_context, mask); 957b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 958bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 9591c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 9601c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 9611c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 962c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 9632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 9642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 965adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 966655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 967aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 968b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 969aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 970bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 971b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetScreensMESA(drv, disp, screens, max_screens, num_screens); 972b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 973bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 974adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 975adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 976adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 977c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 9782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 9792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 980adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 981655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 9822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 9832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 985b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 9862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 987bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 9882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 990b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 991b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 992bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 993adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 994adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 995adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 996c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 9972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 9982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 999adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1000655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 10032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 10042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1005b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1007bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 10082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 1009bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 10102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 1011bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); 1012b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1013b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 10142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1015bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1016adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1017adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1018adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1019c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10207012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 1021adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1022655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1023aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1024aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1025b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1026aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1027bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1028b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 1029b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1030bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10317012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 10327012d01d888d482f2c6ad1180231a482026d213aJon Smirl 10337012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1034c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 10362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 10377012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1038655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1039aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1040aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1041b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1042aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1043bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1044b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 1045b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1046bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1047adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1048adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1049adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1050c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 10522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 1053adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1054655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 10572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1058b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1060bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1061b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); 1062b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && surface) 10632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 1064b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1065bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1066adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1067adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1068adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1069c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10707012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 1071adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1072655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 10752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 1076b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1078bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1079b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); 1080b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && mode) 10812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 10822f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1083bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1084adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1085adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1086adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1087c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledconst char * EGLAPIENTRY 10887012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 10897012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1090655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1091aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1092aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1093b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 1094aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1095bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, NULL, drv); 1096b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryModeStringMESA(drv, disp, m); 1097b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1098bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10997012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 11007012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11017012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11029061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#endif /* EGL_MESA_screen_surface */ 11039061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 11049061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 110578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 110678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 110778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WuEGLDisplay EGLAPIENTRY 110878d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WueglGetDRMDisplayMESA(int fd) 110978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu{ 111078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(_EGL_PLATFORM_DRM, (void *) fd); 111178d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu return _eglGetDisplayHandle(dpy); 111278d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu} 111378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 111478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif /* EGL_MESA_drm_display */ 111578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 1116b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 1117b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 1118b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 1119b2006a40eb22899d38cd31691640555228e36975Brian Paul 1120b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 1121b2006a40eb22899d38cd31691640555228e36975Brian Paul 1122d5078b94323241a6482f54797756116b1c864327Brian Paul 1123d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1124d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 1125d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 1126d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 1127d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 1128d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 1129d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 1130d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 1131d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 1132d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 1133d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1134c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1135b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 1136b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1137b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1138b2006a40eb22899d38cd31691640555228e36975Brian Paul 113975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 1140bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 114175da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 114221b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 1143bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, EGL_FALSE); 114421b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 1145310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 1146b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1147bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1148b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1149b2006a40eb22899d38cd31691640555228e36975Brian Paul 1150b2006a40eb22899d38cd31691640555228e36975Brian Paul 1151d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1152d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 1153d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1154c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLenum EGLAPIENTRY 1155d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 1156d5078b94323241a6482f54797756116b1c864327Brian Paul{ 1157d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1158b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLenum ret; 1159b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1160b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 1161b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglConvertApiFromIndex(t->CurrentAPIIndex); 1162b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1163bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 1164d5078b94323241a6482f54797756116b1c864327Brian Paul} 1165d5078b94323241a6482f54797756116b1c864327Brian Paul 1166d5078b94323241a6482f54797756116b1c864327Brian Paul 1167c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 1168b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 1169b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 1170b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 1171b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1172655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 11732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 11742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 11752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1176b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 11772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1178bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 11792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 11802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 11812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 1182b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 1183b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1184bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1185b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1186b2006a40eb22899d38cd31691640555228e36975Brian Paul 1187b2006a40eb22899d38cd31691640555228e36975Brian Paul 1188c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1189b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 1190b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 119111cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu /* unbind current contexts */ 11922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 119311cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 119445ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 119511cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu EGLint i; 119611cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 119711cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu for (i = 0; i < _EGL_API_NUM_APIS; i++) { 119811cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLContext *ctx = t->CurrentContexts[i]; 119911cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu if (ctx) { 120011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLDisplay *disp = ctx->Resource.Display; 1201655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDriver *drv; 1202655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 120345ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = i; 1204655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 1205655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 1206655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu drv = disp->Driver; 120717330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 1208655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&disp->Mutex); 120911cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu } 12102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 121145ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu 121245ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = api_index; 1213b2006a40eb22899d38cd31691640555228e36975Brian Paul } 12142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 121575da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 1216b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1217bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1218b2006a40eb22899d38cd31691640555228e36975Brian Paul} 12197012d01d888d482f2c6ad1180231a482026d213aJon Smirl 12207012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1221b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 1222a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1223a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1224a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifdef EGL_KHR_image_base 1225a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1226a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1227c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLImageKHR EGLAPIENTRY 1228a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WueglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, 1229a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu EGLClientBuffer buffer, const EGLint *attr_list) 1230a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1231655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1232a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 1233a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1234a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img; 1235b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLImageKHR ret; 1236a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1237bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 1238b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 1239bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); 1240a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1241a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu img = drv->API.CreateImageKHR(drv, 1242a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu disp, context, target, buffer, attr_list); 1243b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (img) ? _eglLinkImage(img, disp) : EGL_NO_IMAGE_KHR; 1244b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1245bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1246a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1247a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1248a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1249c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1250b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) 1251a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1252655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1253a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img = _eglLookupImage(image, disp); 1254a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1255b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1256a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1257bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1258a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!img) 1259bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1260a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1261a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _eglUnlinkImage(img); 1262b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyImageKHR(drv, disp, img); 1263b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1264bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1265a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1266a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1267a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1268a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 126952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 127052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 12714eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#ifdef EGL_KHR_reusable_sync 12724eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12734eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12744eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLSyncKHR EGLAPIENTRY 12754eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) 12764eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 12774eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 12784eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 12794eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *sync; 12804eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLSyncKHR ret; 12814eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12824eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv); 12834eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12844eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list); 12854eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = (sync) ? _eglLinkSync(sync, disp) : EGL_NO_SYNC_KHR; 12864eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12874eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 12884eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 12894eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12904eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12914eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 12924eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) 12934eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 12944eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 12954eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 12964eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 12974eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 12984eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 12994eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglUnlinkSync(s); 13014eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.DestroySyncKHR(drv, disp, s); 13024eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13034eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13044eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13054eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13064eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13074eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLint EGLAPIENTRY 13084eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) 13094eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13104eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13114eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13124eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13134eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLint ret; 13144eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13154eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13164eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.ClientWaitSyncKHR(drv, disp, s, flags, timeout); 13174eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13184eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13194eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13204eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13214eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13224eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13234eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) 13244eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13254eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13264eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13274eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13284eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 13294eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13304eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13314eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.SignalSyncKHR(drv, disp, s, mode); 13324eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13334eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13344eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13354eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13364eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13374eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13384eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value) 13394eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13404eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13414eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13424eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13434eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 13444eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13454eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13464eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value); 13474eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13484eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13494eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13504eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13514eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13524eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#endif /* EGL_KHR_reusable_sync */ 13534eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13544eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 135552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 135652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 1357c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 135852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergeglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, 135952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLint numRects, const EGLint *rects) 136052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg{ 136152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLContext *ctx = _eglGetCurrentContext(); 136252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 136352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLSurface *surf = _eglLookupSurface(surface, disp); 136452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDriver *drv; 136552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLBoolean ret; 136652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 136752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 136852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 136952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg /* surface must be bound to current context in EGL 1.4 */ 137052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface) 137152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 137252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 137352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg if (drv->API.SwapBuffersRegionNOK) 137452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); 137552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg else 137652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg ret = drv->API.SwapBuffers(drv, disp, surf); 137752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 137852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 137952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg} 138052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 138152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif /* EGL_NOK_swap_region */ 1382