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