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