eglapi.c revision b90a3e7d8b1bcd412ddbf2a4803de2756dacd436
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Public EGL API entrypoints 3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Generally, we use the EGLDisplay parameter as a key to lookup the 5adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * appropriate device driver handle, then jump though the driver's 6adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * dispatch table to handle the function. 7adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 8adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * That allows us the option of supporting multiple, simultaneous, 9adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * heterogeneous hardware devices in the future. 10adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 11adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * The EGLDisplay, EGLConfig, EGLContext and EGLSurface types are 12aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * opaque handles. Internal objects are linked to a display to 13aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * create the handles. 14adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 15aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * For each public API entry point, the opaque handles are looked up 16aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * before being dispatched to the drivers. When it fails to look up 17aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * a handle, one of 18aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 19aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_DISPLAY 20aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_CONFIG 21aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_CONTEXT 22aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_SURFACE 23aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_SCREEN_MESA 24aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_BAD_MODE_MESA 25aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 26aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * is generated and the driver function is not called. An 27aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * uninitialized EGLDisplay has no driver associated with it. When 28aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * such display is detected, 29aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 30aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * EGL_NOT_INITIALIZED 31aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * 32aaa1253b09a6a38e7fcd695aa36e89b9d4bd8dfeChia-I Wu * is generated. 33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 34bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * Some of the entry points use current display, context, or surface 35bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * implicitly. For such entry points, the implicit objects are also 36bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * checked before calling the driver function. Other than the 37bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * errors listed above, 38bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * 39bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * EGL_BAD_CURRENT_SURFACE 40bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * 41bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * may also be generated. 42bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu * 43adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Notes on naming conventions: 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * eglFooBar - public EGL function 46adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_FOO_BAR - public EGL token 47adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGLDatatype - public EGL datatype 48adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 49adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _eglFooBar - private EGL function 50adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _EGLDatatype - private EGL datatype, typedef'd struct 51adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * _egl_struct - private EGL struct, non-typedef'd 52adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * 53adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 54adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 55adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 56adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <stdio.h> 57b2006a40eb22899d38cd31691640555228e36975Brian Paul#include <stdlib.h> 58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include <string.h> 591e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu 601e6c10f4be9e36cc052a6b47fb2cb1eae60caa00Chia-I Wu#include "eglstring.h" 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglcontext.h" 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldisplay.h" 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 6494cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu#include "eglcurrent.h" 65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egldriver.h" 66adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "eglsurface.h" 672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglconfig.h" 682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglscreen.h" 692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu#include "eglmode.h" 70a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#include "eglimage.h" 71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 74f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * Macros to help return an API entrypoint. 75655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * 76655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * These macros will unlock the display and record the error code. 77f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 78bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_ERROR(disp, err, ret) \ 79bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 80655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (disp) \ 81655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockDisplay(disp); \ 82f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu /* EGL error codes are non-zero */ \ 83f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (err) \ 84f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(err, __FUNCTION__); \ 85bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu return ret; \ 86bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 87bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 88bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_SUCCESS(disp, ret) \ 89bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_SUCCESS, ret) 90bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 91b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu/* record EGL_SUCCESS only when ret evaluates to true */ 92bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define RETURN_EGL_EVAL(disp, ret) \ 93bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, (ret) ? EGL_SUCCESS : 0, ret) 94f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 95f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 96bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu/* 97f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu * A bunch of macros and checks to simplify error checking. 98f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu */ 99bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 100bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_DISPLAY(disp, ret, drv) \ 101bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 102bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheckDisplay(disp, __FUNCTION__); \ 103bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) \ 104bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 105bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 106bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 107bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_OBJECT(disp, type, obj, ret, drv) \ 108bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu do { \ 109bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu drv = _eglCheck ## type(disp, obj, __FUNCTION__); \ 110bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu if (!drv) \ 111bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, 0, ret); \ 112bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu } while (0) 113bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 114bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SURFACE(disp, surf, ret, drv) \ 115bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Surface, surf, ret, drv) 116bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 117bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONTEXT(disp, context, ret, drv) \ 118bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Context, context, ret, drv) 119bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 120bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_CONFIG(disp, conf, ret, drv) \ 121bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Config, conf, ret, drv) 122bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 123bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_SCREEN(disp, scrn, ret, drv) \ 124bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Screen, scrn, ret, drv) 125bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 126bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu#define _EGL_CHECK_MODE(disp, m, ret, drv) \ 127bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_OBJECT(disp, Mode, m, ret, drv) 128bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu 129f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 130f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 131f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 132f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 133f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 134f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!disp) { 135f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_DISPLAY, msg); 136f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 137f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 138f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!disp->Initialized) { 139f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_NOT_INITIALIZED, msg); 140f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 141f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 142f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return disp->Driver; 143f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 144f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 145f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 146f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 147f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 148f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 149f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 150f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 151f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 152f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!surf) { 153f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SURFACE, msg); 154f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 155f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 156f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 157f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 158f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 159f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 160f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 161f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 162f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 163f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 164f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 165f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 166f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!context) { 167f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONTEXT, msg); 168f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 169f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 170f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 171f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 172f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 173f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 174f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 175f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 176f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 177f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 178f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 179f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 180f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!conf) { 181f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_CONFIG, msg); 182f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 183f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 184f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 185f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 186f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 187f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 188f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#ifdef EGL_MESA_screen_surface 189f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 190f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 191f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 192f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 193f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 194f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 195f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 196f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 197f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!scrn) { 198f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 199f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 200f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 201f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 202f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 203f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 204f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 205f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 206f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 207f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 208f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 209f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 210f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 211f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!m) { 212f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 213f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 214f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 215f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 216f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 217f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 218f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 219f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#endif /* EGL_MESA_screen_surface */ 220f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 221f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 222f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 223655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Lookup and lock a display. 224655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 225655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE _EGLDisplay * 226655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglLockDisplay(EGLDisplay display) 227655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 228655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *dpy = _eglLookupDisplay(display); 229655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (dpy) 230655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&dpy->Mutex); 231655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu return dpy; 232655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 233655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 234655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 235655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 236655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Unlock a display. 237655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 238655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE void 239655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglUnlockDisplay(_EGLDisplay *dpy) 240655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 241655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&dpy->Mutex); 242655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 243655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 244655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 245655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 2466052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the first EGL function that an application calls. 247db5ce8b3843a03c6f83a02a79f033d7e74784dd5Chia-I Wu * It associates a private _EGLDisplay object to the native display. 248adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 2491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 2504aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglGetDisplay(EGLNativeDisplayType nativeDisplay) 251adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 252f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLPlatformType plat = _eglGetNativePlatform(); 253f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(plat, (void *) nativeDisplay); 254721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 255adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 256adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 257adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2586052af172f0241e6678cd16efac0a0f14f40146cBrian Paul/** 2596052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the second EGL function that an application calls. 2606052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * Here we load/initialize the actual hardware driver. 2616052af172f0241e6678cd16efac0a0f14f40146cBrian Paul */ 2621ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 263adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 264adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 265655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 2667e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White 2672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 268bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 2692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 270a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (!disp->Initialized) { 271f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!_eglMatchDriver(disp, EGL_FALSE)) 272f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); 2732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 274f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu _eglsnprintf(disp->Version, sizeof(disp->Version), "%d.%d (%s)", 275f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu disp->APImajor, disp->APIminor, disp->Driver->Name); 276310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu /* limit to APIs supported by core */ 277310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu disp->ClientAPIsMask &= _EGL_API_ALL_BITS; 278adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 2792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 2812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 282f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu *major = disp->APImajor; 283f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu *minor = disp->APIminor; 2842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 2852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 286bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 287adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 288adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 289adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 2901ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 291adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 292adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 293655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 2942f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 2952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 296bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 2972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 298a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (disp->Initialized) { 299a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGLDriver *drv = disp->Driver; 300a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu 301ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu drv->API.Terminate(drv, disp); 302a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu /* do not reset disp->Driver */ 303a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu disp->Initialized = EGL_FALSE; 3042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 306bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 3072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 3082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3101ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 311adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 312adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 313655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 314aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 315b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 316aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 317bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, NULL, drv); 318b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryString(drv, disp, name); 319b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 320bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 321adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 323adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3241ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 3262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 327adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 328655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 329aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 330b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 331aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 332bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 333b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 334b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 335bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 337adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 338adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3391ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 3412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 342adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 343655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 344aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 345b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 346aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 347bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 348b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 350b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 351bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 352adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 353adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 354adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3551ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 3572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 358adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 359655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 362b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 3632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 364bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); 365b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 366b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 367bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 368adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 369adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 370adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3711ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 3722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 3732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 3742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 375655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3762f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 3772f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 3782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 3792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 380b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 3812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 382b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg if (config) 383b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg _EGL_CHECK_CONFIG(disp, conf, EGL_NO_CONTEXT, drv); 384b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg else 385b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg drv = _eglCheckDisplay(disp, __FUNCTION__); 386b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg 387b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!share && share_list != EGL_NO_CONTEXT) 388bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); 3892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 391b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (context) ? _eglLinkContext(context, disp) : EGL_NO_CONTEXT; 392b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 393bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 394adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 395adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3971ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 398adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 399adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 400655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 401aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 402aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 403b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 404aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 405bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 4062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 407b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyContext(drv, disp, context); 408b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 409bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 410adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 411adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4131ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 4152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 416adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 417655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 4192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 4202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 4212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 422b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 4232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 42417330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp) 425bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 42617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu drv = disp->Driver; 42717330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 42817330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu /* display is allowed to be uninitialized under certain condition */ 42917330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp->Initialized) { 43017330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE || 43117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu ctx != EGL_NO_CONTEXT) 432bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 43317330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu } 4342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 435bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 43617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 4372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 438bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 4392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 4402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 441bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 443b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 444b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 445bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 446adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 447adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 448adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 4512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 452adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 453655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 454aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 455aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 456b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 457aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 458bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 459b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryContext(drv, disp, context, attribute, value); 460b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 461bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 462adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 463adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 464adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4651ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 4674aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativeWindowType window, const EGLint *attrib_list) 468adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 469655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 473b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 4742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 475bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 476f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 477f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 4782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 480b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 481b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 482bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 483adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 484adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 485adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4861ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 4872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 4884aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativePixmapType pixmap, const EGLint *attrib_list) 489adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 490655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 494b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 4952f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 496bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 497f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 498f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE); 4992f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 501b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 502b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 503bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 504adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 505adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 506adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 5092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 510adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 511655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5142f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 515b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 517bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 5182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 520b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 521b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 522bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 523adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 524adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 525adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5261ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 527adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 528adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 529655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 530aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 531aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 532b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 533aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 534bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 5352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 536b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroySurface(drv, disp, surf); 537b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 538bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 539adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 540adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5411ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 5432f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 544adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 545655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 546aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 547aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 548b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 549aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 550bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 551b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); 552b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 553bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 554adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 555adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5561ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 5582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 559adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 560655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 561aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 562aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 563b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 564aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 565bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 566b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 567b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 568bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 569adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 570adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 571adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5721ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 573adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 574adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 575655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 576aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 577aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 578b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 579aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 580bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 581b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.BindTexImage(drv, disp, surf, buffer); 582b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 583bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 584adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 585adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 586adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5871ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 588adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 589adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 590655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 591aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 592aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 593b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 594aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 595bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 596b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); 597b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 598bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 599adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 600adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 601adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6021ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 603adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 604adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 605655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 60657da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 60757da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLSurface *surf; 608aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 609b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 610aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 611bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 61257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 613ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu if (!ctx || !_eglIsContextLinked(ctx) || ctx->Resource.Display != disp) 614bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 61557da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 61657da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu surf = ctx->DrawSurface; 61757da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu if (!_eglIsSurfaceLinked(surf)) 618bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 61957da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 620b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapInterval(drv, disp, surf, interval); 621b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 622bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 623adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 624adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 625adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6261ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 628adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 629bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 630655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 631aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 632aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 633b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 634aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 635bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 636bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 637bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 638bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface) 639bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 640b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 641b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapBuffers(drv, disp, surf); 642bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 643bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 644adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 645adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 646adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6471ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6484aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 649adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 650655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 651aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 652aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 653b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 654aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 655bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 656f22665df95406567193dee0089f4830664ff4101Chia-I Wu if (disp->Platform != _eglGetNativePlatform()) 657f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_FALSE); 658b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyBuffers(drv, disp, surf, target); 659b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 660bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 661adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 662adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 663adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6641ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6656c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitClient(void) 666adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 6676c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 6686c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 6692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 670b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 6712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 6726c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 673bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 6742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 675ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu disp = ctx->Resource.Display; 676655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 677655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 678655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu /* let bad current context imply bad current surface */ 679655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (!_eglIsContextLinked(ctx) || !_eglIsSurfaceLinked(ctx->DrawSurface)) 680bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 681b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 682b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 683a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 6842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 685b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitClient(drv, disp, ctx); 6866c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 687bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 6886c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu} 6896c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 6902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 6916c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WuEGLBoolean EGLAPIENTRY 6926c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitGL(void) 6936c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu{ 6946c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#ifdef EGL_VERSION_1_2 6956c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 6966c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 6976c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint es_index = _eglConvertApiToIndex(EGL_OPENGL_ES_API); 6986c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLBoolean ret; 6996c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7006c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (api_index != es_index && _eglIsCurrentThreadDummy()) 701bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 7026c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7036c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = es_index; 7046c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu ret = eglWaitClient(); 7056c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = api_index; 7066c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return ret; 7076c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#else 7086c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return eglWaitClient(); 7096c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu#endif 710adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 711adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 712adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7131ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 714adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 715adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7166c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7176c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 7182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 719b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 7202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7216c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 722bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 723b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 724655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu disp = ctx->Resource.Display; 725655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 726655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 7276c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu /* let bad current context imply bad current surface */ 7286c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!_eglIsContextLinked(ctx) || !_eglIsSurfaceLinked(ctx->DrawSurface)) 729bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 730b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 731b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 732a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 734b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitNative(drv, disp, engine); 7352f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 736bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 737adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 738adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 739adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7401ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 741adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 742adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 743a1717970e78d897f527273278bf1346cc86a5741Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 744b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLDisplay ret; 745b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 746b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (ctx) ? _eglGetDisplayHandle(ctx->Resource.Display) : EGL_NO_DISPLAY; 747b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 748bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 749adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 750adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 751adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7521ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 753adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 754adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 755adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 756b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 757b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 758b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetContextHandle(ctx); 759b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 760bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 761adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 762adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 763adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7641ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 765adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 766adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 76761906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 768b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLint err = EGL_SUCCESS; 76961906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLSurface *surf; 770b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 77161906631202af855d0742586956ff9f34522a525Chia-I Wu 77261906631202af855d0742586956ff9f34522a525Chia-I Wu if (!ctx) 773bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_NO_SURFACE); 77461906631202af855d0742586956ff9f34522a525Chia-I Wu 77561906631202af855d0742586956ff9f34522a525Chia-I Wu switch (readdraw) { 77661906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_DRAW: 77761906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->DrawSurface; 77861906631202af855d0742586956ff9f34522a525Chia-I Wu break; 77961906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_READ: 78061906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->ReadSurface; 78161906631202af855d0742586956ff9f34522a525Chia-I Wu break; 78261906631202af855d0742586956ff9f34522a525Chia-I Wu default: 78361906631202af855d0742586956ff9f34522a525Chia-I Wu surf = NULL; 784b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu err = EGL_BAD_PARAMETER; 78561906631202af855d0742586956ff9f34522a525Chia-I Wu break; 78661906631202af855d0742586956ff9f34522a525Chia-I Wu } 78761906631202af855d0742586956ff9f34522a525Chia-I Wu 788b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetSurfaceHandle(surf); 789b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 790bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, err, ret); 791adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 792adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 793adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7941ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 795adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 796adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 79748822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 79848822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 79975da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 80075da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 801adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 802adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 803adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 804adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 80595f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I Wu__eglMustCastToProperFunctionPointerType EGLAPIENTRY 80695f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I WueglGetProcAddress(const char *procname) 807adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8089061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu static const struct { 809adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 810adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 8119061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu } egl_functions[] = { 8129061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu /* extensions only */ 813b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 8147012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 8157012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 8167012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 8171c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 8187012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 8197012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 82048822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 8217012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 8227012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 8237012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 8247012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 8257012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 826b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 82778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 82878d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu { "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA }, 82978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif 830a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifdef EGL_KHR_image_base 831a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR }, 832a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR }, 833a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 83452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 83552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg { "eglSwapBuffersRegionNOK", (_EGLProc) eglSwapBuffersRegionNOK }, 83652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif 837adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 838adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 839adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 840b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLProc ret; 8419061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 8429061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (!procname) 843bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, NULL); 844b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 845b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = NULL; 8469061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strncmp(procname, "egl", 3) == 0) { 8479061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu for (i = 0; egl_functions[i].name; i++) { 848b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (strcmp(egl_functions[i].name, procname) == 0) { 849b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = egl_functions[i].function; 850b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu break; 851b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 852adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 853adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 854f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!ret) 855f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu ret = _eglGetDriverProc(procname); 856e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 857bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 858adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 859adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 860adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8619061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#ifdef EGL_MESA_screen_surface 8629061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 8639061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 864adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 865adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 866adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 867adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 869c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 870adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 871adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 872adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 873655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 874aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 875aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 876b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 877aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 878bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 879b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 880b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu modes, modes_size, num_modes); 881b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 882bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 883adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 884adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 885adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8861ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 8872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 8882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 889adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 890655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 891aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 892aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 893b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 894aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 895bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 896b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 897b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 898bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 899adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 900adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 901adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9021ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9032f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 9042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 905adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 906655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 907aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 908aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 909b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 910aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 911bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, EGL_FALSE, drv); 912b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 913b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 914bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 915adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 916adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 917adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9181ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 9202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 9212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 922655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 9232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 9242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 9252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 926b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 9272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 928bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, source_context, EGL_FALSE, drv); 929b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!dest_context) 930bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 9312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 932b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyContextMESA(drv, disp, 933b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu source_context, dest_context, mask); 934b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 935bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 9361c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 9371c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 9381c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 939c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 9402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 9412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 942adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 943655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 944aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 945b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 946aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 947bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 948b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetScreensMESA(drv, disp, screens, max_screens, num_screens); 949b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 950bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 951adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 952adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 953adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 954c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 9552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 9562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 957adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 958655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 9592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 9602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 9612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 962b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 9632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 964bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 9652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 9662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 967b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 968b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 969bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 970adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 971adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 972adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 973c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 9742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 9752f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 976adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 977655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 9782f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 9792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 9802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 9812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 982b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 9832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 984bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 9852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 986bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 9872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 988bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); 989b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 990b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 9912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 992bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 993adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 994adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 995adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 996c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 9977012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 998adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 999655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1000aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1001aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1002b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1003aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1004bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1005b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 1006b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1007bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10087012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 10097012d01d888d482f2c6ad1180231a482026d213aJon Smirl 10107012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1011c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 10132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 10147012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1015655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1016aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1017aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1018b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1019aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1020bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1021b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 1022b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1023bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1024adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1025adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1026adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1027c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 10292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 1030adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1031655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 10342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1035b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1037bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1038b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); 1039b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && surface) 10402f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 1041b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1042bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1043adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1044adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1045adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1046c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10477012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 1048adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1049655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 10522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 1053b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1055bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1056b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); 1057b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && mode) 10582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 10592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1060bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1061adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1062adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1063adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1064c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledconst char * EGLAPIENTRY 10657012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 10667012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1067655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1068aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1069aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1070b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 1071aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1072bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, NULL, drv); 1073b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryModeStringMESA(drv, disp, m); 1074b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1075bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10767012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 10777012d01d888d482f2c6ad1180231a482026d213aJon Smirl 10787012d01d888d482f2c6ad1180231a482026d213aJon Smirl 10799061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#endif /* EGL_MESA_screen_surface */ 10809061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 10819061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 108278d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 108378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 108478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WuEGLDisplay EGLAPIENTRY 108578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WueglGetDRMDisplayMESA(int fd) 108678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu{ 108778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(_EGL_PLATFORM_DRM, (void *) fd); 108878d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu return _eglGetDisplayHandle(dpy); 108978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu} 109078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 109178d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif /* EGL_MESA_drm_display */ 109278d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 1093b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 1094b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 1095b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 1096b2006a40eb22899d38cd31691640555228e36975Brian Paul 1097b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_VERSION_1_2 1098b2006a40eb22899d38cd31691640555228e36975Brian Paul 1099d5078b94323241a6482f54797756116b1c864327Brian Paul 1100d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1101d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 1102d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 1103d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 1104d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 1105d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 1106d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 1107d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 1108d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 1109d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 1110d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1111c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1112b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 1113b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1114b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1115b2006a40eb22899d38cd31691640555228e36975Brian Paul 111675da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 1117bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 111875da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 111921b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 1120bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, EGL_FALSE); 112121b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 1122310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 1123b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1124bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1125b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1126b2006a40eb22899d38cd31691640555228e36975Brian Paul 1127b2006a40eb22899d38cd31691640555228e36975Brian Paul 1128d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1129d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 1130d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1131c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLenum EGLAPIENTRY 1132d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 1133d5078b94323241a6482f54797756116b1c864327Brian Paul{ 1134d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1135b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLenum ret; 1136b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1137b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 1138b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglConvertApiFromIndex(t->CurrentAPIIndex); 1139b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1140bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 1141d5078b94323241a6482f54797756116b1c864327Brian Paul} 1142d5078b94323241a6482f54797756116b1c864327Brian Paul 1143d5078b94323241a6482f54797756116b1c864327Brian Paul 1144c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 1145b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 1146b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 1147b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 1148b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1149655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 11502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 11512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 11522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1153b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 11542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1155bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 11562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 11572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 11582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 1159b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (surf) ? _eglLinkSurface(surf, disp) : EGL_NO_SURFACE; 1160b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1161bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1162b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1163b2006a40eb22899d38cd31691640555228e36975Brian Paul 1164b2006a40eb22899d38cd31691640555228e36975Brian Paul 1165c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1166b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 1167b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 116811cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu /* unbind current contexts */ 11692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 117011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 117145ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 117211cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu EGLint i; 117311cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 117411cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu for (i = 0; i < _EGL_API_NUM_APIS; i++) { 117511cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLContext *ctx = t->CurrentContexts[i]; 117611cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu if (ctx) { 117711cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLDisplay *disp = ctx->Resource.Display; 1178655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDriver *drv; 1179655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 118045ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = i; 1181655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 1182655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 1183655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu drv = disp->Driver; 118417330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 1185655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&disp->Mutex); 118611cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu } 11872f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 118845ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu 118945ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = api_index; 1190b2006a40eb22899d38cd31691640555228e36975Brian Paul } 11912f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 119275da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 1193b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1194bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1195b2006a40eb22899d38cd31691640555228e36975Brian Paul} 11967012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11977012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1198b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_VERSION_1_2 */ 1199a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1200a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1201a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#ifdef EGL_KHR_image_base 1202a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1203a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1204c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLImageKHR EGLAPIENTRY 1205a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WueglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, 1206a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu EGLClientBuffer buffer, const EGLint *attr_list) 1207a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1208655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1209a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 1210a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1211a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img; 1212b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLImageKHR ret; 1213a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1214bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 1215b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 1216bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); 1217a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1218a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu img = drv->API.CreateImageKHR(drv, 1219a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu disp, context, target, buffer, attr_list); 1220b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (img) ? _eglLinkImage(img, disp) : EGL_NO_IMAGE_KHR; 1221b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1222bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1223a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1224a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1225a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1226c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1227b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) 1228a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1229655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1230a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img = _eglLookupImage(image, disp); 1231a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1232b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1233a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1234bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1235a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!img) 1236bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1237a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1238a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _eglUnlinkImage(img); 1239b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyImageKHR(drv, disp, img); 1240b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1241bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1242a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1243a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1244a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1245a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu#endif /* EGL_KHR_image_base */ 124652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 124752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 124852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 124952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 1250c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 125152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergeglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, 125252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLint numRects, const EGLint *rects) 125352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg{ 125452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLContext *ctx = _eglGetCurrentContext(); 125552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 125652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLSurface *surf = _eglLookupSurface(surface, disp); 125752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDriver *drv; 125852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLBoolean ret; 125952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 126052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 126152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 126252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg /* surface must be bound to current context in EGL 1.4 */ 126352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg if (!ctx || !_eglIsContextLinked(ctx) || surf != ctx->DrawSurface) 126452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 126552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 126652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg if (drv->API.SwapBuffersRegionNOK) 126752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); 126852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg else 126952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg ret = drv->API.SwapBuffers(drv, disp, surf); 127052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 127152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 127252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg} 127352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 127452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif /* EGL_NOK_swap_region */ 1275