eglapi.c revision f274dfaca4b53bae92dfe6a72c1890c381d84746
1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/** 2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Public EGL API entrypoints 3f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 4f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Generally, we use the EGLDisplay parameter as a key to lookup the 5f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * appropriate device driver handle, then jump though the driver's 6f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * dispatch table to handle the function. 7f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 8f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * That allows us the option of supporting multiple, simultaneous, 9f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * heterogeneous hardware devices in the future. 10f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 11f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * The EGLDisplay, EGLConfig, EGLContext and EGLSurface types are 12f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * opaque handles. Internal objects are linked to a display to 13f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * create the handles. 14f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 15f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * For each public API entry point, the opaque handles are looked up 16f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * before being dispatched to the drivers. When it fails to look up 17f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * a handle, one of 18f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 19f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_BAD_DISPLAY 20f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_BAD_CONFIG 21f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_BAD_CONTEXT 22f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_BAD_SURFACE 23f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_BAD_SCREEN_MESA 24f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_BAD_MODE_MESA 25f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 26f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * is generated and the driver function is not called. An 27f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * uninitialized EGLDisplay has no driver associated with it. When 28f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * such display is detected, 29f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 30f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * EGL_NOT_INITIALIZED 31adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 32adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * is generated. 33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Some of the entry points use current display, context, or surface 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * implicitly. For such entry points, the implicit objects are also 36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * checked before calling the driver function. Other than the 37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * errors listed above, 38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_BAD_CURRENT_SURFACE 40adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 41adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * may also be generated. 42aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 43aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * Notes on naming conventions: 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 45aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * eglFooBar - public EGL function 46aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_FOO_BAR - public EGL token 47aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGLDatatype - public EGL datatype 48aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 49aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * _eglFooBar - private EGL function 50aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * _EGLDatatype - private EGL datatype, typedef'd struct 51aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * _egl_struct - private EGL struct, non-typedef'd 52aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 53aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu */ 54aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu 55aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu 56aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu#include <stdio.h> 57aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu#include <stdlib.h> 58aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu#include <string.h> 59aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu 60aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu#include "eglcontext.h" 61aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu#include "egldisplay.h" 62aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu#include "egltypedefs.h" 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcurrent.h" 64bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "egldriver.h" 65bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "eglsurface.h" 66bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "eglconfig.h" 67bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "eglscreen.h" 68bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "eglmode.h" 69bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "eglimage.h" 70bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu#include "eglsync.h" 71bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 72bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Macros to help return an API entrypoint. 75adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * These macros will unlock the display and record the error code. 77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define RETURN_EGL_ERROR(disp, err, ret) \ 79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul do { \ 80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (disp) \ 81adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _eglUnlockDisplay(disp); \ 82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* EGL error codes are non-zero */ \ 83adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (err) \ 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _eglError(err, __FUNCTION__); \ 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return ret; \ 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } while (0) 87b2006a40eb22899d38cd31691640555228e36975Brian Paul 88adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define RETURN_EGL_SUCCESS(disp, ret) \ 891e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu RETURN_EGL_ERROR(disp, EGL_SUCCESS, ret) 90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* record EGL_SUCCESS only when ret evaluates to true */ 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define RETURN_EGL_EVAL(disp, ret) \ 9394cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu RETURN_EGL_ERROR(disp, (ret) ? EGL_SUCCESS : 0, ret) 94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu/* 972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu * A bunch of macros and checks to simplify error checking. 982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu */ 99a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#define _EGL_CHECK_DISPLAY(disp, ret, drv) \ 101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul do { \ 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul drv = _eglCheckDisplay(disp, __FUNCTION__); \ 103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!drv) \ 104f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 105655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu } while (0) 106655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 107f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#define _EGL_CHECK_OBJECT(disp, type, obj, ret, drv) \ 108bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 109bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheck ## type(disp, obj, __FUNCTION__); \ 110655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!drv) \ 111655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 112f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } while (0) 113f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 114f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#define _EGL_CHECK_SURFACE(disp, surf, ret, drv) \ 115bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Surface, surf, ret, drv) 116bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 117bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONTEXT(disp, context, ret, drv) \ 118bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Context, context, ret, drv) 119bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 120bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONFIG(disp, conf, ret, drv) \ 121b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_OBJECT(disp, Config, conf, ret, drv) 122bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 123bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SCREEN(disp, scrn, ret, drv) \ 124f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGL_CHECK_OBJECT(disp, Screen, scrn, ret, drv) 125f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 126bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_MODE(disp, m, ret, drv) \ 127f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGL_CHECK_OBJECT(disp, Mode, m, ret, drv) 128f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 129bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SYNC(disp, s, ret, drv) \ 130bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Sync, s, ret, drv) 131bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 132bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 133bef4b476d729320599264483113d577ac5eeaff1Chia-I Wustatic INLINE _EGLDriver * 134bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 135bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu{ 136bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!disp) { 137bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 138bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return NULL; 139bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } 140bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!disp->Initialized) { 141bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 142bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return NULL; 143bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } 144bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return disp->Driver; 145bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu} 146bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 147bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 148bef4b476d729320599264483113d577ac5eeaff1Chia-I Wustatic INLINE _EGLDriver * 149bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 150bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu{ 151bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 152bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) 153bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return NULL; 154bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!surf) { 155bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _eglError(EGL_BAD_SURFACE, msg); 156bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return NULL; 157bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } 158bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return drv; 1594eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 1604eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 161f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 162f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 163f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 164f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 165f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 166f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 167f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 168f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!context) { 169f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 170f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 171f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 172f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 173f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 174f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 175f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 176f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 177f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 178f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 179f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 180f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 181f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 182f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!conf) { 183f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 184f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 185f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 186f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 187f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 188f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 189f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 190f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#ifdef EGL_KHR_reusable_sync 191f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 192f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 193f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 194f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckSync(_EGLDisplay *disp, _EGLSync *s, const char *msg) 195f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 196f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 197f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 198f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 199f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!s) { 200f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_PARAMETER, msg); 201f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 202f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 203f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 204f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 205f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 206f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 207f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#endif /* EGL_KHR_reusable_sync */ 208f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 209f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 210f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#ifdef EGL_MESA_screen_surface 211f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 212f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 213f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 214f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 215f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 216f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 217f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 218f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 219f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!scrn) { 2204eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 2214eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2224eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu } 2234eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return drv; 2244eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 2254eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2264eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2274eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wustatic INLINE _EGLDriver * 2284eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 2294eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 2304eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2314eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!drv) 2324eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2334eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!m) { 2344eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 2354eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2364eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu } 2374eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return drv; 2384eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 2394eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 240f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 241f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#endif /* EGL_MESA_screen_surface */ 242f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 243f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 244f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 245f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * Lookup and lock a display. 246f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 247f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDisplay * 248f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglLockDisplay(EGLDisplay display) 249f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 250f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDisplay *dpy = _eglLookupDisplay(display); 251f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (dpy) 252f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglLockMutex(&dpy->Mutex); 253f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return dpy; 254f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 255f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 256f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 257f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 258f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * Unlock a display. 259f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 260f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE void 261f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglUnlockDisplay(_EGLDisplay *dpy) 262f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 263f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglUnlockMutex(&dpy->Mutex); 264f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 265f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 266f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 267f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 268f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * This is typically the first EGL function that an application calls. 269f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * It associates a private _EGLDisplay object to the native display. 270f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 271f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I WuEGLDisplay EGLAPIENTRY 272f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I WueglGetDisplay(EGLNativeDisplayType nativeDisplay) 273f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 274f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLPlatformType plat = _eglGetNativePlatform(); 275655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(plat, (void *) nativeDisplay); 276655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu return _eglGetDisplayHandle(dpy); 277655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 278655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 279655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 280655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 281655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * This is typically the second EGL function that an application calls. 282655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Here we load/initialize the actual hardware driver. 283655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 284655f4654675e601a9482e40d8e50156c965b8934Chia-I WuEGLBoolean EGLAPIENTRY 285655f4654675e601a9482e40d8e50156c965b8934Chia-I WueglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 286655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 287655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 288655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 289655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!disp) 290655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 291655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 292655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!disp->Initialized) { 293655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!_eglMatchDriver(disp, EGL_FALSE)) 294655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); 295655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 296655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu /* limit to APIs supported by core */ 297655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu disp->ClientAPIs &= _EGL_API_ALL_BITS; 2986052af172f0241e6678cd16efac0a0f14f40146cBrian Paul } 299db5ce8b3843a03c6f83a02a79f033d7e74784dd5Chia-I Wu 300adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* Update applications version of major and minor if not NULL */ 3011ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul if ((major != NULL) && (minor != NULL)) { 3024aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu *major = disp->VersionMajor; 303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul *minor = disp->VersionMinor; 30485fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke } 305f22665df95406567193dee0089f4830664ff4101Chia-I Wu 306721ba15bf4596b2e9589e7656005b387724875c3Brian Paul RETURN_EGL_SUCCESS(disp, EGL_TRUE); 307adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 308adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3106052af172f0241e6678cd16efac0a0f14f40146cBrian PaulEGLBoolean EGLAPIENTRY 3116052af172f0241e6678cd16efac0a0f14f40146cBrian PauleglTerminate(EGLDisplay dpy) 3126052af172f0241e6678cd16efac0a0f14f40146cBrian Paul{ 3136052af172f0241e6678cd16efac0a0f14f40146cBrian Paul _EGLDisplay *disp = _eglLockDisplay(dpy); 3141ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 315adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!disp) 316adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 317655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 3187e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White if (disp->Initialized) { 3192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv = disp->Driver; 320bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 3212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv->API.Terminate(drv, disp); 322a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu /* do not reset disp->Driver */ 323f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu disp->Initialized = EGL_FALSE; 324f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu } 3252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 326310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 327a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu} 328adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wuconst char * EGLAPIENTRY 3312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryString(EGLDisplay dpy, EGLint name) 332a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu{ 333a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const char *ret; 336bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGL_CHECK_DISPLAY(disp, NULL, drv); 338adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ret = drv->API.QueryString(drv, disp, name); 339adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3401ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul RETURN_EGL_EVAL(disp, ret); 341adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 343655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 3442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 3452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 346bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu EGLint config_size, EGLint *num_config) 3472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 348a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 349a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGLDriver *drv; 350a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu EGLBoolean ret; 351ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu 352a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 353a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 3542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_EVAL(disp, ret); 356bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu} 3572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 3601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PauleglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 361adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint config_size, EGLint *num_config) 362adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 363655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 364aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 365b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 366aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 367bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 368b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, 369b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu config_size, num_config); 370bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 372adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 373adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3741ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 3752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 3762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 377adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint attribute, EGLint *value) 378655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 379aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 380b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 381aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 382bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu EGLBoolean ret; 383b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 384b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); 385bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 387adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 388adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 3891ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 3902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLContext EGLAPIENTRY 392adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 393655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu const EGLint *attrib_list) 394aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu{ 395b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 396aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 397bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 398b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 3992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 400b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 401bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGL_CHECK_DISPLAY(disp, EGL_NO_CONTEXT, drv); 403adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 404adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!config) { 4051ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul /* config may be NULL if surfaceless */ 4062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp->Extensions.KHR_surfaceless_gles1 && 4072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu !disp->Extensions.KHR_surfaceless_gles2 && 408adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul !disp->Extensions.KHR_surfaceless_opengl) 409655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT); 4102f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 4112f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 412b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!share && share_list != EGL_NO_CONTEXT) 4132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); 414bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 415b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 416b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (context) ? _eglLinkContext(context) : EGL_NO_CONTEXT; 417bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 418adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 419adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 420adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4211ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 4222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 4232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglDestroyContext(EGLDisplay dpy, EGLContext ctx) 4242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 425655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 4272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLBoolean ret; 4292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 430b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 4312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 4326b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu ret = drv->API.DestroyContext(drv, disp, context); 4336b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4346b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, ret); 4356b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu} 4366b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4376b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4386b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I WuEGLBoolean EGLAPIENTRY 4396b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 4406b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu EGLContext ctx) 441b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg{ 442b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 443bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 4442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 4452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 4464ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu _EGLDriver *drv; 447b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 448bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 449adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!disp) 450adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 451adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul drv = disp->Driver; 4521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 453adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* display is allowed to be uninitialized under certain condition */ 454adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!disp->Initialized) { 455655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE || 456aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu ctx != EGL_NO_CONTEXT) 457aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 458b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 459aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu if (!drv) 460bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 4612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 462b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 463b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 464bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!draw_surf || !read_surf) { 465adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* surfaces may be NULL if surfaceless */ 466adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!disp->Extensions.KHR_surfaceless_gles1 && 467adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul !disp->Extensions.KHR_surfaceless_gles2 && 4681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul !disp->Extensions.KHR_surfaceless_opengl) 4692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 471adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if ((!draw_surf && draw != EGL_NO_SURFACE) || 472655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 4732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (draw_surf || read_surf) 4752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_FALSE); 4762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 477b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 4782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 47917330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 480bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 48117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu} 48217330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 48317330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 48417330479b39409a63a06ec9e6b0f8e28b585db12Chia-I WuEGLBoolean EGLAPIENTRY 48517330479b39409a63a06ec9e6b0f8e28b585db12Chia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 48617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu EGLint attribute, EGLint *value) 487bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu{ 48817330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 490bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 49117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu EGLBoolean ret; 4922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 493bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 4946b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu ret = drv->API.QueryContext(drv, disp, context, attribute, value); 4956b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4966b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, ret); 4976b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu} 4986b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4996b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 5006b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I WuEGLSurface EGLAPIENTRY 5016b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 5026b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu EGLNativeWindowType window, const EGLint *attrib_list) 5036b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu{ 5046b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5056b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5066b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGLDriver *drv; 5072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 508b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 509b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 510bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 511adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (disp->Platform != _eglGetNativePlatform()) 512adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 513adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5141ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 5152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 5162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 517adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 518655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 519aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 520aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 521b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLSurface EGLAPIENTRY 522aed7358e54fd143033d240c6e543d403da2d7336Chia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 523bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu EGLNativePixmapType pixmap, const EGLint *attrib_list) 524b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 525b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 526bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 527adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv; 528adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *surf; 529adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLSurface ret; 5301ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 5312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 5324aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu if (disp->Platform != _eglGetNativePlatform()) 533adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE); 534655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 5352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 5362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 5372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 538b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 5392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 540bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 54185fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke 542f22665df95406567193dee0089f4830664ff4101Chia-I WuEGLSurface EGLAPIENTRY 5432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 5442f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 5454ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu{ 546b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 547bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 548adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv; 549adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *surf; 550adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLSurface ret; 5511ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 5522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 5534aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu 554adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 555655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 5562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_EVAL(disp, ret); 5582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 559b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 5602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 561bef4b476d729320599264483113d577ac5eeaff1Chia-I WuEGLBoolean EGLAPIENTRY 56285fe9484945cb57ffd49df248b0e5057eba6af04Benjamin FranzkeeglDestroySurface(EGLDisplay dpy, EGLSurface surface) 563f22665df95406567193dee0089f4830664ff4101Chia-I Wu{ 5642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 5664ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu _EGLDriver *drv; 567b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 568bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 569adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 570adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _eglUnlinkSurface(surf); 571adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ret = drv->API.DestroySurface(drv, disp, surf); 5721ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 5732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_EVAL(disp, ret); 5742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 575adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 576655f4654675e601a9482e40d8e50156c965b8934Chia-I WuEGLBoolean EGLAPIENTRY 5772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 5782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 5792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 580b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 582bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 5832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLBoolean ret; 5842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5854ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 586b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); 587bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 588adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 589adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 590adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 592adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 593adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint attribute, EGLint value) 594655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 595aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 596aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 597b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 598aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu EGLBoolean ret; 599bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 6002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 601b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 602b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 603bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 604adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 605adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6061ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 6072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 6082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 610655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 611aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 612aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 613b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 614aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 615bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 616b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.BindTexImage(drv, disp, surf, buffer); 617b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 618bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 619adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 620adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6211ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 6222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 6232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 624adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 625655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 626aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 627aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 628b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 629aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 630bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 631b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); 632b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 633bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 634adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 635adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 636adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6371ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 638adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 639adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 640655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 641aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 642aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf; 643b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 644aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu EGLBoolean ret; 645bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 646b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 647b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 648bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 649adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ctx->Resource.Display != disp) 650adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 651adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul surf = ctx->DrawSurface; 653adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (_eglGetSurfaceHandle(surf) == EGL_NO_SURFACE) 654adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 655655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 656aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu ret = drv->API.SwapInterval(drv, disp, surf, interval); 657aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 658b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 659aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu} 660bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 661b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 662b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLBoolean EGLAPIENTRY 663bef4b476d729320599264483113d577ac5eeaff1Chia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 664adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 665adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 666adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *disp = _eglLockDisplay(dpy); 6671ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul _EGLSurface *surf = _eglLookupSurface(surface, disp); 668adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv; 669adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLBoolean ret; 670655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 67157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 67257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 673aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 674b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 675aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu surf != ctx->DrawSurface) 676bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 67757da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 678d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu ret = drv->API.SwapBuffers(drv, disp, surf); 679d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu 680bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 68157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu} 68257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 683d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu 684bef4b476d729320599264483113d577ac5eeaff1Chia-I WuEGLBoolean EGLAPIENTRY 68557da499d7ba074128e8c97b8076805e403a2b9c4Chia-I WueglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 686b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 687b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 688bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 689adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv; 690adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLBoolean ret; 691adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6921ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 6932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (disp->Platform != _eglGetNativePlatform()) 694adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_FALSE); 695bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu ret = drv->API.CopyBuffers(drv, disp, surf, target); 696655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 697aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu RETURN_EGL_EVAL(disp, ret); 698aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu} 699b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 700aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 701bef4b476d729320599264483113d577ac5eeaff1Chia-I WuEGLBoolean EGLAPIENTRY 702bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I WueglWaitClient(void) 703bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu{ 704d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 705d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu _EGLDisplay *disp; 706bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 707b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 708b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 709bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu if (!ctx) 710bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 711adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 712adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul disp = ctx->Resource.Display; 713adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _eglLockMutex(&disp->Mutex); 7141ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 7154aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu /* let bad current context imply bad current surface */ 716adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 717655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 718aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 719aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 720b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 721aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu assert(disp->Initialized); 722bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = disp->Driver; 72385fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke ret = drv->API.WaitClient(drv, disp, ctx); 724f22665df95406567193dee0089f4830664ff4101Chia-I Wu 725b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 726b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu} 727bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 728adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 729adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean EGLAPIENTRY 730adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitGL(void) 7311ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul{ 7326c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#ifdef EGL_VERSION_1_2 733adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 7346c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 7356c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint es_index = _eglConvertApiToIndex(EGL_OPENGL_ES_API); 7362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLBoolean ret; 737b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 7382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (api_index != es_index && _eglIsCurrentThreadDummy()) 7396c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 740bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 7412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu t->CurrentAPIIndex = es_index; 742ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu ret = eglWaitClient(); 743655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu t->CurrentAPIIndex = api_index; 744655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu return ret; 745655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu#else 746d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu return eglWaitClient(); 747d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu#endif 748bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu} 749b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 750b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 751a933259daa98615ad7473c53623a96f612e9a311Chia-I WuEGLBoolean EGLAPIENTRY 7522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglWaitNative(EGLint engine) 753b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 7546c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 755bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDisplay *disp; 7566c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDriver *drv; 7576c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLBoolean ret; 7582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7596c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 7606c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 7616c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7626c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu disp = ctx->Resource.Display; 7636c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _eglLockMutex(&disp->Mutex); 7646c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7656c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu /* let bad current context imply bad current surface */ 7666c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 7676c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 7686c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 769bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 7706c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu /* a valid current context implies an initialized current display */ 7716c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu assert(disp->Initialized); 7726c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu drv = disp->Driver; 7736c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu ret = drv->API.WaitNative(drv, disp, engine); 7746c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7756c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu RETURN_EGL_EVAL(disp, ret); 7766c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu} 7776c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 778adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 779adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLDisplay EGLAPIENTRY 780adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 7811ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul{ 782adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 783adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLDisplay ret; 7846c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7856c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu ret = (ctx) ? _eglGetDisplayHandle(ctx->Resource.Display) : EGL_NO_DISPLAY; 7862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 787b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 7882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 7896c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 790bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 791b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLContext EGLAPIENTRY 792655f4654675e601a9482e40d8e50156c965b8934Chia-I WueglGetCurrentContext(void) 793655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 794655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7956c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLContext ret; 796d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu 797d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu ret = _eglGetContextHandle(ctx); 798bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 799b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 800b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu} 801a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu 8022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 803b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLSurface EGLAPIENTRY 8042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetCurrentSurface(EGLint readdraw) 805bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu{ 806adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 807adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint err = EGL_SUCCESS; 808adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLSurface *surf; 8091ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul EGLSurface ret; 810adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 811adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!ctx) 812a1717970e78d897f527273278bf1346cc86a5741Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_NO_SURFACE); 813b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 814b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu switch (readdraw) { 815b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu case EGL_DRAW: 816b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu surf = ctx->DrawSurface; 817bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu break; 818adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul case EGL_READ: 819adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul surf = ctx->ReadSurface; 820adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul break; 8211ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul default: 822adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul surf = NULL; 823adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul err = EGL_BAD_PARAMETER; 824adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul break; 825b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 826b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 827b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetSurfaceHandle(surf); 828b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 829bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, err, ret); 830adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 831adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 832adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8331ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 834adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 835adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 83661906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 837b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLint e = t->LastError; 83861906631202af855d0742586956ff9f34522a525Chia-I Wu if (!_eglIsCurrentThreadDummy()) 839b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu t->LastError = EGL_SUCCESS; 84061906631202af855d0742586956ff9f34522a525Chia-I Wu return e; 84161906631202af855d0742586956ff9f34522a525Chia-I Wu} 842bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 84361906631202af855d0742586956ff9f34522a525Chia-I Wu 84461906631202af855d0742586956ff9f34522a525Chia-I Wu__eglMustCastToProperFunctionPointerType EGLAPIENTRY 84561906631202af855d0742586956ff9f34522a525Chia-I WueglGetProcAddress(const char *procname) 84661906631202af855d0742586956ff9f34522a525Chia-I Wu{ 84761906631202af855d0742586956ff9f34522a525Chia-I Wu static const struct { 84861906631202af855d0742586956ff9f34522a525Chia-I Wu const char *name; 84961906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLProc function; 85061906631202af855d0742586956ff9f34522a525Chia-I Wu } egl_functions[] = { 85161906631202af855d0742586956ff9f34522a525Chia-I Wu /* core functions should not be queryable, but, well... */ 85261906631202af855d0742586956ff9f34522a525Chia-I Wu#ifdef _EGL_GET_CORE_ADDRESSES 853b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* alphabetical order */ 85461906631202af855d0742586956ff9f34522a525Chia-I Wu { "eglBindAPI", (_EGLProc) eglBindAPI }, 85561906631202af855d0742586956ff9f34522a525Chia-I Wu { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 85661906631202af855d0742586956ff9f34522a525Chia-I Wu { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 857b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 858b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu { "eglCreateContext", (_EGLProc) eglCreateContext }, 859bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer }, 860adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 861adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 862adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 8631ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 864adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 865adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 86648822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 86748822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 86875da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 86975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 870adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 871adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetError", (_EGLProc) eglGetError }, 872adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 873adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglInitialize", (_EGLProc) eglInitialize }, 87495f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I Wu { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 87595f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I Wu { "eglQueryAPI", (_EGLProc) eglQueryAPI }, 876adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQueryContext", (_EGLProc) eglQueryContext }, 8779061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu { "eglQueryString", (_EGLProc) eglQueryString }, 878adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 879adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 8809061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu { "eglReleaseThread", (_EGLProc) eglReleaseThread }, 881f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 882f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 883f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 884f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglTerminate", (_EGLProc) eglTerminate }, 885f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitClient", (_EGLProc) eglWaitClient }, 886f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitGL", (_EGLProc) eglWaitGL }, 887f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitNative", (_EGLProc) eglWaitNative }, 888f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif /* _EGL_GET_CORE_ADDRESSES */ 889f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef EGL_MESA_screen_surface 890f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 891f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 892f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 893f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 894f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 895f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 896f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 897f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 898f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 899f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 900f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 901f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 902f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif /* EGL_MESA_screen_surface */ 903f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef EGL_MESA_drm_display 904f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA }, 905f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif 906f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef EGL_KHR_image_base 907f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR }, 908f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR }, 909f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif /* EGL_KHR_image_base */ 910f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef EGL_NOK_swap_region 911f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapBuffersRegionNOK", (_EGLProc) eglSwapBuffersRegionNOK }, 912f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif 913f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef EGL_MESA_drm_image 914f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateDRMImageMESA", (_EGLProc) eglCreateDRMImageMESA }, 915f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglExportDRMImageMESA", (_EGLProc) eglExportDRMImageMESA }, 916f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif 917f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef EGL_WL_bind_wayland_display 918f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglBindWaylandDisplayWL", (_EGLProc) eglBindWaylandDisplayWL }, 919b2006a40eb22899d38cd31691640555228e36975Brian Paul { "eglUnbindWaylandDisplayWL", (_EGLProc) eglUnbindWaylandDisplayWL }, 9207012d01d888d482f2c6ad1180231a482026d213aJon Smirl#endif 9217012d01d888d482f2c6ad1180231a482026d213aJon Smirl { NULL, NULL } 9227012d01d888d482f2c6ad1180231a482026d213aJon Smirl }; 9231c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl EGLint i; 9247012d01d888d482f2c6ad1180231a482026d213aJon Smirl _EGLProc ret; 9257012d01d888d482f2c6ad1180231a482026d213aJon Smirl 92648822796339cb4a55714dc3f1abbe379562ec538Brian Paul if (!procname) 9277012d01d888d482f2c6ad1180231a482026d213aJon Smirl RETURN_EGL_SUCCESS(NULL, NULL); 9287012d01d888d482f2c6ad1180231a482026d213aJon Smirl 9297012d01d888d482f2c6ad1180231a482026d213aJon Smirl ret = NULL; 9307012d01d888d482f2c6ad1180231a482026d213aJon Smirl if (strncmp(procname, "egl", 3) == 0) { 9317012d01d888d482f2c6ad1180231a482026d213aJon Smirl for (i = 0; egl_functions[i].name; i++) { 932b2006a40eb22899d38cd31691640555228e36975Brian Paul if (strcmp(egl_functions[i].name, procname) == 0) { 93378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu ret = egl_functions[i].function; 93478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu break; 93578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu } 936a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu } 937a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu } 938a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!ret) 939a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu ret = _eglGetDriverProc(procname); 94052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 94152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_SUCCESS(NULL, ret); 94252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg} 943b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 944b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 945b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#ifdef EGL_MESA_screen_surface 946b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 947f274dfaca4b53bae92dfe6a72c1890c381d84746Kristian Høgsberg 9486b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke/* 9496b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke * EGL_MESA_screen extension 9506b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke */ 951adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 952adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean EGLAPIENTRY 953adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 954b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const EGLint *attrib_list, EGLModeMESA *modes, 9559061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu EGLint modes_size, EGLint *num_modes) 9569061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu{ 957bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 958b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 959b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 9609061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu EGLBoolean ret; 9619061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 962b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 963b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 964b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu modes, modes_size, num_modes); 965b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 966adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 967adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 968f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu 969f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu 970e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian PaulEGLBoolean EGLAPIENTRY 971bef4b476d729320599264483113d577ac5eeaff1Chia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 972adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint mode_size, EGLint *num_mode) 973adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 974adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *disp = _eglLockDisplay(dpy); 9759061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 9769061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu _EGLDriver *drv; 9779061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu EGLBoolean ret; 978adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 979adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 980adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 981adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9821ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul RETURN_EGL_EVAL(disp, ret); 983c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul} 984adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 985adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 986adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PaulEGLBoolean EGLAPIENTRY 987655f4654675e601a9482e40d8e50156c965b8934Chia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 988aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu EGLint attribute, EGLint *value) 989aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu{ 990b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 991aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 992bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 993b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 994b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 995b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_MODE(disp, m, EGL_FALSE, drv); 996bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu ret = drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 997adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 998adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 999adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 10001ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul 10012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10022f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 1003adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 1004655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu EGLint mask) 1005aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu{ 1006aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1007b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 1008aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 1009bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 1010b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1011b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1012bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, source_context, EGL_FALSE, drv); 1013adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!dest_context) 1014adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 1015adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10161ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul ret = drv->API.CopyContextMESA(drv, disp, 10172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu source_context, dest_context, mask); 10182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1019adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 1020655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 1021aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1022aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1023b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLBoolean EGLAPIENTRY 1024aed7358e54fd143033d240c6e543d403da2d7336Chia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 1025bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu EGLint max_screens, EGLint *num_screens) 1026b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 1027b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1028bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 1029adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLBoolean ret; 1030adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1031adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 10321ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paul ret = drv->API.GetScreensMESA(drv, disp, screens, max_screens, num_screens); 10332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_EVAL(disp, ret); 10352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1036655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 10372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLSurface EGLAPIENTRY 10392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 1040b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const EGLint *attrib_list) 10412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1042bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1043b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 1044bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDriver *drv; 10452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1046b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 1047b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1048b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 1049bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 10501c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 10511c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 10521c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 1053c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled RETURN_EGL_EVAL(disp, ret); 10542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 10552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1056adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1057655f4654675e601a9482e40d8e50156c965b8934Chia-I WuEGLBoolean EGLAPIENTRY 1058aed7358e54fd143033d240c6e543d403da2d7336Chia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 1059b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface surface, EGLModeMESA mode) 1060aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu{ 1061bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1062b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 1063b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 1064bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1065adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv; 1066adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLBoolean ret; 1067adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1068c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 10692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 10702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 1071adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul if (!m && mode != EGL_NO_MODE_MESA) 1072655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); 10732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 10752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1076b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1078bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 10792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 10814ce33ec606292d92eff5afad6f50e1acc7109729Chia-I WueglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 1082b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 1083bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1084adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1085adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDriver *drv; 1086adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLBoolean ret; 1087c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled 10882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 10892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 1090adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1091655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 10932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLBoolean EGLAPIENTRY 1096b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 10972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 1098bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu{ 10992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1100bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 11012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1102bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu EGLBoolean ret; 1103b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1104b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 11052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 1106bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1107adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 1108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1109adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1110c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled 11117012d01d888d482f2c6ad1180231a482026d213aJon SmirlEGLBoolean EGLAPIENTRY 1112adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 1113655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu EGLSurface *surface) 1114aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu{ 1115aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1116b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 1117aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1118bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLSurface *surf; 1119b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1120b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1121bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 11227012d01d888d482f2c6ad1180231a482026d213aJon Smirl ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); 11237012d01d888d482f2c6ad1180231a482026d213aJon Smirl if (ret && surface) 11247012d01d888d482f2c6ad1180231a482026d213aJon Smirl *surface = _eglGetSurfaceHandle(surf); 1125c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled 11262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu RETURN_EGL_EVAL(disp, ret); 11272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 11287012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1129655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 1130aed7358e54fd143033d240c6e543d403da2d7336Chia-I WuEGLBoolean EGLAPIENTRY 1131aed7358e54fd143033d240c6e543d403da2d7336Chia-I WueglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 1132b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 1133aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1134bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 1135b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 1136b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLMode *m; 1137bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu EGLBoolean ret; 1138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1139adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); 1141c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled if (ret && mode) 11422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 11432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 1145655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 11462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 11472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 11482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wuconst char * EGLAPIENTRY 1149b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 11502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1151bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1152b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1153b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 11542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const char *ret; 1155b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1156bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, NULL, drv); 1157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ret = drv->API.QueryModeStringMESA(drv, disp, m); 1158adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1159adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul RETURN_EGL_EVAL(disp, ret); 1160c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled} 11617012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1163655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu#endif /* EGL_MESA_screen_surface */ 11642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 11652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 11662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#ifdef EGL_MESA_drm_display 1167b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 11682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WuEGLDisplay EGLAPIENTRY 1169bef4b476d729320599264483113d577ac5eeaff1Chia-I WueglGetDRMDisplayMESA(int fd) 1170b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 1171b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(_EGL_PLATFORM_DRM, (void *) fd); 11722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu return _eglGetDisplayHandle(dpy); 11732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 1174bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1175adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGL_MESA_drm_display */ 1176adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1177adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 1178c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled ** EGL 1.2 11797012d01d888d482f2c6ad1180231a482026d213aJon Smirl **/ 11807012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1181655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu#ifdef EGL_VERSION_1_2 1182aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1183aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1184b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu/** 1185aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu * Specify the client API to use for subsequent calls including: 1186bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu * eglCreateContext() 1187b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu * eglGetCurrentContext() 1188b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu * eglGetCurrentDisplay() 1189bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu * eglGetCurrentSurface() 11907012d01d888d482f2c6ad1180231a482026d213aJon Smirl * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 11917012d01d888d482f2c6ad1180231a482026d213aJon Smirl * eglWaitClient() 11927012d01d888d482f2c6ad1180231a482026d213aJon Smirl * eglWaitNative() 11939061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu * See section 3.7 "Rendering Context" in the EGL specification for details. 11949061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu */ 11959061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I WuEGLBoolean EGLAPIENTRY 119678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WueglBindAPI(EGLenum api) 119778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu{ 119878d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 119978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 120078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu if (_eglIsCurrentThreadDummy()) 12016a661895e946f38b21775bf9cb45ef6b22fab85aJosé Fonseca RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 120278d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 120378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu if (!_eglIsApiValid(api)) 120478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, EGL_FALSE); 120578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 120678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 1207b2006a40eb22899d38cd31691640555228e36975Brian Paul 1208b2006a40eb22899d38cd31691640555228e36975Brian Paul RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1209b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1210b2006a40eb22899d38cd31691640555228e36975Brian Paul 1211b2006a40eb22899d38cd31691640555228e36975Brian Paul 1212b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 1213d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 1214d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1215d5078b94323241a6482f54797756116b1c864327Brian PaulEGLenum EGLAPIENTRY 1216d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 1217d5078b94323241a6482f54797756116b1c864327Brian Paul{ 1218d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1219d5078b94323241a6482f54797756116b1c864327Brian Paul EGLenum ret; 1220d5078b94323241a6482f54797756116b1c864327Brian Paul 1221d5078b94323241a6482f54797756116b1c864327Brian Paul /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 1222d5078b94323241a6482f54797756116b1c864327Brian Paul ret = _eglConvertApiFromIndex(t->CurrentAPIIndex); 1223d5078b94323241a6482f54797756116b1c864327Brian Paul 1224d5078b94323241a6482f54797756116b1c864327Brian Paul RETURN_EGL_SUCCESS(NULL, ret); 1225c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled} 1226b2006a40eb22899d38cd31691640555228e36975Brian Paul 1227b2006a40eb22899d38cd31691640555228e36975Brian Paul 1228b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLSurface EGLAPIENTRY 1229b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 123075da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu EGLClientBuffer buffer, EGLConfig config, 1231bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu const EGLint *attrib_list) 123275da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu{ 123321b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1234bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 123521b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu _EGLDriver *drv; 1236310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu _EGLSurface *surf; 1237b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 1238bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1239b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 1240b2006a40eb22899d38cd31691640555228e36975Brian Paul 1241b2006a40eb22899d38cd31691640555228e36975Brian Paul surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 1242d5078b94323241a6482f54797756116b1c864327Brian Paul conf, attrib_list); 1243d5078b94323241a6482f54797756116b1c864327Brian Paul ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1244d5078b94323241a6482f54797756116b1c864327Brian Paul 1245c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled RETURN_EGL_EVAL(disp, ret); 1246d5078b94323241a6482f54797756116b1c864327Brian Paul} 1247d5078b94323241a6482f54797756116b1c864327Brian Paul 1248d5078b94323241a6482f54797756116b1c864327Brian Paul 1249b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLBoolean EGLAPIENTRY 1250b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglReleaseThread(void) 1251b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu{ 1252b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* unbind current contexts */ 1253b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!_eglIsCurrentThreadDummy()) { 1254bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 1255d5078b94323241a6482f54797756116b1c864327Brian Paul EGLint api_index = t->CurrentAPIIndex; 1256d5078b94323241a6482f54797756116b1c864327Brian Paul EGLint i; 1257d5078b94323241a6482f54797756116b1c864327Brian Paul 1258c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled for (i = 0; i < _EGL_API_NUM_APIS; i++) { 1259b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLContext *ctx = t->CurrentContexts[i]; 1260b2006a40eb22899d38cd31691640555228e36975Brian Paul if (ctx) { 1261b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLDisplay *disp = ctx->Resource.Display; 1262b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLDriver *drv; 1263655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 12642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu t->CurrentAPIIndex = i; 12652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 12662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglLockMutex(&disp->Mutex); 1267b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu drv = disp->Driver; 12682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 1269bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _eglUnlockMutex(&disp->Mutex); 12702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 12712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 12722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 12734ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu t->CurrentAPIIndex = api_index; 1274b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 1275bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1276b2006a40eb22899d38cd31691640555228e36975Brian Paul _eglDestroyCurrentThread(); 1277b2006a40eb22899d38cd31691640555228e36975Brian Paul 1278b2006a40eb22899d38cd31691640555228e36975Brian Paul RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1279c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled} 1280b2006a40eb22899d38cd31691640555228e36975Brian Paul 1281b2006a40eb22899d38cd31691640555228e36975Brian Paul 128211cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu#endif /* EGL_VERSION_1_2 */ 12832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 128411cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 128545ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu#ifdef EGL_KHR_image_base 128611cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 128711cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 128811cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I WuEGLImageKHR EGLAPIENTRY 128911cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I WueglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, 129011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu EGLClientBuffer buffer, const EGLint *attr_list) 129111cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu{ 1292655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1293655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 129445ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu _EGLDriver *drv; 1295655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLImage *img; 1296655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu EGLImageKHR ret; 1297655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 129817330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 1299655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!disp->Extensions.KHR_image_base) 130011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 13012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 130245ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); 130345ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu 1304b2006a40eb22899d38cd31691640555228e36975Brian Paul img = drv->API.CreateImageKHR(drv, 13052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu disp, context, target, buffer, attr_list); 130675da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1307b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1308bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1309b2006a40eb22899d38cd31691640555228e36975Brian Paul} 13107012d01d888d482f2c6ad1180231a482026d213aJon Smirl 13117012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1312b2006a40eb22899d38cd31691640555228e36975Brian PaulEGLBoolean EGLAPIENTRY 1313a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WueglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) 1314a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1315a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1316a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img = _eglLookupImage(image, disp); 1317a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1318c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled EGLBoolean ret; 1319a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1320a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1321a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!disp->Extensions.KHR_image_base) 1322655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu RETURN_EGL_EVAL(disp, EGL_FALSE); 1323a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!img) 1324a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1325a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1326b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _eglUnlinkImage(img); 1327a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu ret = drv->API.DestroyImageKHR(drv, disp, img); 1328bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 13296b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13306b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu} 1331b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1332bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1333a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 1334a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1335a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 13364ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu#ifdef EGL_KHR_reusable_sync 1337b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1338bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 1339a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WuEGLSyncKHR EGLAPIENTRY 1340a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WueglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) 1341a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1342c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobled _EGLDisplay *disp = _eglLockDisplay(dpy); 1343b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLDriver *drv; 1344a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLSync *sync; 1345655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu EGLSyncKHR ret; 1346a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1347a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv); 1348b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!disp->Extensions.KHR_reusable_sync) 1349a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_SYNC_KHR); 1350bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 13516b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list); 13526b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu ret = (sync) ? _eglLinkSync(sync) : EGL_NO_SYNC_KHR; 1353a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1354bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1355a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1356a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1357b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1358b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WuEGLBoolean EGLAPIENTRY 1359bef4b476d729320599264483113d577ac5eeaff1Chia-I WueglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) 1360a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1361a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1362a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 1363a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 136452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLBoolean ret; 136552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 13664eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13674eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 13684eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13694eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglUnlinkSync(s); 13704eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.DestroySyncKHR(drv, disp, s); 13714eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13724eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13734eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13744eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13754eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13764eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLint EGLAPIENTRY 13774eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) 13786b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu{ 13796b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13804eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13814eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13824ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu EGLint ret; 13834eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13844eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13854eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 13864eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.ClientWaitSyncKHR(drv, disp, s, flags, timeout); 13874eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13884eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13894eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13904eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13914eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13924eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13934eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) 13944eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13954eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13964eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13976b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGLDriver *drv; 13986b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu EGLBoolean ret; 13994eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 14014eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 14024eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.SignalSyncKHR(drv, disp, s, mode); 14034eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14044eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14054eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14064eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14074eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14084eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 14094eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value) 14104eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 14114eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 14124eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 14134eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 14144eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 14156b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 14164eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 14174eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 14184eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value); 14194eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14204eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14214eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14224eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14234eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14244eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#endif /* EGL_KHR_reusable_sync */ 14254eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14264eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14274eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#ifdef EGL_NOK_swap_region 14284eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14294eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 14304eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, 14316b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu EGLint numRects, const EGLint *rects) 14324eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 14334eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 14344eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 14354eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 14364eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 14374eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 14384eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14394eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 14404eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14414eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!disp->Extensions.NOK_swap_region) 14424eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, EGL_FALSE); 14434eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14444eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 14454eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 14464eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu surf != ctx->DrawSurface) 14476b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 14484eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14494eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); 14504eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14514eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14524eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14534eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14544eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu#endif /* EGL_NOK_swap_region */ 14554eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14564eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 145752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_MESA_drm_image 145852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 1459c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLImageKHR EGLAPIENTRY 146052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergeglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list) 146152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg{ 146252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 146352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDriver *drv; 146452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLImage *img; 146552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLImageKHR ret; 146652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 146752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 146852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg if (!disp->Extensions.MESA_drm_image) 146952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 147052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 14716b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu img = drv->API.CreateDRMImageMESA(drv, disp, attr_list); 14726b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 14736b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 147452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1475d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu} 1476d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu 147752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergEGLBoolean EGLAPIENTRY 147852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergeglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, 14796b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu EGLint *name, EGLint *handle, EGLint *stride) 148052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg{ 148152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 148252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLImage *img = _eglLookupImage(image, disp); 148352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDriver *drv; 148452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLBoolean ret; 1485b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1486b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1487b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg assert(disp->Extensions.MESA_drm_image); 1488b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1489b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg if (!img) 1490b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1491b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1492b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg ret = drv->API.ExportDRMImageMESA(drv, disp, img, name, handle, stride); 1493b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1494b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1495b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg} 1496b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1497b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#endif 14986b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 14996b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu#ifdef EGL_WL_bind_wayland_display 1500b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsbergstruct wl_display; 1501b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 15024ce33ec606292d92eff5afad6f50e1acc7109729Chia-I WuEGLBoolean EGLAPIENTRY 1503b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergeglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 1504b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg{ 1505b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1506b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDriver *drv; 1507b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLBoolean ret; 1508b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1509b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1510b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg assert(disp->Extensions.WL_bind_wayland_display); 1511b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1512b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg if (!display) 1513b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1514b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1515b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg ret = drv->API.BindWaylandDisplayWL(drv, disp, display); 1516b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 15176b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, ret); 15186b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu} 1519b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1520b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergEGLBoolean EGLAPIENTRY 1521b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergeglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 1522b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg{ 1523b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1524b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDriver *drv; 1525b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLBoolean ret; 1526b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1527b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 15286b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke assert(disp->Extensions.WL_bind_wayland_display); 15296b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15306b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke if (!display) 15316b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 15326b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15336b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke ret = drv->API.UnbindWaylandDisplayWL(drv, disp, display); 15346b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15356b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_EVAL(disp, ret); 15366b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke} 15376b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#endif 15386b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke