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 Wustatic INLINE _EGLDriver * 2214eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu_eglCheckSync(_EGLDisplay *disp, _EGLSync *s, const char *msg) 2224eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 2234eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 2244eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!drv) 2254eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2264eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu if (!s) { 2274eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglError(EGL_BAD_PARAMETER, msg); 2284eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return NULL; 2294eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu } 2304eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu return drv; 2314eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 2324eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 2334eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 234f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#ifdef EGL_MESA_screen_surface 235f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 236f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 237f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 238f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 239f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 240f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 241f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 242f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 243f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!scrn) { 244f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_SCREEN_MESA, msg); 245f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 246f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 247f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 248f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 249f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 250f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 251f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wustatic INLINE _EGLDriver * 252f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 253f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu{ 254f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _EGLDriver *drv = _eglCheckDisplay(disp, msg); 255f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!drv) 256f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 257f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu if (!m) { 258f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu _eglError(EGL_BAD_MODE_MESA, msg); 259f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return NULL; 260f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu } 261f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu return drv; 262f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu} 263f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 264f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 265f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu#endif /* EGL_MESA_screen_surface */ 266f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 267f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu 268f3e03e1277839cddc35e0cc3427a7972bc17a10aChia-I Wu/** 269655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Lookup and lock a display. 270655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 271655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE _EGLDisplay * 272655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglLockDisplay(EGLDisplay display) 273655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 274655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *dpy = _eglLookupDisplay(display); 275655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu if (dpy) 276655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&dpy->Mutex); 277655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu return dpy; 278655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 279655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 280655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 281655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 282655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu * Unlock a display. 283655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu */ 284655f4654675e601a9482e40d8e50156c965b8934Chia-I Wustatic INLINE void 285655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu_eglUnlockDisplay(_EGLDisplay *dpy) 286655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu{ 287655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&dpy->Mutex); 288655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu} 289655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 290655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 291655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu/** 2926052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the first EGL function that an application calls. 293db5ce8b3843a03c6f83a02a79f033d7e74784dd5Chia-I Wu * It associates a private _EGLDisplay object to the native display. 294adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 2951ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 2964aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglGetDisplay(EGLNativeDisplayType nativeDisplay) 297adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 29885fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke _EGLPlatformType plat = _eglGetNativePlatform(nativeDisplay); 299f22665df95406567193dee0089f4830664ff4101Chia-I Wu _EGLDisplay *dpy = _eglFindDisplay(plat, (void *) nativeDisplay); 300721ba15bf4596b2e9589e7656005b387724875c3Brian Paul return _eglGetDisplayHandle(dpy); 301adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 302adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 303adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3046052af172f0241e6678cd16efac0a0f14f40146cBrian Paul/** 3056052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * This is typically the second EGL function that an application calls. 3066052af172f0241e6678cd16efac0a0f14f40146cBrian Paul * Here we load/initialize the actual hardware driver. 3076052af172f0241e6678cd16efac0a0f14f40146cBrian Paul */ 3081ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 309adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 310adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 311655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3127e2458c7b55b2662067d8cce8a962d8c2bbd3a43Jonathan White 3132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 314bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 3152f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 316a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (!disp->Initialized) { 317f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!_eglMatchDriver(disp, EGL_FALSE)) 318f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); 3192f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 320310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu /* limit to APIs supported by core */ 321a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu disp->ClientAPIs &= _EGL_API_ALL_BITS; 322adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 3232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu /* Update applications version of major and minor if not NULL */ 3252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if ((major != NULL) && (minor != NULL)) { 326a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu *major = disp->VersionMajor; 327a4a38dcf61f141297a083ccac217200947d57b0dChia-I Wu *minor = disp->VersionMinor; 3282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 330bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 331adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 332adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 333adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3341ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 335adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglTerminate(EGLDisplay dpy) 336adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 337655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 3382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!disp) 340bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 3412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 342a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu if (disp->Initialized) { 343a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu _EGLDriver *drv = disp->Driver; 344a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu 345ccc2b0bc65b02d4582d52d133290c8cb046bce8fChia-I Wu drv->API.Terminate(drv, disp); 346a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu /* do not reset disp->Driver */ 347a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu disp->Initialized = EGL_FALSE; 3482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 3492f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 350bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 3512f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu} 3522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 3541ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian Paulconst char * EGLAPIENTRY 355adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglQueryString(EGLDisplay dpy, EGLint name) 356adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 357655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 358aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 359b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 360aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 361bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, NULL, drv); 362b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryString(drv, disp, name); 363b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 364bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 365adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 366adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 367adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3681ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 3702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 371adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 372655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 373aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 374b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 375aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 376bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 377b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 378b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 379bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 380adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 381adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 382adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3831ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 3842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 3852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint config_size, EGLint *num_config) 386adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 387655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 388aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 389b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 390aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 391bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 392b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, 3932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu config_size, num_config); 394b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 395bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 396adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 397adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 398adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 3991ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4002f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 4012f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 402adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 403655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4042f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 406b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 4072f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 408bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); 409b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 410b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 411bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 412adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 413adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 414adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4151ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 4162f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 4172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 4182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 419655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4202f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 4212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *share = _eglLookupContext(share_list, disp); 4222f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 4232f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context; 424b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 4252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4266b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_CONTEXT, drv); 4276b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4286b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!config) { 4296b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu /* config may be NULL if surfaceless */ 430b50703aea55450e04bcd8154335774786e0f253bIan Romanick if (!disp->Extensions.KHR_surfaceless_context) 4316b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT); 4326b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu } 433b90a3e7d8b1bcd412ddbf2a4803de2756dacd436Kristian Høgsberg 434b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!share && share_list != EGL_NO_CONTEXT) 435bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); 4362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 4372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 4384ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (context) ? _eglLinkContext(context) : EGL_NO_CONTEXT; 439b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 440bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 441adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 442adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 443adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4441ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 445adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroyContext(EGLDisplay dpy, EGLContext ctx) 446adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 447655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 448aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 449aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 450b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 451aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 452bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 4532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkContext(context); 454b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyContext(drv, disp, context); 455b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 456bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 457adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 458adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 459adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4601ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 4612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 4622f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLContext ctx) 463adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 464655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 4652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 4662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 4672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *read_surf = _eglLookupSurface(read, disp); 4682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 469b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 4702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 47117330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp) 472bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 47317330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu drv = disp->Driver; 47417330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 47517330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu /* display is allowed to be uninitialized under certain condition */ 47617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (!disp->Initialized) { 47717330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE || 47817330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu ctx != EGL_NO_CONTEXT) 479bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 48017330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu } 4812f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!drv) 482bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(disp, EGL_TRUE); 48317330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu 4842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 485bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 4866b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!draw_surf || !read_surf) { 4876b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu /* surfaces may be NULL if surfaceless */ 488b50703aea55450e04bcd8154335774786e0f253bIan Romanick if (!disp->Extensions.KHR_surfaceless_context) 4896b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4906b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 4916b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if ((!draw_surf && draw != EGL_NO_SURFACE) || 4926b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu (!read_surf && read != EGL_NO_SURFACE)) 4936b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 4946b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (draw_surf || read_surf) 4956b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_FALSE); 4966b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu } 4972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 498b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 499b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 500bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 501adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 502adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 503adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5041ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5052f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryContext(EGLDisplay dpy, EGLContext ctx, 5062f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 507adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 508655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 509aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 510aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 511b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 512aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 513bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 514b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryContext(drv, disp, context, attribute, value); 515b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 516bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 517adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 518adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 519adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5201ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5212f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 5224aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativeWindowType window, const EGLint *attrib_list) 523adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 524655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5272f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 528b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 530bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 53185fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke if (disp->Platform != _eglGetNativePlatform(disp->PlatformDisplay)) 532f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 5332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 5354ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 536b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 537bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 538adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 539adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 540adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5411ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 5434aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I Wu EGLNativePixmapType pixmap, const EGLint *attrib_list) 544adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 545655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5472f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 549b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5502f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 551bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 55285fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke if (disp->Platform != _eglGetNativePlatform(disp->PlatformDisplay)) 553f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE); 5542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 5564ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 557b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 558bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 559adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 560adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 561adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5621ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 5632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 5642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 565adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 566655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 5672f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 5682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 5692f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 570b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 5712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 572bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 5732f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 5742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 5754ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 576b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 577bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 578adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 579adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 580adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5811ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 582adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglDestroySurface(EGLDisplay dpy, EGLSurface surface) 583adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 584655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 585aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 586aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 587b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 588aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 589bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 5902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _eglUnlinkSurface(surf); 591b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroySurface(drv, disp, surf); 592b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 593bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 594adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 595adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5961ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 5972f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQuerySurface(EGLDisplay dpy, EGLSurface surface, 5982f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 599adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 600655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 601aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 602aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 603b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 604aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 605bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 606b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); 607b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 608bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 609adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 610adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6111ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6122f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 6132f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint value) 614adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 615655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 616aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 617aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 618b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 619aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 620bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 621b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 622b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 623bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 624adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 625adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 626adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6271ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 628adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 629adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 630655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 631aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 632aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 633b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 634aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 635bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 636b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.BindTexImage(drv, disp, surf, buffer); 637b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 638bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 639adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 640adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 641adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6421ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 643adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 644adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 645655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 646aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 647aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 648b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 649aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 650bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 651b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); 652b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 653bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 654adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 655adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 656adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6571ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 658adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglSwapInterval(EGLDisplay dpy, EGLint interval) 659adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 660655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 66157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 66257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu _EGLSurface *surf; 663aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 664b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 665aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 666bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 66757da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 668d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 669d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu ctx->Resource.Display != disp) 670bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 67157da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 67257da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu surf = ctx->DrawSurface; 673d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetSurfaceHandle(surf) == EGL_NO_SURFACE) 674bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 67557da499d7ba074128e8c97b8076805e403a2b9c4Chia-I Wu 676b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapInterval(drv, disp, surf, interval); 677b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 678bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 679adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 680adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 681adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 6821ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 6832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 684adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 685bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 686655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 687aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 688aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 689b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 690aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 691bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 692bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 693bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu /* surface must be bound to current context in EGL 1.4 */ 694d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 695d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu surf != ctx->DrawSurface) 696bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 697b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 698b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.SwapBuffers(drv, disp, surf); 699bbfd0e26151bef567c152c8018ecc15f04c70914Chia-I Wu 700bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 701adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 702adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 703adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7041ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 7054aed0944f4b8b8d14d210cf6bc87ccddfa9a77ecChia-I WueglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 706adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 707655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 708aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 709aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 710b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 711aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 712bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 71385fe9484945cb57ffd49df248b0e5057eba6af04Benjamin Franzke if (disp->Platform != _eglGetNativePlatform(disp->PlatformDisplay)) 714f22665df95406567193dee0089f4830664ff4101Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_FALSE); 715b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyBuffers(drv, disp, surf, target); 716b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 717bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 718adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 719adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 720adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7211ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 7226c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitClient(void) 723adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7246c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7256c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 7262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 727b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 7282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7296c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 730bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 7312f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 732ecb3b3102a3022e31cf9d75ae099eddbe298517fChia-I Wu disp = ctx->Resource.Display; 733655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 734655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 735655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu /* let bad current context imply bad current surface */ 736d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 737d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 738bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 739b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 740b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 741a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7422f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 743b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitClient(drv, disp, ctx); 7446c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 745bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 7466c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu} 7476c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7482f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7496c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WuEGLBoolean EGLAPIENTRY 7506c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I WueglWaitGL(void) 7516c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu{ 7526c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 7536c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 7546c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLint es_index = _eglConvertApiToIndex(EGL_OPENGL_ES_API); 7556c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu EGLBoolean ret; 7566c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7576c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (api_index != es_index && _eglIsCurrentThreadDummy()) 758bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 7596c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu 7606c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = es_index; 7616c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu ret = eglWaitClient(); 7626c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu t->CurrentAPIIndex = api_index; 7636c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu return ret; 764adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 765adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 766adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7671ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 768adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglWaitNative(EGLint engine) 769adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 7706c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 7716c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu _EGLDisplay *disp; 7722f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 773b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 7742f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 7756c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu if (!ctx) 776bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 777b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 778655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu disp = ctx->Resource.Display; 779655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 780655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 7816c21c8862bc6edc9cddf3b6eb6f276961099a7a8Chia-I Wu /* let bad current context imply bad current surface */ 782d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 783d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 784bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 785b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 786b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* a valid current context implies an initialized current display */ 787a933259daa98615ad7473c53623a96f612e9a311Chia-I Wu assert(disp->Initialized); 7882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu drv = disp->Driver; 789b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.WaitNative(drv, disp, engine); 7902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 791bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 792adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 793adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 794adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 7951ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLDisplay EGLAPIENTRY 796adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentDisplay(void) 797adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 798a1717970e78d897f527273278bf1346cc86a5741Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 799b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLDisplay ret; 800b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 801b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = (ctx) ? _eglGetDisplayHandle(ctx->Resource.Display) : EGL_NO_DISPLAY; 802b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 803bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 804adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 805adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 806adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLContext EGLAPIENTRY 808adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentContext(void) 809adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 810adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLContext *ctx = _eglGetCurrentContext(); 811b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLContext ret; 812b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 813b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetContextHandle(ctx); 814b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 815bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 816adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 817adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 818adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8191ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLSurface EGLAPIENTRY 820adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetCurrentSurface(EGLint readdraw) 821adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 82261906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLContext *ctx = _eglGetCurrentContext(); 823b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLint err = EGL_SUCCESS; 82461906631202af855d0742586956ff9f34522a525Chia-I Wu _EGLSurface *surf; 825b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 82661906631202af855d0742586956ff9f34522a525Chia-I Wu 82761906631202af855d0742586956ff9f34522a525Chia-I Wu if (!ctx) 828bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_NO_SURFACE); 82961906631202af855d0742586956ff9f34522a525Chia-I Wu 83061906631202af855d0742586956ff9f34522a525Chia-I Wu switch (readdraw) { 83161906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_DRAW: 83261906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->DrawSurface; 83361906631202af855d0742586956ff9f34522a525Chia-I Wu break; 83461906631202af855d0742586956ff9f34522a525Chia-I Wu case EGL_READ: 83561906631202af855d0742586956ff9f34522a525Chia-I Wu surf = ctx->ReadSurface; 83661906631202af855d0742586956ff9f34522a525Chia-I Wu break; 83761906631202af855d0742586956ff9f34522a525Chia-I Wu default: 83861906631202af855d0742586956ff9f34522a525Chia-I Wu surf = NULL; 839b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu err = EGL_BAD_PARAMETER; 84061906631202af855d0742586956ff9f34522a525Chia-I Wu break; 84161906631202af855d0742586956ff9f34522a525Chia-I Wu } 84261906631202af855d0742586956ff9f34522a525Chia-I Wu 843b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglGetSurfaceHandle(surf); 844b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 845bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, err, ret); 846adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 847adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 848adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 8491ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLint EGLAPIENTRY 850adbff7e977c7c768e752a24fb643d68bdf961bfeBrian PauleglGetError(void) 851adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 85248822796339cb4a55714dc3f1abbe379562ec538Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 85348822796339cb4a55714dc3f1abbe379562ec538Brian Paul EGLint e = t->LastError; 85475da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (!_eglIsCurrentThreadDummy()) 85575da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu t->LastError = EGL_SUCCESS; 856adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul return e; 857adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 858adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 859adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 86095f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I Wu__eglMustCastToProperFunctionPointerType EGLAPIENTRY 86195f8f75ad8bdb1d8e1cc16ea91fed8c407c36abdChia-I WueglGetProcAddress(const char *procname) 862adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 8639061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu static const struct { 864adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const char *name; 865adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLProc function; 8669061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu } egl_functions[] = { 867f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu /* core functions should not be queryable, but, well... */ 868f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#ifdef _EGL_GET_CORE_ADDRESSES 869f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu /* alphabetical order */ 870f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglBindAPI", (_EGLProc) eglBindAPI }, 871f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 872f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 873f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 874f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateContext", (_EGLProc) eglCreateContext }, 875f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer }, 876f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 877f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 878f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 879f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 880f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 881f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 882f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 883f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 884f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 885f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 886f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 887f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetError", (_EGLProc) eglGetError }, 888f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 889f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglInitialize", (_EGLProc) eglInitialize }, 890f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 891f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryAPI", (_EGLProc) eglQueryAPI }, 892f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryContext", (_EGLProc) eglQueryContext }, 893f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQueryString", (_EGLProc) eglQueryString }, 894f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 895f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 896f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglReleaseThread", (_EGLProc) eglReleaseThread }, 897f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 898f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 899f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 900f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglTerminate", (_EGLProc) eglTerminate }, 901f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitClient", (_EGLProc) eglWaitClient }, 902f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitGL", (_EGLProc) eglWaitGL }, 903f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu { "eglWaitNative", (_EGLProc) eglWaitNative }, 904f508c0c09702a5ea53dcb58721f3674605594c6eChia-I Wu#endif /* _EGL_GET_CORE_ADDRESSES */ 905b2006a40eb22899d38cd31691640555228e36975Brian Paul#ifdef EGL_MESA_screen_surface 9067012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 9077012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 9087012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 9091c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 9107012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 9117012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 91248822796339cb4a55714dc3f1abbe379562ec538Brian Paul { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 9137012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 9147012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 9157012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 9167012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 9177012d01d888d482f2c6ad1180231a482026d213aJon Smirl { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 918b2006a40eb22899d38cd31691640555228e36975Brian Paul#endif /* EGL_MESA_screen_surface */ 91978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 92078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu { "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA }, 92178d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif 922a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR }, 923a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu { "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR }, 924f63e129d5fef73b0710d294ddc19440d9d388836Chia-I Wu { "eglCreateSyncKHR", (_EGLProc) eglCreateSyncKHR }, 925f63e129d5fef73b0710d294ddc19440d9d388836Chia-I Wu { "eglDestroySyncKHR", (_EGLProc) eglDestroySyncKHR }, 926f63e129d5fef73b0710d294ddc19440d9d388836Chia-I Wu { "eglClientWaitSyncKHR", (_EGLProc) eglClientWaitSyncKHR }, 927f63e129d5fef73b0710d294ddc19440d9d388836Chia-I Wu { "eglSignalSyncKHR", (_EGLProc) eglSignalSyncKHR }, 928f63e129d5fef73b0710d294ddc19440d9d388836Chia-I Wu { "eglGetSyncAttribKHR", (_EGLProc) eglGetSyncAttribKHR }, 92952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 93052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg { "eglSwapBuffersRegionNOK", (_EGLProc) eglSwapBuffersRegionNOK }, 93152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif 932b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#ifdef EGL_MESA_drm_image 933b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg { "eglCreateDRMImageMESA", (_EGLProc) eglCreateDRMImageMESA }, 934b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg { "eglExportDRMImageMESA", (_EGLProc) eglExportDRMImageMESA }, 935b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#endif 936f274dfaca4b53bae92dfe6a72c1890c381d84746Kristian Høgsberg#ifdef EGL_WL_bind_wayland_display 9376b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke { "eglBindWaylandDisplayWL", (_EGLProc) eglBindWaylandDisplayWL }, 9386b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke { "eglUnbindWaylandDisplayWL", (_EGLProc) eglUnbindWaylandDisplayWL }, 939e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg { "eglQueryWaylandBufferWL", (_EGLProc) eglQueryWaylandBufferWL }, 9406b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#endif 9417d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund { "eglPostSubBufferNV", (_EGLProc) eglPostSubBufferNV }, 942adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul { NULL, NULL } 943adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul }; 944adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint i; 945b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu _EGLProc ret; 9469061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 9479061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (!procname) 948bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, NULL); 949b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 950b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = NULL; 9519061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu if (strncmp(procname, "egl", 3) == 0) { 9529061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu for (i = 0; egl_functions[i].name; i++) { 953b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (strcmp(egl_functions[i].name, procname) == 0) { 954b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = egl_functions[i].function; 955b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu break; 956b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu } 957adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 958adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul } 959f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu if (!ret) 960f2aa361f3b58a91780c9358b3f8716f6434074c7Chia-I Wu ret = _eglGetDriverProc(procname); 961e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 962bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 963adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 964adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 965adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9669061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#ifdef EGL_MESA_screen_surface 9679061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 9689061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 969adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* 970adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * EGL_MESA_screen extension 971adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 972adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9731ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 974c22990c29a5cdff89e6e3914aa565acc88a6a407Brian PauleglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 975adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul const EGLint *attrib_list, EGLModeMESA *modes, 976adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLint modes_size, EGLint *num_modes) 977adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 978655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 979aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 980aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 981b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 982aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 983bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 984b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 985b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu modes, modes_size, num_modes); 986b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 987bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 988adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 989adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 990adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 9911ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 9922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 9932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mode_size, EGLint *num_mode) 994adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 995655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 996aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 997aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 998b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 999aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1000bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1001b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 1002b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1003bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1004adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1005adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1006adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10071ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 10082f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 10092f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 1010adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1011655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1012aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1013aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1014b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1015aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1016bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, EGL_FALSE, drv); 1017b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 1018b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1019bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1020adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1021adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1022adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 10231ed1027e886980b9b0f48fa6bfcf3d6e209c7787Brian PaulEGLBoolean EGLAPIENTRY 10242f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 10252f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint mask) 10262f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu{ 1027655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10282f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *source_context = _eglLookupContext(source, disp); 10292f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLContext *dest_context = _eglLookupContext(dest, disp); 10302f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1031b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10322f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1033bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONTEXT(disp, source_context, EGL_FALSE, drv); 1034b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!dest_context) 1035bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 10362f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1037b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.CopyContextMESA(drv, disp, 1038b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu source_context, dest_context, mask); 1039b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1040bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 10411c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl} 10421c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 10431c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl 1044c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 10462f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint max_screens, EGLint *num_screens) 1047adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1048655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1049aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1050b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1051aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1052bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1053b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.GetScreensMESA(drv, disp, screens, max_screens, num_screens); 1054b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1055bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1056adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1057adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1058adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1059c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 10602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 10612f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu const EGLint *attrib_list) 1062adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1063655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 10652f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 10662f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1067b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 10682f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1069bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 10702f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 10712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 10724ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1073b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1074bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1075adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1076adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1077adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1078c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 10792f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 10802f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface surface, EGLModeMESA mode) 1081adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1082655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 10832f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 10842f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf = _eglLookupSurface(surface, disp); 10852f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 10862f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 1087b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 10882f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1089bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 10902f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!surf && surface != EGL_NO_SURFACE) 1091bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 10922f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!m && mode != EGL_NO_MODE_MESA) 1093bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); 1094b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1095b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 10962f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1097bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1098adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1099adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1101c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 11027012d01d888d482f2c6ad1180231a482026d213aJon SmirleglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 1103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1104655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1105aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1106aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1107b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1108aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1109bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1110b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 1111b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1112bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 11137012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 11147012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11157012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1116c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 11172f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 11182f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLint attribute, EGLint *value) 11197012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1120655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1121aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1122aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1123b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1124aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1125bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1126b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 1127b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1128bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1130adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1131adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1132c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 11332f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I WueglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 11342f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu EGLSurface *surface) 1135adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1136655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 11372f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 11382f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 11392f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1140b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 11412f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1142bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1143b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); 1144b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && surface) 11452f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *surface = _eglGetSurfaceHandle(surf); 1146b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1147bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1150adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1151c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 11527012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 1153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 1154655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 11552f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 11562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 11572f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLMode *m; 1158b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 11592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1160bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1161b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); 1162b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (ret && mode) 11632f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu *mode = m->Handle; 11642f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1165bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1166adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul} 1167adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1168adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 1169c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledconst char * EGLAPIENTRY 11707012d01d888d482f2c6ad1180231a482026d213aJon SmirleglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 11717012d01d888d482f2c6ad1180231a482026d213aJon Smirl{ 1172655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1173aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLMode *m = _eglLookupMode(mode, disp); 1174aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu _EGLDriver *drv; 1175b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu const char *ret; 1176aed7358e54fd143033d240c6e543d403da2d7336Chia-I Wu 1177bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_MODE(disp, m, NULL, drv); 1178b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.QueryModeStringMESA(drv, disp, m); 1179b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1180bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 11817012d01d888d482f2c6ad1180231a482026d213aJon Smirl} 11827012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11837012d01d888d482f2c6ad1180231a482026d213aJon Smirl 11849061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu#endif /* EGL_MESA_screen_surface */ 11859061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 11869061d733d3f31293c145cf3b7a0f71c1bfd31989Chia-I Wu 118778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#ifdef EGL_MESA_drm_display 118878d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 118978d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WuEGLDisplay EGLAPIENTRY 119078d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I WueglGetDRMDisplayMESA(int fd) 119178d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu{ 11926a661895e946f38b21775bf9cb45ef6b22fab85aJosé Fonseca _EGLDisplay *dpy = _eglFindDisplay(_EGL_PLATFORM_DRM, (void *) (intptr_t) fd); 119378d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu return _eglGetDisplayHandle(dpy); 119478d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu} 119578d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 119678d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu#endif /* EGL_MESA_drm_display */ 119778d70ddbbd41d73b7f6040f392eb87758c39dc37Chia-I Wu 1198b2006a40eb22899d38cd31691640555228e36975Brian Paul/** 1199b2006a40eb22899d38cd31691640555228e36975Brian Paul ** EGL 1.2 1200b2006a40eb22899d38cd31691640555228e36975Brian Paul **/ 1201b2006a40eb22899d38cd31691640555228e36975Brian Paul 1202d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1203d5078b94323241a6482f54797756116b1c864327Brian Paul * Specify the client API to use for subsequent calls including: 1204d5078b94323241a6482f54797756116b1c864327Brian Paul * eglCreateContext() 1205d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentContext() 1206d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentDisplay() 1207d5078b94323241a6482f54797756116b1c864327Brian Paul * eglGetCurrentSurface() 1208d5078b94323241a6482f54797756116b1c864327Brian Paul * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 1209d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitClient() 1210d5078b94323241a6482f54797756116b1c864327Brian Paul * eglWaitNative() 1211d5078b94323241a6482f54797756116b1c864327Brian Paul * See section 3.7 "Rendering Context" in the EGL specification for details. 1212d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1213c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1214b2006a40eb22899d38cd31691640555228e36975Brian PauleglBindAPI(EGLenum api) 1215b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1216b2006a40eb22899d38cd31691640555228e36975Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1217b2006a40eb22899d38cd31691640555228e36975Brian Paul 121875da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu if (_eglIsCurrentThreadDummy()) 1219bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 122075da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu 122121b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu if (!_eglIsApiValid(api)) 1222bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, EGL_FALSE); 122321b635ffa8b59049a95d50d4c7b7a8ff6413b730Chia-I Wu 1224310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu t->CurrentAPIIndex = _eglConvertApiToIndex(api); 1225b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1226bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1227b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1228b2006a40eb22899d38cd31691640555228e36975Brian Paul 1229b2006a40eb22899d38cd31691640555228e36975Brian Paul 1230d5078b94323241a6482f54797756116b1c864327Brian Paul/** 1231d5078b94323241a6482f54797756116b1c864327Brian Paul * Return the last value set with eglBindAPI(). 1232d5078b94323241a6482f54797756116b1c864327Brian Paul */ 1233c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLenum EGLAPIENTRY 1234d5078b94323241a6482f54797756116b1c864327Brian PauleglQueryAPI(void) 1235d5078b94323241a6482f54797756116b1c864327Brian Paul{ 1236d5078b94323241a6482f54797756116b1c864327Brian Paul _EGLThreadInfo *t = _eglGetCurrentThread(); 1237b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLenum ret; 1238b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1239b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 1240b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = _eglConvertApiFromIndex(t->CurrentAPIIndex); 1241b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1242bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, ret); 1243d5078b94323241a6482f54797756116b1c864327Brian Paul} 1244d5078b94323241a6482f54797756116b1c864327Brian Paul 1245d5078b94323241a6482f54797756116b1c864327Brian Paul 1246c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLSurface EGLAPIENTRY 1247b2006a40eb22899d38cd31691640555228e36975Brian PauleglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 1248b2006a40eb22899d38cd31691640555228e36975Brian Paul EGLClientBuffer buffer, EGLConfig config, 1249b2006a40eb22899d38cd31691640555228e36975Brian Paul const EGLint *attrib_list) 1250b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 1251655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 12522f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLConfig *conf = _eglLookupConfig(config, disp); 12532f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLDriver *drv; 12542f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu _EGLSurface *surf; 1255b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLSurface ret; 12562f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 1257bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 12582f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 12592f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 12602f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu conf, attrib_list); 12614ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1262b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1263bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1264b2006a40eb22899d38cd31691640555228e36975Brian Paul} 1265b2006a40eb22899d38cd31691640555228e36975Brian Paul 1266b2006a40eb22899d38cd31691640555228e36975Brian Paul 1267c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1268b2006a40eb22899d38cd31691640555228e36975Brian PauleglReleaseThread(void) 1269b2006a40eb22899d38cd31691640555228e36975Brian Paul{ 127011cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu /* unbind current contexts */ 12712f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu if (!_eglIsCurrentThreadDummy()) { 127211cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLThreadInfo *t = _eglGetCurrentThread(); 127345ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu EGLint api_index = t->CurrentAPIIndex; 127411cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu EGLint i; 127511cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu 127611cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu for (i = 0; i < _EGL_API_NUM_APIS; i++) { 127711cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLContext *ctx = t->CurrentContexts[i]; 127811cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu if (ctx) { 127911cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu _EGLDisplay *disp = ctx->Resource.Display; 1280655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDriver *drv; 1281655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 128245ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = i; 1283655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu 1284655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglLockMutex(&disp->Mutex); 1285655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu drv = disp->Driver; 128617330479b39409a63a06ec9e6b0f8e28b585db12Chia-I Wu (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 1287655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _eglUnlockMutex(&disp->Mutex); 128811cf3cb2c463cf8af8a7e63eb9521979bfd303f8Chia-I Wu } 12892f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu } 129045ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu 129145ba53324341234144ca02122bf2c0b5ef58c361Chia-I Wu t->CurrentAPIIndex = api_index; 1292b2006a40eb22899d38cd31691640555228e36975Brian Paul } 12932f2cf461c57974abd89e4917945cc8ae6a67a72eChia-I Wu 129475da80b29556e6dbbba21e5297ca440e475f65cbChia-I Wu _eglDestroyCurrentThread(); 1295b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1296bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1297b2006a40eb22899d38cd31691640555228e36975Brian Paul} 12987012d01d888d482f2c6ad1180231a482026d213aJon Smirl 12997012d01d888d482f2c6ad1180231a482026d213aJon Smirl 1300c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLImageKHR EGLAPIENTRY 1301a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I WueglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, 1302a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu EGLClientBuffer buffer, const EGLint *attr_list) 1303a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1304655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1305a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLContext *context = _eglLookupContext(ctx, disp); 1306a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1307a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img; 1308b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLImageKHR ret; 1309a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1310bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 13116b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_image_base) 13126b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 1313b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu if (!context && ctx != EGL_NO_CONTEXT) 1314bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); 1315a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1316a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu img = drv->API.CreateImageKHR(drv, 1317a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu disp, context, target, buffer, attr_list); 13184ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1319b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1320bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1321a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1322a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1323a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1324c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 1325b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I WueglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) 1326a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu{ 1327655f4654675e601a9482e40d8e50156c965b8934Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 1328a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLImage *img = _eglLookupImage(image, disp); 1329a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _EGLDriver *drv; 1330b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu EGLBoolean ret; 1331a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1332bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 13336b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_image_base) 13346b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_FALSE); 1335a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu if (!img) 1336bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1337a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1338a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu _eglUnlinkImage(img); 1339b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu ret = drv->API.DestroyImageKHR(drv, disp, img); 1340b3bb18062005d3c9ec0f942a5e096e7e38c6f3e1Chia-I Wu 1341bef4b476d729320599264483113d577ac5eeaff1Chia-I Wu RETURN_EGL_EVAL(disp, ret); 1342a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu} 1343a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 1344a1c4a8a3c855d52fbfef10023b9a8f116e163a97Chia-I Wu 13454eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLSyncKHR EGLAPIENTRY 13464eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) 13474eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13484eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13494eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13504eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *sync; 13514eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLSyncKHR ret; 13524eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13534eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv); 13546b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.KHR_reusable_sync) 13556b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_SYNC_KHR); 13564eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13574eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list); 13584ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (sync) ? _eglLinkSync(sync) : EGL_NO_SYNC_KHR; 13594eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13604eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13614eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13624eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13634eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13644eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13654eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) 13664eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13674eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13684eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13694eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13704eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 13714eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13724eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13736b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 13746b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 13754eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _eglUnlinkSync(s); 13764eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.DestroySyncKHR(drv, disp, s); 13774eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13784eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13794eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13804eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13814eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13824eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLint EGLAPIENTRY 13834eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) 13844eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 13854eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 13864eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 13874eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 13884eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLint ret; 13894eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13904eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 13916b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 13924eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.ClientWaitSyncKHR(drv, disp, s, flags, timeout); 13934eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13944eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 13954eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 13964eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13974eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 13984eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 13994eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) 14004eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 14014eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 14024eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 14034eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 14044eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 14054eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14064eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 14076b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 14084eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.SignalSyncKHR(drv, disp, s, mode); 14094eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14104eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14114eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14124eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14134eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14144eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WuEGLBoolean EGLAPIENTRY 14154eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I WueglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value) 14164eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu{ 14174eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDisplay *disp = _eglLockDisplay(dpy); 14184eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLSync *s = _eglLookupSync(sync, disp); 14194eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGLDriver *drv; 14204eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu EGLBoolean ret; 14214eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14224eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 14236b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.KHR_reusable_sync); 14244eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value); 14254eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14264eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu RETURN_EGL_EVAL(disp, ret); 14274eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu} 14284eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 14294eebea74a81ec5fbacf2347ea88cac137ddd4d69Chia-I Wu 143052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#ifdef EGL_NOK_swap_region 143152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 1432c43ab4fe1fbb13bbfe70680c6c608ff0da73be9anobledEGLBoolean EGLAPIENTRY 143352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian HøgsbergeglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, 143452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLint numRects, const EGLint *rects) 143552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg{ 143652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLContext *ctx = _eglGetCurrentContext(); 143752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 143852c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLSurface *surf = _eglLookupSurface(surface, disp); 143952c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGLDriver *drv; 144052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg EGLBoolean ret; 144152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 144252c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 144352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 14446b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.NOK_swap_region) 14456b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_FALSE); 14466b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 144752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg /* surface must be bound to current context in EGL 1.4 */ 1448d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 1449d19afc57fe49816f3f3290410e0124d326577be2Chia-I Wu surf != ctx->DrawSurface) 145052c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 145152c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 14526b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); 145352c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 145452c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 145552c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg} 145652c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg 145752c554a79d3ed3104a9f7d112faa9129073b5a25Kristian Høgsberg#endif /* EGL_NOK_swap_region */ 1458b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1459b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1460b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#ifdef EGL_MESA_drm_image 1461b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1462b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergEGLImageKHR EGLAPIENTRY 1463b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergeglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list) 1464b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg{ 1465b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1466b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDriver *drv; 1467b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLImage *img; 1468b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLImageKHR ret; 1469b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1470b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 14716b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu if (!disp->Extensions.MESA_drm_image) 14726b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 1473b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1474b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg img = drv->API.CreateDRMImageMESA(drv, disp, attr_list); 14754ce33ec606292d92eff5afad6f50e1acc7109729Chia-I Wu ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1476b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1477b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1478b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg} 1479b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1480b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergEGLBoolean EGLAPIENTRY 1481b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian HøgsbergeglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, 1482b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLint *name, EGLint *handle, EGLint *stride) 1483b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg{ 1484b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1485b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLImage *img = _eglLookupImage(image, disp); 1486b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGLDriver *drv; 1487b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg EGLBoolean ret; 1488b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1489b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 14906b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu assert(disp->Extensions.MESA_drm_image); 14916b2f1561ad66c358a5d6b7a5ed5eb8f550a3b098Chia-I Wu 1492b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg if (!img) 1493b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1494b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1495b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg ret = drv->API.ExportDRMImageMESA(drv, disp, img, name, handle, stride); 1496b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1497b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1498b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg} 1499b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg 1500b7a8893a2413adfddf4dc836676a19463fb6ffd7Kristian Høgsberg#endif 15016b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15026b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#ifdef EGL_WL_bind_wayland_display 15036b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzkestruct wl_display; 15046b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15056b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeEGLBoolean EGLAPIENTRY 15066b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeeglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 15076b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke{ 15086b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDisplay *disp = _eglLockDisplay(dpy); 15096b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDriver *drv; 15106b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke EGLBoolean ret; 15116b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15126b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 15136b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke assert(disp->Extensions.WL_bind_wayland_display); 15146b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15156b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke if (!display) 15166b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 15176b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15186b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke ret = drv->API.BindWaylandDisplayWL(drv, disp, display); 15196b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15206b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_EVAL(disp, ret); 15216b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke} 15226b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15236b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeEGLBoolean EGLAPIENTRY 15246b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin FranzkeeglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 15256b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke{ 15266b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDisplay *disp = _eglLockDisplay(dpy); 15276b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGLDriver *drv; 15286b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke EGLBoolean ret; 15296b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15306b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 15316b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke assert(disp->Extensions.WL_bind_wayland_display); 15326b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15336b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke if (!display) 15346b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 15356b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15366b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke ret = drv->API.UnbindWaylandDisplayWL(drv, disp, display); 15376b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke 15386b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke RETURN_EGL_EVAL(disp, ret); 15396b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke} 1540e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg 1541e6a33570b73aa56c87818d7f67a122d4427b7841Kristian HøgsbergEGLBoolean EGLAPIENTRY 1542e6a33570b73aa56c87818d7f67a122d4427b7841Kristian HøgsbergeglQueryWaylandBufferWL(EGLDisplay dpy,struct wl_buffer *buffer, 1543e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg EGLint attribute, EGLint *value) 1544e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg{ 1545e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg _EGLDisplay *disp = _eglLockDisplay(dpy); 1546e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg _EGLDriver *drv; 1547e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg EGLBoolean ret; 1548e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg 1549e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1550e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg assert(disp->Extensions.WL_bind_wayland_display); 1551e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg 1552e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg if (!buffer) 1553e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1554e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg 1555e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg ret = drv->API.QueryWaylandBufferWL(drv, disp, buffer, attribute, value); 1556e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg 1557e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg RETURN_EGL_EVAL(disp, ret); 1558e6a33570b73aa56c87818d7f67a122d4427b7841Kristian Høgsberg} 15596b369c4c7cd8a52f99bbff2a57fb316b33a87495Benjamin Franzke#endif 15607d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 15617d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 15627d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik HöglundEGLBoolean EGLAPIENTRY 15637d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik HöglundeglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, 15647d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund EGLint x, EGLint y, EGLint width, EGLint height) 15657d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund{ 15667d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund _EGLDisplay *disp = _eglLockDisplay(dpy); 15677d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund _EGLSurface *surf = _eglLookupSurface(surface, disp); 15687d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund _EGLDriver *drv; 15697d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund EGLBoolean ret; 15707d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 15717d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 15727d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 15737d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund if (!disp->Extensions.NV_post_sub_buffer) 15747d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund RETURN_EGL_EVAL(disp, EGL_FALSE); 15757d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 15767d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund ret = drv->API.PostSubBufferNV(drv, disp, surf, x, y, width, height); 15777d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund 15787d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund RETURN_EGL_EVAL(disp, ret); 15797d46b45c5bd7d1ab3e32a2722ca65061ca80dc34Fredrik Höglund} 1580