1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com> 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2010-2011 LunarG, Inc. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DEALINGS IN THE SOFTWARE. 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Public EGL API entrypoints 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Generally, we use the EGLDisplay parameter as a key to lookup the 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * appropriate device driver handle, then jump though the driver's 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * dispatch table to handle the function. 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * That allows us the option of supporting multiple, simultaneous, 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * heterogeneous hardware devices in the future. 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The EGLDisplay, EGLConfig, EGLContext and EGLSurface types are 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * opaque handles. Internal objects are linked to a display to 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * create the handles. 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For each public API entry point, the opaque handles are looked up 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * before being dispatched to the drivers. When it fails to look up 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a handle, one of 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_DISPLAY 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_CONFIG 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_CONTEXT 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_SURFACE 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_SCREEN_MESA 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_MODE_MESA 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * is generated and the driver function is not called. An 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * uninitialized EGLDisplay has no driver associated with it. When 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * such display is detected, 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_NOT_INITIALIZED 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * is generated. 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Some of the entry points use current display, context, or surface 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * implicitly. For such entry points, the implicit objects are also 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * checked before calling the driver function. Other than the 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * errors listed above, 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_BAD_CURRENT_SURFACE 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * may also be generated. 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Notes on naming conventions: 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglFooBar - public EGL function 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_FOO_BAR - public EGL token 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGLDatatype - public EGL datatype 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _eglFooBar - private EGL function 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _EGLDatatype - private EGL datatype, typedef'd struct 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _egl_struct - private EGL struct, non-typedef'd 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h> 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdlib.h> 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <string.h> 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglcontext.h" 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "egldisplay.h" 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "egltypedefs.h" 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglcurrent.h" 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "egldriver.h" 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglsurface.h" 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglconfig.h" 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglscreen.h" 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglmode.h" 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglimage.h" 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "eglsync.h" 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Macros to help return an API entrypoint. 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * These macros will unlock the display and record the error code. 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RETURN_EGL_ERROR(disp, err, ret) \ 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org do { \ 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (disp) \ 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlockDisplay(disp); \ 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* EGL error codes are non-zero */ \ 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (err) \ 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(err, __FUNCTION__); \ 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; \ 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } while (0) 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RETURN_EGL_SUCCESS(disp, ret) \ 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_SUCCESS, ret) 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* record EGL_SUCCESS only when ret evaluates to true */ 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define RETURN_EGL_EVAL(disp, ret) \ 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, (ret) ? EGL_SUCCESS : 0, ret) 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * A bunch of macros and checks to simplify error checking. 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_DISPLAY(disp, ret, drv) \ 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org do { \ 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv = _eglCheckDisplay(disp, __FUNCTION__); \ 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) \ 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, 0, ret); \ 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } while (0) 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_OBJECT(disp, type, obj, ret, drv) \ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org do { \ 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv = _eglCheck ## type(disp, obj, __FUNCTION__); \ 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) \ 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, 0, ret); \ 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } while (0) 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_SURFACE(disp, surf, ret, drv) \ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_OBJECT(disp, Surface, surf, ret, drv) 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_CONTEXT(disp, context, ret, drv) \ 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_OBJECT(disp, Context, context, ret, drv) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_CONFIG(disp, conf, ret, drv) \ 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_OBJECT(disp, Config, conf, ret, drv) 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_SCREEN(disp, scrn, ret, drv) \ 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_OBJECT(disp, Screen, scrn, ret, drv) 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_MODE(disp, m, ret, drv) \ 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_OBJECT(disp, Mode, m, ret, drv) 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _EGL_CHECK_SYNC(disp, s, ret, drv) \ 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_OBJECT(disp, Sync, s, ret, drv) 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckDisplay(_EGLDisplay *disp, const char *msg) 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp) { 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_DISPLAY, msg); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Initialized) { 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_NOT_INITIALIZED, msg); 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return disp->Driver; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckSurface(_EGLDisplay *disp, _EGLSurface *surf, const char *msg) 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = _eglCheckDisplay(disp, msg); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!surf) { 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_SURFACE, msg); 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drv; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckContext(_EGLDisplay *disp, _EGLContext *context, const char *msg) 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = _eglCheckDisplay(disp, msg); 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!context) { 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_CONTEXT, msg); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drv; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckConfig(_EGLDisplay *disp, _EGLConfig *conf, const char *msg) 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = _eglCheckDisplay(disp, msg); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!conf) { 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_CONFIG, msg); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drv; 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckSync(_EGLDisplay *disp, _EGLSync *s, const char *msg) 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = _eglCheckDisplay(disp, msg); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!s) { 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_PARAMETER, msg); 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drv; 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_screen_surface 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckScreen(_EGLDisplay *disp, _EGLScreen *scrn, const char *msg) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = _eglCheckDisplay(disp, msg); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!scrn) { 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_SCREEN_MESA, msg); 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drv; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDriver * 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglCheckMode(_EGLDisplay *disp, _EGLMode *m, const char *msg) 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = _eglCheckDisplay(disp, msg); 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!m) { 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglError(EGL_BAD_MODE_MESA, msg); 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drv; 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* EGL_MESA_screen_surface */ 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Lookup and lock a display. 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE _EGLDisplay * 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglLockDisplay(EGLDisplay display) 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *dpy = _eglLookupDisplay(display); 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dpy) 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglLockMutex(&dpy->Mutex); 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dpy; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unlock a display. 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_eglUnlockDisplay(_EGLDisplay *dpy) 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlockMutex(&dpy->Mutex); 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is typically the first EGL function that an application calls. 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * It associates a private _EGLDisplay object to the native display. 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLDisplay EGLAPIENTRY 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetDisplay(EGLNativeDisplayType nativeDisplay) 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLPlatformType plat = _eglGetNativePlatform(nativeDisplay); 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *dpy = _eglFindDisplay(plat, (void *) nativeDisplay); 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _eglGetDisplayHandle(dpy); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is typically the second EGL function that an application calls. 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Here we load/initialize the actual hardware driver. 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp) 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Initialized) { 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_eglMatchDriver(disp, EGL_FALSE)) 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* limit to APIs supported by core */ 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org disp->ClientAPIs &= _EGL_API_ALL_BITS; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Update applications version of major and minor if not NULL */ 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((major != NULL) && (minor != NULL)) { 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *major = disp->VersionMajor; 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *minor = disp->VersionMinor; 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(disp, EGL_TRUE); 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglTerminate(EGLDisplay dpy) 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp) 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (disp->Initialized) { 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv = disp->Driver; 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv->API.Terminate(drv, disp); 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* do not reset disp->Driver */ 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org disp->Initialized = EGL_FALSE; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(disp, EGL_TRUE); 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst char * EGLAPIENTRY 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryString(EGLDisplay dpy, EGLint name) 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *ret; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, NULL, drv); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryString(drv, disp, name); 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetConfigs(EGLDisplay dpy, EGLConfig *configs, 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint config_size, EGLint *num_config) 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint config_size, EGLint *num_config) 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config_size, num_config); 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint *value) 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLContext EGLAPIENTRY 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list, 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const EGLint *attrib_list) 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *share = _eglLookupContext(share_list, disp); 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *context; 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLContext ret; 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_NO_CONTEXT, drv); 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!config) { 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* config may be NULL if surfaceless */ 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.KHR_surfaceless_context) 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT); 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!share && share_list != EGL_NO_CONTEXT) 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_CONTEXT); 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org context = drv->API.CreateContext(drv, disp, conf, share, attrib_list); 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (context) ? _eglLinkContext(context) : EGL_NO_CONTEXT; 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglDestroyContext(EGLDisplay dpy, EGLContext ctx) 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *context = _eglLookupContext(ctx, disp); 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlinkContext(context); 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.DestroyContext(drv, disp, context); 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLContext ctx) 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *context = _eglLookupContext(ctx, disp); 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *draw_surf = _eglLookupSurface(draw, disp); 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *read_surf = _eglLookupSurface(read, disp); 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp) 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv = disp->Driver; 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* display is allowed to be uninitialized under certain condition */ 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Initialized) { 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE || 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx != EGL_NO_CONTEXT) 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_DISPLAY, EGL_FALSE); 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drv) 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(disp, EGL_TRUE); 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!context && ctx != EGL_NO_CONTEXT) 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!draw_surf || !read_surf) { 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* surfaces may be NULL if surfaceless */ 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.KHR_surfaceless_context) 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((!draw_surf && draw != EGL_NO_SURFACE) || 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (!read_surf && read != EGL_NO_SURFACE)) 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (draw_surf || read_surf) 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_FALSE); 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.MakeCurrent(drv, disp, draw_surf, read_surf, context); 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryContext(EGLDisplay dpy, EGLContext ctx, 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint *value) 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *context = _eglLookupContext(ctx, disp); 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryContext(drv, disp, context, attribute, value); 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSurface EGLAPIENTRY 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLNativeWindowType window, const EGLint *attrib_list) 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface ret; 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (disp->Platform != _eglGetNativePlatform(disp->PlatformDisplay)) 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = drv->API.CreateWindowSurface(drv, disp, conf, window, attrib_list); 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSurface EGLAPIENTRY 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLNativePixmapType pixmap, const EGLint *attrib_list) 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface ret; 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (disp->Platform != _eglGetNativePlatform(disp->PlatformDisplay)) 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE); 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = drv->API.CreatePixmapSurface(drv, disp, conf, pixmap, attrib_list); 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSurface EGLAPIENTRY 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const EGLint *attrib_list) 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface ret; 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = drv->API.CreatePbufferSurface(drv, disp, conf, attrib_list); 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglDestroySurface(EGLDisplay dpy, EGLSurface surface) 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlinkSurface(surf); 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.DestroySurface(drv, disp, surf); 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQuerySurface(EGLDisplay dpy, EGLSurface surface, 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint *value) 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint value) 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.BindTexImage(drv, disp, surf, buffer); 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ReleaseTexImage(drv, disp, surf, buffer); 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglSwapInterval(EGLDisplay dpy, EGLint interval) 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->Resource.Display != disp) 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = ctx->DrawSurface; 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglGetSurfaceHandle(surf) == EGL_NO_SURFACE) 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.SwapInterval(drv, disp, surf, interval); 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* surface must be bound to current context in EGL 1.4 */ 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf != ctx->DrawSurface) 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.SwapBuffers(drv, disp, surf); 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (disp->Platform != _eglGetNativePlatform(disp->PlatformDisplay)) 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_FALSE); 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.CopyBuffers(drv, disp, surf, target); 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglWaitClient(void) 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp; 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx) 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org disp = ctx->Resource.Display; 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglLockMutex(&disp->Mutex); 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* let bad current context imply bad current surface */ 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* a valid current context implies an initialized current display */ 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Initialized); 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv = disp->Driver; 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.WaitClient(drv, disp, ctx); 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglWaitGL(void) 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLThreadInfo *t = _eglGetCurrentThread(); 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint api_index = t->CurrentAPIIndex; 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint es_index = _eglConvertApiToIndex(EGL_OPENGL_ES_API); 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (api_index != es_index && _eglIsCurrentThreadDummy()) 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t->CurrentAPIIndex = es_index; 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = eglWaitClient(); 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t->CurrentAPIIndex = api_index; 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglWaitNative(EGLint engine) 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp; 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx) 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org disp = ctx->Resource.Display; 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglLockMutex(&disp->Mutex); 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* let bad current context imply bad current surface */ 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglGetSurfaceHandle(ctx->DrawSurface) == EGL_NO_SURFACE) 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CURRENT_SURFACE, EGL_FALSE); 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* a valid current context implies an initialized current display */ 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Initialized); 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv = disp->Driver; 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.WaitNative(drv, disp, engine); 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLDisplay EGLAPIENTRY 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetCurrentDisplay(void) 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLDisplay ret; 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (ctx) ? _eglGetDisplayHandle(ctx->Resource.Display) : EGL_NO_DISPLAY; 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, ret); 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLContext EGLAPIENTRY 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetCurrentContext(void) 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLContext ret; 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = _eglGetContextHandle(ctx); 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, ret); 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSurface EGLAPIENTRY 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetCurrentSurface(EGLint readdraw) 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint err = EGL_SUCCESS; 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface ret; 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ctx) 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, EGL_NO_SURFACE); 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (readdraw) { 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case EGL_DRAW: 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = ctx->DrawSurface; 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case EGL_READ: 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = ctx->ReadSurface; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = NULL; 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org err = EGL_BAD_PARAMETER; 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = _eglGetSurfaceHandle(surf); 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(NULL, err, ret); 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLint EGLAPIENTRY 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetError(void) 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLThreadInfo *t = _eglGetCurrentThread(); 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint e = t->LastError; 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_eglIsCurrentThreadDummy()) 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t->LastError = EGL_SUCCESS; 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return e; 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__eglMustCastToProperFunctionPointerType EGLAPIENTRY 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetProcAddress(const char *procname) 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const struct { 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *name; 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLProc function; 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } egl_functions[] = { 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* core functions should not be queryable, but, well... */ 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef _EGL_GET_CORE_ADDRESSES 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* alphabetical order */ 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglBindAPI", (_EGLProc) eglBindAPI }, 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglBindTexImage", (_EGLProc) eglBindTexImage }, 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglChooseConfig", (_EGLProc) eglChooseConfig }, 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCopyBuffers", (_EGLProc) eglCopyBuffers }, 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreateContext", (_EGLProc) eglCreateContext }, 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreatePbufferFromClientBuffer", (_EGLProc) eglCreatePbufferFromClientBuffer }, 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreatePbufferSurface", (_EGLProc) eglCreatePbufferSurface }, 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreatePixmapSurface", (_EGLProc) eglCreatePixmapSurface }, 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreateWindowSurface", (_EGLProc) eglCreateWindowSurface }, 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglDestroyContext", (_EGLProc) eglDestroyContext }, 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglDestroySurface", (_EGLProc) eglDestroySurface }, 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetConfigAttrib", (_EGLProc) eglGetConfigAttrib }, 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetConfigs", (_EGLProc) eglGetConfigs }, 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetCurrentContext", (_EGLProc) eglGetCurrentContext }, 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetCurrentDisplay", (_EGLProc) eglGetCurrentDisplay }, 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetCurrentSurface", (_EGLProc) eglGetCurrentSurface }, 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetDisplay", (_EGLProc) eglGetDisplay }, 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetError", (_EGLProc) eglGetError }, 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetProcAddress", (_EGLProc) eglGetProcAddress }, 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglInitialize", (_EGLProc) eglInitialize }, 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglMakeCurrent", (_EGLProc) eglMakeCurrent }, 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryAPI", (_EGLProc) eglQueryAPI }, 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryContext", (_EGLProc) eglQueryContext }, 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryString", (_EGLProc) eglQueryString }, 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQuerySurface", (_EGLProc) eglQuerySurface }, 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglReleaseTexImage", (_EGLProc) eglReleaseTexImage }, 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglReleaseThread", (_EGLProc) eglReleaseThread }, 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglSurfaceAttrib", (_EGLProc) eglSurfaceAttrib }, 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglSwapBuffers", (_EGLProc) eglSwapBuffers }, 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglSwapInterval", (_EGLProc) eglSwapInterval }, 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglTerminate", (_EGLProc) eglTerminate }, 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglWaitClient", (_EGLProc) eglWaitClient }, 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglWaitGL", (_EGLProc) eglWaitGL }, 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglWaitNative", (_EGLProc) eglWaitNative }, 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* _EGL_GET_CORE_ADDRESSES */ 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_screen_surface 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglChooseModeMESA", (_EGLProc) eglChooseModeMESA }, 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetModesMESA", (_EGLProc) eglGetModesMESA }, 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetModeAttribMESA", (_EGLProc) eglGetModeAttribMESA }, 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCopyContextMESA", (_EGLProc) eglCopyContextMESA }, 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetScreensMESA", (_EGLProc) eglGetScreensMESA }, 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreateScreenSurfaceMESA", (_EGLProc) eglCreateScreenSurfaceMESA }, 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglShowScreenSurfaceMESA", (_EGLProc) eglShowScreenSurfaceMESA }, 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglScreenPositionMESA", (_EGLProc) eglScreenPositionMESA }, 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryScreenMESA", (_EGLProc) eglQueryScreenMESA }, 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryScreenSurfaceMESA", (_EGLProc) eglQueryScreenSurfaceMESA }, 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryScreenModeMESA", (_EGLProc) eglQueryScreenModeMESA }, 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryModeStringMESA", (_EGLProc) eglQueryModeStringMESA }, 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* EGL_MESA_screen_surface */ 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_drm_display 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetDRMDisplayMESA", (_EGLProc) eglGetDRMDisplayMESA }, 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreateImageKHR", (_EGLProc) eglCreateImageKHR }, 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglDestroyImageKHR", (_EGLProc) eglDestroyImageKHR }, 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreateSyncKHR", (_EGLProc) eglCreateSyncKHR }, 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglDestroySyncKHR", (_EGLProc) eglDestroySyncKHR }, 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglClientWaitSyncKHR", (_EGLProc) eglClientWaitSyncKHR }, 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglSignalSyncKHR", (_EGLProc) eglSignalSyncKHR }, 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglGetSyncAttribKHR", (_EGLProc) eglGetSyncAttribKHR }, 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_NOK_swap_region 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglSwapBuffersRegionNOK", (_EGLProc) eglSwapBuffersRegionNOK }, 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_drm_image 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglCreateDRMImageMESA", (_EGLProc) eglCreateDRMImageMESA }, 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglExportDRMImageMESA", (_EGLProc) eglExportDRMImageMESA }, 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_WL_bind_wayland_display 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglBindWaylandDisplayWL", (_EGLProc) eglBindWaylandDisplayWL }, 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglUnbindWaylandDisplayWL", (_EGLProc) eglUnbindWaylandDisplayWL }, 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglQueryWaylandBufferWL", (_EGLProc) eglQueryWaylandBufferWL }, 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { "eglPostSubBufferNV", (_EGLProc) eglPostSubBufferNV }, 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { NULL, NULL } 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint i; 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLProc ret; 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!procname) 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, NULL); 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = NULL; 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (strncmp(procname, "egl", 3) == 0) { 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; egl_functions[i].name; i++) { 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (strcmp(egl_functions[i].name, procname) == 0) { 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = egl_functions[i].function; 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ret) 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = _eglGetDriverProc(procname); 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, ret); 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_screen_surface 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EGL_MESA_screen extension 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen, 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const EGLint *attrib_list, EGLModeMESA *modes, 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint modes_size, EGLint *num_modes) 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen(screen, disp); 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ChooseModeMESA(drv, disp, scrn, attrib_list, 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org modes, modes_size, num_modes); 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint mode_size, EGLint *num_mode) 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen(screen, disp); 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.GetModesMESA(drv, disp, scrn, modes, mode_size, num_mode); 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode, 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint *value) 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLMode *m = _eglLookupMode(mode, disp); 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_MODE(disp, m, EGL_FALSE, drv); 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.GetModeAttribMESA(drv, disp, m, attribute, value); 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCopyContextMESA(EGLDisplay dpy, EGLContext source, EGLContext dest, 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint mask) 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *source_context = _eglLookupContext(source, disp); 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *dest_context = _eglLookupContext(dest, disp); 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONTEXT(disp, source_context, EGL_FALSE, drv); 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dest_context) 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_FALSE); 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.CopyContextMESA(drv, disp, 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org source_context, dest_context, mask); 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens, 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint max_screens, EGLint *num_screens) 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.GetScreensMESA(drv, disp, screens, max_screens, num_screens); 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSurface EGLAPIENTRY 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config, 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const EGLint *attrib_list) 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface ret; 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = drv->API.CreateScreenSurfaceMESA(drv, disp, conf, attrib_list); 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglShowScreenSurfaceMESA(EGLDisplay dpy, EGLint screen, 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface surface, EGLModeMESA mode) 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLMode *m = _eglLookupMode(mode, disp); 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!surf && surface != EGL_NO_SURFACE) 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!m && mode != EGL_NO_MODE_MESA) 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_MODE_MESA, EGL_FALSE); 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ShowScreenSurfaceMESA(drv, disp, scrn, surf, m); 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y) 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ScreenPositionMESA(drv, disp, scrn, x, y); 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen, 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint *value) 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen(screen, disp); 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryScreenMESA(drv, disp, scrn, attribute, value); 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen, 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface *surface) 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryScreenSurfaceMESA(drv, disp, scrn, &surf); 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ret && surface) 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *surface = _eglGetSurfaceHandle(surf); 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode) 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLScreen *scrn = _eglLookupScreen((EGLScreenMESA) screen, disp); 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLMode *m; 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SCREEN(disp, scrn, EGL_FALSE, drv); 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryScreenModeMESA(drv, disp, scrn, &m); 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ret && mode) 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mode = m->Handle; 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst char * EGLAPIENTRY 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode) 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLMode *m = _eglLookupMode(mode, disp); 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *ret; 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_MODE(disp, m, NULL, drv); 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryModeStringMESA(drv, disp, m); 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* EGL_MESA_screen_surface */ 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_drm_display 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLDisplay EGLAPIENTRY 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetDRMDisplayMESA(int fd) 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *dpy = _eglFindDisplay(_EGL_PLATFORM_DRM, (void *) (intptr_t) fd); 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return _eglGetDisplayHandle(dpy); 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* EGL_MESA_drm_display */ 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** EGL 1.2 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **/ 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Specify the client API to use for subsequent calls including: 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglCreateContext() 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglGetCurrentContext() 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglGetCurrentDisplay() 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglGetCurrentSurface() 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglMakeCurrent(when the ctx parameter is EGL NO CONTEXT) 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglWaitClient() 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * eglWaitNative() 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See section 3.7 "Rendering Context" in the EGL specification for details. 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglBindAPI(EGLenum api) 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLThreadInfo *t = _eglGetCurrentThread(); 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglIsCurrentThreadDummy()) 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(NULL, EGL_BAD_ALLOC, EGL_FALSE); 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_eglIsApiValid(api)) 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, EGL_FALSE); 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t->CurrentAPIIndex = _eglConvertApiToIndex(api); 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return the last value set with eglBindAPI(). 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLenum EGLAPIENTRY 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryAPI(void) 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLThreadInfo *t = _eglGetCurrentThread(); 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLenum ret; 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* returns one of EGL_OPENGL_API, EGL_OPENGL_ES_API or EGL_OPENVG_API */ 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = _eglConvertApiFromIndex(t->CurrentAPIIndex); 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, ret); 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSurface EGLAPIENTRY 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLClientBuffer buffer, EGLConfig config, 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const EGLint *attrib_list) 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLConfig *conf = _eglLookupConfig(config, disp); 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf; 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSurface ret; 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_CONFIG(disp, conf, EGL_NO_SURFACE, drv); 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf = drv->API.CreatePbufferFromClientBuffer(drv, disp, buftype, buffer, 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org conf, attrib_list); 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE; 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglReleaseThread(void) 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unbind current contexts */ 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_eglIsCurrentThreadDummy()) { 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLThreadInfo *t = _eglGetCurrentThread(); 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint api_index = t->CurrentAPIIndex; 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint i; 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < _EGL_API_NUM_APIS; i++) { 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = t->CurrentContexts[i]; 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx) { 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = ctx->Resource.Display; 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t->CurrentAPIIndex = i; 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglLockMutex(&disp->Mutex); 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drv = disp->Driver; 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlockMutex(&disp->Mutex); 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org t->CurrentAPIIndex = api_index; 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglDestroyCurrentThread(); 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_SUCCESS(NULL, EGL_TRUE); 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLImageKHR EGLAPIENTRY 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLClientBuffer buffer, const EGLint *attr_list) 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *context = _eglLookupContext(ctx, disp); 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLImage *img; 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLImageKHR ret; 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.KHR_image_base) 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!context && ctx != EGL_NO_CONTEXT) 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR); 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org img = drv->API.CreateImageKHR(drv, 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org disp, context, target, buffer, attr_list); 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLImage *img = _eglLookupImage(image, disp); 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.KHR_image_base) 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, EGL_FALSE); 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!img) 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlinkImage(img); 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.DestroyImageKHR(drv, disp, img); 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLSyncKHR EGLAPIENTRY 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSync *sync; 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLSyncKHR ret; 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_NO_SYNC_KHR, drv); 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.KHR_reusable_sync) 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, EGL_NO_SYNC_KHR); 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sync = drv->API.CreateSyncKHR(drv, disp, type, attrib_list); 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (sync) ? _eglLinkSync(sync) : EGL_NO_SYNC_KHR; 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSync *s = _eglLookupSync(sync, disp); 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.KHR_reusable_sync); 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _eglUnlinkSync(s); 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.DestroySyncKHR(drv, disp, s); 1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLint EGLAPIENTRY 1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) 1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSync *s = _eglLookupSync(sync, disp); 1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint ret; 1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.KHR_reusable_sync); 1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ClientWaitSyncKHR(drv, disp, s, flags, timeout); 1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) 1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSync *s = _eglLookupSync(sync, disp); 1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.KHR_reusable_sync); 1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.SignalSyncKHR(drv, disp, s, mode); 1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value) 1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSync *s = _eglLookupSync(sync, disp); 1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SYNC(disp, s, EGL_FALSE, drv); 1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.KHR_reusable_sync); 1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.GetSyncAttribKHR(drv, disp, s, attribute, value); 1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_NOK_swap_region 1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, 1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint numRects, const EGLint *rects) 1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLContext *ctx = _eglGetCurrentContext(); 1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.NOK_swap_region) 1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, EGL_FALSE); 1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* surface must be bound to current context in EGL 1.4 */ 1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_eglGetContextHandle(ctx) == EGL_NO_CONTEXT || 1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surf != ctx->DrawSurface) 1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_SURFACE, EGL_FALSE); 1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.SwapBuffersRegionNOK(drv, disp, surf, numRects, rects); 1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* EGL_NOK_swap_region */ 1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_MESA_drm_image 1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLImageKHR EGLAPIENTRY 1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attr_list) 1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLImage *img; 1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLImageKHR ret; 1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_NO_IMAGE_KHR, drv); 1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.MESA_drm_image) 1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, EGL_NO_IMAGE_KHR); 1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org img = drv->API.CreateDRMImageMESA(drv, disp, attr_list); 1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = (img) ? _eglLinkImage(img) : EGL_NO_IMAGE_KHR; 1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, 1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint *name, EGLint *handle, EGLint *stride) 1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLImage *img = _eglLookupImage(image, disp); 1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.MESA_drm_image); 1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!img) 1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.ExportDRMImageMESA(drv, disp, img, name, handle, stride); 1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef EGL_WL_bind_wayland_display 1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct wl_display; 1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.WL_bind_wayland_display); 1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!display) 1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.BindWaylandDisplayWL(drv, disp, display); 1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) 1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.WL_bind_wayland_display); 1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!display) 1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.UnbindWaylandDisplayWL(drv, disp, display); 1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglQueryWaylandBufferWL(EGLDisplay dpy,struct wl_buffer *buffer, 1543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint attribute, EGLint *value) 1544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); 1550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(disp->Extensions.WL_bind_wayland_display); 1551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buffer) 1553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); 1554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.QueryWaylandBufferWL(drv, disp, buffer, attribute, value); 1556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEGLBoolean EGLAPIENTRY 1563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgeglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, 1564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLint x, EGLint y, EGLint width, EGLint height) 1565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDisplay *disp = _eglLockDisplay(dpy); 1567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLSurface *surf = _eglLookupSurface(surface, disp); 1568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGLDriver *drv; 1569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EGLBoolean ret; 1570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); 1572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!disp->Extensions.NV_post_sub_buffer) 1574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, EGL_FALSE); 1575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drv->API.PostSubBufferNV(drv, disp, surf, x, y, width, height); 1577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org RETURN_EGL_EVAL(disp, ret); 1579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1580