Subversion Repositories Kolibri OS

Rev

Rev 4358 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4358 Rev 5080
1
/*
1
/*
2
 * Mesa 3-D graphics library
2
 * Mesa 3-D graphics library
3
 *
3
 *
4
 * Copyright (C) 2010-2011 LunarG Inc.
4
 * Copyright (C) 2010-2011 LunarG Inc.
5
 *
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
6
 * Permission is hereby granted, free of charge, to any person obtaining a
7
 * copy of this software and associated documentation files (the "Software"),
7
 * copy of this software and associated documentation files (the "Software"),
8
 * to deal in the Software without restriction, including without limitation
8
 * to deal in the Software without restriction, including without limitation
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
 * and/or sell copies of the Software, and to permit persons to whom the
10
 * and/or sell copies of the Software, and to permit persons to whom the
11
 * Software is furnished to do so, subject to the following conditions:
11
 * Software is furnished to do so, subject to the following conditions:
12
 *
12
 *
13
 * The above copyright notice and this permission notice shall be included
13
 * The above copyright notice and this permission notice shall be included
14
 * in all copies or substantial portions of the Software.
14
 * in all copies or substantial portions of the Software.
15
 *
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
 * DEALINGS IN THE SOFTWARE.
22
 * DEALINGS IN THE SOFTWARE.
23
 *
23
 *
24
 * Authors:
24
 * Authors:
25
 *    Chia-I Wu 
25
 *    Chia-I Wu 
26
 */
26
 */
27
 
27
 
28
#include "common/egl_g3d_loader.h"
28
#include "common/egl_g3d_loader.h"
29
#include "egldriver.h"
29
#include "egldriver.h"
30
#include "egllog.h"
30
#include "egllog.h"
31
 
31
 
32
#ifdef HAVE_LIBUDEV
32
#ifdef HAVE_LIBUDEV
33
#include  /* for sscanf */
33
#include  /* for sscanf */
34
#include 
34
#include 
35
#endif
35
#endif
36
 
36
 
37
#define DRIVER_MAP_GALLIUM_ONLY
37
#define DRIVER_MAP_GALLIUM_ONLY
38
#include "pci_ids/pci_id_driver_map.h"
38
#include "pci_ids/pci_id_driver_map.h"
39
 
39
 
40
#include "egl_pipe.h"
40
#include "egl_pipe.h"
41
#include "egl_st.h"
41
#include "egl_st.h"
42
 
42
 
43
static struct egl_g3d_loader egl_g3d_loader;
43
static struct egl_g3d_loader egl_g3d_loader;
44
 
44
 
45
static struct st_module {
45
static struct st_module {
46
   boolean initialized;
46
   boolean initialized;
47
   struct st_api *stapi;
47
   struct st_api *stapi;
48
} st_modules[ST_API_COUNT];
48
} st_modules[ST_API_COUNT];
49
 
49
 
50
static struct st_api *
50
static struct st_api *
51
get_st_api(enum st_api_type api)
51
get_st_api(enum st_api_type api)
52
{
52
{
53
   struct st_module *stmod = &st_modules[api];
53
   struct st_module *stmod = &st_modules[api];
54
 
54
 
55
   if (!stmod->initialized) {
55
   if (!stmod->initialized) {
56
      stmod->stapi = egl_st_create_api(api);
56
      stmod->stapi = egl_st_create_api(api);
57
      stmod->initialized = TRUE;
57
      stmod->initialized = TRUE;
58
   }
58
   }
59
 
59
 
60
   return stmod->stapi;
60
   return stmod->stapi;
61
}
61
}
62
 
62
 
63
#ifdef HAVE_LIBUDEV
63
#ifdef HAVE_LIBUDEV
64
 
64
 
65
static boolean
65
static boolean
66
drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id)
66
drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id)
67
{
67
{
68
   struct udev *udev = NULL;
68
   struct udev *udev = NULL;
69
   struct udev_device *device = NULL, *parent;
69
   struct udev_device *device = NULL, *parent;
70
   struct stat buf;
70
   struct stat buf;
71
   const char *pci_id;
71
   const char *pci_id;
72
 
72
 
73
   *chip_id = -1;
73
   *chip_id = -1;
74
 
74
 
75
   udev = udev_new();
75
   udev = udev_new();
76
   if (fstat(fd, &buf) < 0) {
76
   if (fstat(fd, &buf) < 0) {
77
      _eglLog(_EGL_WARNING, "failed to stat fd %d", fd);
77
      _eglLog(_EGL_WARNING, "failed to stat fd %d", fd);
78
      goto out;
78
      goto out;
79
   }
79
   }
80
 
80
 
81
   device = udev_device_new_from_devnum(udev, 'c', buf.st_rdev);
81
   device = udev_device_new_from_devnum(udev, 'c', buf.st_rdev);
82
   if (device == NULL) {
82
   if (device == NULL) {
83
      _eglLog(_EGL_WARNING,
83
      _eglLog(_EGL_WARNING,
84
              "could not create udev device for fd %d", fd);
84
              "could not create udev device for fd %d", fd);
85
      goto out;
85
      goto out;
86
   }
86
   }
87
 
87
 
88
   parent = udev_device_get_parent(device);
88
   parent = udev_device_get_parent(device);
89
   if (parent == NULL) {
89
   if (parent == NULL) {
90
      _eglLog(_EGL_WARNING, "could not get parent device");
90
      _eglLog(_EGL_WARNING, "could not get parent device");
91
      goto out;
91
      goto out;
92
   }
92
   }
93
 
93
 
94
   pci_id = udev_device_get_property_value(parent, "PCI_ID");
94
   pci_id = udev_device_get_property_value(parent, "PCI_ID");
95
   if (pci_id == NULL ||
95
   if (pci_id == NULL ||
96
       sscanf(pci_id, "%x:%x", vendor_id, chip_id) != 2) {
96
       sscanf(pci_id, "%x:%x", vendor_id, chip_id) != 2) {
97
      _eglLog(_EGL_WARNING, "malformed or no PCI ID");
97
      _eglLog(_EGL_WARNING, "malformed or no PCI ID");
98
      *chip_id = -1;
98
      *chip_id = -1;
99
      goto out;
99
      goto out;
100
   }
100
   }
101
 
101
 
102
out:
102
out:
103
   if (device)
103
   if (device)
104
      udev_device_unref(device);
104
      udev_device_unref(device);
105
   if (udev)
105
   if (udev)
106
      udev_unref(udev);
106
      udev_unref(udev);
107
 
107
 
108
   return (*chip_id >= 0);
108
   return (*chip_id >= 0);
109
}
109
}
110
 
110
 
111
#elif defined(PIPE_OS_ANDROID) && !defined(_EGL_NO_DRM)
111
#elif defined(PIPE_OS_ANDROID) && !defined(_EGL_NO_DRM)
112
 
112
 
113
#include 
113
#include 
114
/* for i915 */
114
/* for i915 */
115
#include 
115
#include 
116
/* for radeon */
116
/* for radeon */
117
#include 
117
#include 
118
/* for util_strcmp */
118
/* for util_strcmp */
119
#include "util/u_string.h"
119
#include "util/u_string.h"
120
 
120
 
121
static boolean
121
static boolean
122
drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id)
122
drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id)
123
{
123
{
124
   drmVersionPtr version;
124
   drmVersionPtr version;
125
 
125
 
126
   *chip_id = -1;
126
   *chip_id = -1;
127
 
127
 
128
   version = drmGetVersion(fd);
128
   version = drmGetVersion(fd);
129
   if (!version) {
129
   if (!version) {
130
      _eglLog(_EGL_WARNING, "invalid drm fd");
130
      _eglLog(_EGL_WARNING, "invalid drm fd");
131
      return FALSE;
131
      return FALSE;
132
   }
132
   }
133
   if (!version->name) {
133
   if (!version->name) {
134
      _eglLog(_EGL_WARNING, "unable to determine the driver name");
134
      _eglLog(_EGL_WARNING, "unable to determine the driver name");
135
      drmFreeVersion(version);
135
      drmFreeVersion(version);
136
      return FALSE;
136
      return FALSE;
137
   }
137
   }
138
 
138
 
139
   if (util_strcmp(version->name, "i915") == 0) {
139
   if (util_strcmp(version->name, "i915") == 0) {
140
      struct drm_i915_getparam gp;
140
      struct drm_i915_getparam gp;
141
      int ret;
141
      int ret;
142
 
142
 
143
      *vendor_id = 0x8086;
143
      *vendor_id = 0x8086;
144
 
144
 
145
      memset(&gp, 0, sizeof(gp));
145
      memset(&gp, 0, sizeof(gp));
146
      gp.param = I915_PARAM_CHIPSET_ID;
146
      gp.param = I915_PARAM_CHIPSET_ID;
147
      gp.value = chip_id;
147
      gp.value = chip_id;
148
      ret = drmCommandWriteRead(fd, DRM_I915_GETPARAM, &gp, sizeof(gp));
148
      ret = drmCommandWriteRead(fd, DRM_I915_GETPARAM, &gp, sizeof(gp));
149
      if (ret) {
149
      if (ret) {
150
         _eglLog(_EGL_WARNING, "failed to get param for i915");
150
         _eglLog(_EGL_WARNING, "failed to get param for i915");
151
	 *chip_id = -1;
151
	 *chip_id = -1;
152
      }
152
      }
153
   }
153
   }
154
   else if (util_strcmp(version->name, "radeon") == 0) {
154
   else if (util_strcmp(version->name, "radeon") == 0) {
155
      struct drm_radeon_info info;
155
      struct drm_radeon_info info;
156
      int ret;
156
      int ret;
157
 
157
 
158
      *vendor_id = 0x1002;
158
      *vendor_id = 0x1002;
159
 
159
 
160
      memset(&info, 0, sizeof(info));
160
      memset(&info, 0, sizeof(info));
161
      info.request = RADEON_INFO_DEVICE_ID;
161
      info.request = RADEON_INFO_DEVICE_ID;
162
      info.value = (unsigned long) chip_id;
162
      info.value = (unsigned long) chip_id;
163
      ret = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
163
      ret = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
164
      if (ret) {
164
      if (ret) {
165
         _eglLog(_EGL_WARNING, "failed to get info for radeon");
165
         _eglLog(_EGL_WARNING, "failed to get info for radeon");
166
	 *chip_id = -1;
166
	 *chip_id = -1;
167
      }
167
      }
168
   }
168
   }
169
   else if (util_strcmp(version->name, "nouveau") == 0) {
169
   else if (util_strcmp(version->name, "nouveau") == 0) {
170
      *vendor_id = 0x10de;
170
      *vendor_id = 0x10de;
171
      /* not used */
171
      /* not used */
172
      *chip_id = 0;
172
      *chip_id = 0;
173
   }
173
   }
174
   else if (util_strcmp(version->name, "vmwgfx") == 0) {
174
   else if (util_strcmp(version->name, "vmwgfx") == 0) {
175
      *vendor_id = 0x15ad;
175
      *vendor_id = 0x15ad;
176
      /* assume SVGA II */
176
      /* assume SVGA II */
177
      *chip_id = 0x0405;
177
      *chip_id = 0x0405;
178
   }
178
   }
179
 
179
 
180
   drmFreeVersion(version);
180
   drmFreeVersion(version);
181
 
181
 
182
   return (*chip_id >= 0);
182
   return (*chip_id >= 0);
183
}
183
}
184
 
184
 
185
#else
185
#else
186
 
186
 
187
static boolean
187
static boolean
188
drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id)
188
drm_fd_get_pci_id(int fd, int *vendor_id, int *chip_id)
189
{
189
{
190
   return FALSE;
190
   return FALSE;
191
}
191
}
192
 
192
 
193
#endif /* HAVE_LIBUDEV */
193
#endif /* HAVE_LIBUDEV */
194
 
194
 
195
static const char *
195
static const char *
196
drm_fd_get_screen_name(int fd)
196
drm_fd_get_screen_name(int fd)
197
{
197
{
198
   int vendor_id, chip_id;
198
   int vendor_id, chip_id;
199
   int idx, i;
199
   int idx, i;
200
 
200
 
201
   if (!drm_fd_get_pci_id(fd, &vendor_id, &chip_id)) {
201
   if (!drm_fd_get_pci_id(fd, &vendor_id, &chip_id)) {
202
      _eglLog(_EGL_WARNING, "failed to get driver name for fd %d", fd);
202
      _eglLog(_EGL_WARNING, "failed to get driver name for fd %d", fd);
203
      return NULL;
203
      return NULL;
204
   }
204
   }
205
 
205
 
206
   for (idx = 0; driver_map[idx].driver; idx++) {
206
   for (idx = 0; driver_map[idx].driver; idx++) {
207
      if (vendor_id != driver_map[idx].vendor_id)
207
      if (vendor_id != driver_map[idx].vendor_id)
208
         continue;
208
         continue;
209
 
209
 
210
      /* done if no chip id */
210
      /* done if no chip id */
211
      if (driver_map[idx].num_chips_ids == -1)
211
      if (driver_map[idx].num_chips_ids == -1)
212
         break;
212
         break;
213
 
213
 
214
      for (i = 0; i < driver_map[idx].num_chips_ids; i++) {
214
      for (i = 0; i < driver_map[idx].num_chips_ids; i++) {
215
         if (driver_map[idx].chip_ids[i] == chip_id)
215
         if (driver_map[idx].chip_ids[i] == chip_id)
216
            break;
216
            break;
217
      }
217
      }
218
      /* matched! */
218
      /* matched! */
219
      if (i < driver_map[idx].num_chips_ids)
219
      if (i < driver_map[idx].num_chips_ids)
220
         break;
220
         break;
221
   }
221
   }
222
 
222
 
223
   _eglLog((driver_map[idx].driver) ? _EGL_INFO : _EGL_WARNING,
223
   _eglLog((driver_map[idx].driver) ? _EGL_INFO : _EGL_WARNING,
224
         "pci id for fd %d: %04x:%04x, driver %s",
224
         "pci id for fd %d: %04x:%04x, driver %s",
225
         fd, vendor_id, chip_id, driver_map[idx].driver);
225
         fd, vendor_id, chip_id, driver_map[idx].driver);
226
 
226
 
227
   return driver_map[idx].driver;
227
   return driver_map[idx].driver;
228
}
228
}
229
 
229
 
230
static struct pipe_screen *
230
static struct pipe_screen *
231
create_drm_screen(const char *name, int fd)
231
create_drm_screen(const char *name, int fd)
232
{
232
{
233
   struct pipe_screen *screen;
233
   struct pipe_screen *screen;
234
 
234
 
235
   if (!name) {
235
   if (!name) {
236
      name = drm_fd_get_screen_name(fd);
236
      name = drm_fd_get_screen_name(fd);
237
      if (!name)
237
      if (!name)
238
         return NULL;
238
         return NULL;
239
   }
239
   }
240
 
240
 
241
   screen = egl_pipe_create_drm_screen(name, fd);
241
   screen = egl_pipe_create_drm_screen(name, fd);
242
   if (screen)
242
   if (screen)
243
      _eglLog(_EGL_INFO, "created a pipe screen for %s", name);
243
      _eglLog(_EGL_INFO, "created a pipe screen for %s", name);
244
   else
244
   else
245
      _eglLog(_EGL_WARNING, "failed to create a pipe screen for %s", name);
245
      _eglLog(_EGL_WARNING, "failed to create a pipe screen for %s", name);
246
 
246
 
247
   return screen;
247
   return screen;
248
}
248
}
249
 
249
 
250
static struct pipe_screen *
250
static struct pipe_screen *
251
create_sw_screen(struct sw_winsys *ws)
251
create_sw_screen(struct sw_winsys *ws)
252
{
252
{
253
   return egl_pipe_create_swrast_screen(ws);
253
   return egl_pipe_create_swrast_screen(ws);
254
}
254
}
255
 
255
 
256
static const struct egl_g3d_loader *
256
static const struct egl_g3d_loader *
257
loader_init(void)
257
loader_init(void)
258
{
258
{
259
   int i;
259
   int i;
260
 
260
 
261
   for (i = 0; i < ST_API_COUNT; i++)
261
   for (i = 0; i < ST_API_COUNT; i++)
262
      egl_g3d_loader.profile_masks[i] = egl_st_get_profile_mask(i);
262
      egl_g3d_loader.profile_masks[i] = egl_st_get_profile_mask(i);
263
 
263
 
264
   egl_g3d_loader.get_st_api = get_st_api;
264
   egl_g3d_loader.get_st_api = get_st_api;
265
   egl_g3d_loader.create_drm_screen = create_drm_screen;
265
   egl_g3d_loader.create_drm_screen = create_drm_screen;
266
   egl_g3d_loader.create_sw_screen = create_sw_screen;
266
   egl_g3d_loader.create_sw_screen = create_sw_screen;
267
 
267
 
268
   return &egl_g3d_loader;
268
   return &egl_g3d_loader;
269
}
269
}
270
 
270
 
271
static void
271
static void
272
loader_fini(void)
272
loader_fini(void)
273
{
273
{
274
   int i;
274
   int i;
275
 
275
 
276
   for (i = 0; i < ST_API_COUNT; i++) {
276
   for (i = 0; i < ST_API_COUNT; i++) {
277
      struct st_module *stmod = &st_modules[i];
277
      struct st_module *stmod = &st_modules[i];
278
 
278
 
279
      if (stmod->stapi) {
279
      if (stmod->stapi) {
280
         egl_st_destroy_api(stmod->stapi);
280
         egl_st_destroy_api(stmod->stapi);
281
         stmod->stapi = NULL;
281
         stmod->stapi = NULL;
282
      }
282
      }
283
      stmod->initialized = FALSE;
283
      stmod->initialized = FALSE;
284
   }
284
   }
285
}
285
}
286
 
286
 
287
static void
287
static void
288
egl_g3d_unload(_EGLDriver *drv)
288
egl_g3d_unload(_EGLDriver *drv)
289
{
289
{
290
   egl_g3d_destroy_driver(drv);
290
   egl_g3d_destroy_driver(drv);
291
   loader_fini();
291
   loader_fini();
292
}
292
}
293
 
293
 
294
_EGLDriver *
294
_EGLDriver *
295
_EGL_MAIN(const char *args)
295
_EGL_MAIN(const char *args)
296
{
296
{
297
   const struct egl_g3d_loader *loader;
297
   const struct egl_g3d_loader *loader;
298
   _EGLDriver *drv;
298
   _EGLDriver *drv;
299
 
299
 
300
   loader = loader_init();
300
   loader = loader_init();
301
   drv = egl_g3d_create_driver(loader);
301
   drv = egl_g3d_create_driver(loader);
302
   if (!drv) {
302
   if (!drv) {
303
      loader_fini();
303
      loader_fini();
304
      return NULL;
304
      return NULL;
305
   }
305
   }
306
 
306
 
307
   drv->Name = "Gallium";
307
   drv->Name = "Gallium";
308
   drv->Unload = egl_g3d_unload;
308
   drv->Unload = egl_g3d_unload;
309
 
309
 
310
   return drv;
310
   return drv;
311
}
311
}
-
 
312
 
-
 
313
EGLBoolean
-
 
314
_eglError(EGLint errCode, const char *msg)
-
 
315
{
-
 
316
    return EGL_FALSE;
-
 
317
}
-
 
318
 
-
 
319
void
-
 
320
_eglLog(EGLint level, const char *fmtStr, ...)
-
 
321
{
-
 
322
 
-
 
323
}
-
 
324
 
-
 
325
void
-
 
326
_eglDestroyArray(_EGLArray *array, void (*free_cb)(void *))
-
 
327
{
-
 
328
 
-
 
329
}
-
 
330
 
-
 
331
void
-
 
332
_eglInitScreen(_EGLScreen *screen, _EGLDisplay *dpy, EGLint num_modes)
-
 
333
{
-
 
334
}
-
 
335
 
-
 
336
void
-
 
337
_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *display)
-
 
338
{
-
 
339
 
-
 
340
}
-
 
341
 
-
 
342
EGLScreenMESA
-
 
343
_eglLinkScreen(_EGLScreen *screen)
-
 
344
{
-
 
345
}
-
 
346
 
-
 
347
EGLBoolean
-
 
348
_eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching)
-
 
349
{
-
 
350
    return EGL_FALSE;
-
 
351
}
-
 
352
 
-
 
353
void
-
 
354
_eglInitConfig(_EGLConfig *conf, _EGLDisplay *dpy, EGLint id)
-
 
355
{
-
 
356
}
-
 
357
void
-
 
358
_eglCleanupDisplay(_EGLDisplay *disp)
-
 
359
{
-
 
360
 
-
 
361
}
-
 
362
 
-
 
363
PUBLIC EGLConfig
-
 
364
_eglLinkConfig(_EGLConfig *conf)
-
 
365
{
-
 
366
 
-
 
367
}
-
 
368
 
-
 
369
EGLBoolean
-
 
370
_eglPutResource(_EGLResource *res)
-
 
371
{
-
 
372
   return EGL_FALSE;
-
 
373
}
-
 
374
 
-
 
375
_EGLContext *
-
 
376
_eglGetCurrentContext(void)
-
 
377
{
-
 
378
   return NULL;
-
 
379
}
-
 
380
 
-
 
381
EGLBoolean
-
 
382
_eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
-
 
383
                _EGLConfig *conf, const EGLint *attrib_list)
-
 
384
{
-
 
385
   return EGL_FALSE;
-
 
386
}
-
 
387
 
-
 
388
EGLBoolean
-
 
389
_eglBindContext(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read,
-
 
390
                _EGLContext **old_ctx,
-
 
391
                _EGLSurface **old_draw, _EGLSurface **old_read)
-
 
392
{
-
 
393
   return EGL_FALSE;
-
 
394
}
-
 
395
 
-
 
396
PUBLIC _EGLContext *
-
 
397
_eglGetAPIContext(EGLenum api)
-
 
398
{
-
 
399
   return NULL;
-
 
400
}
-
 
401
 
-
 
402
EGLBoolean
-
 
403
_eglInitContext(_EGLContext *ctx, _EGLDisplay *dpy, _EGLConfig *conf,
-
 
404
                const EGLint *attrib_list)
-
 
405
{
-
 
406
   return EGL_FALSE;
-
 
407
}
-
 
408
 
-
 
409
EGLint
-
 
410
_eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2,
-
 
411
                   const _EGLConfig *criteria, EGLBoolean compare_id)
-
 
412
{
-
 
413
    return 0;
-
 
414
}
-
 
415
 
-
 
416
EGLBoolean
-
 
417
_eglMatchConfig(const _EGLConfig *conf, const _EGLConfig *criteria)
-
 
418
{
-
 
419
   return EGL_FALSE;
-
 
420
}
-
 
421
 
-
 
422
EGLBoolean
-
 
423
_eglParseConfigAttribList(_EGLConfig *conf, _EGLDisplay *dpy,
-
 
424
                          const EGLint *attrib_list)
-
 
425
{
-
 
426
   return EGL_FALSE;
-
 
427
}
-
 
428
 
-
 
429
EGLBoolean
-
 
430
_eglFilterConfigArray(_EGLArray *array, EGLConfig *configs,
-
 
431
                      EGLint config_size, EGLint *num_configs,
-
 
432
                      EGLBoolean (*match)(const _EGLConfig *, void *),
-
 
433
                      EGLint (*compare)(const _EGLConfig *, const _EGLConfig *,
-
 
434
                                        void *),
-
 
435
                      void *priv_data)
-
 
436
{
-
 
437
   return EGL_FALSE;
-
 
438
}
-
 
439
 
-
 
440
EGLBoolean
-
 
441
_eglInitImage(_EGLImage *img, _EGLDisplay *dpy)
-
 
442
{
-
 
443
 
-
 
444
   return EGL_TRUE;
-
 
445
}
-
 
446
 
-
 
447
EGLint
-
 
448
_eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy,
-
 
449
                         const EGLint *attrib_list)
-
 
450
{
-
 
451
    return 0;
-
 
452
}
-
 
453
 
-
 
454
EGLBoolean
-
 
455
_eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type,
-
 
456
             const EGLint *attrib_list)
-
 
457
{
-
 
458
 
-
 
459
   return EGL_TRUE;
-
 
460
}
-
 
461
 
-
 
462
void
-
 
463
_eglGetResource(_EGLResource *res)
-
 
464
{
-
 
465
}
-
 
466
 
-
 
467
EGLBoolean
-
 
468
_eglCheckResource(void *res, int type, _EGLDisplay *dpy)
-
 
469
{
-
 
470
 
-
 
471
   return EGL_TRUE;
-
 
472
}
-
 
473
 
-
 
474
void
-
 
475
_eglInitDriverFallbacks(_EGLDriver *drv)
-
 
476
{
-
 
477
}
-
 
478