blob: 56d894eda7283cb7010985e6424dc1bbeb479dec [file] [log] [blame]
Kyle Brenneman22a9e002016-05-11 14:01:53 -04001/*
2 * THIS FILE IS AUTOMATICALLY GENERATED BY gen_scrn_dispatch.pl
3 * DO NOT EDIT!!
4 */
5#include <stdlib.h>
6
Hans de Goede84f764a2017-03-20 08:41:26 +01007#include "glxclient.h"
Kyle Brenneman22a9e002016-05-11 14:01:53 -04008#include "glxglvnd.h"
9#include "glxglvnddispatchfuncs.h"
10#include "g_glxglvnddispatchindices.h"
11
12const int DI_FUNCTION_COUNT = DI_LAST_INDEX;
Emil Velikov3bf00b62016-05-11 14:01:55 -040013/* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
14int __glXDispatchTableIndices[DI_LAST_INDEX + 1];
Kyle Brenneman22a9e002016-05-11 14:01:53 -040015const __GLXapiExports *__glXGLVNDAPIExports;
16
17const char * const __glXDispatchTableStrings[DI_LAST_INDEX] = {
18#define __ATTRIB(field) \
19 [DI_##field] = "glX"#field
20
Adam Jackson8bca8d82016-09-14 14:01:13 -040021 __ATTRIB(BindSwapBarrierSGIX),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040022 __ATTRIB(BindTexImageEXT),
23 // glXChooseFBConfig implemented by libglvnd
24 __ATTRIB(ChooseFBConfigSGIX),
25 // glXChooseVisual implemented by libglvnd
26 // glXCopyContext implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040027 __ATTRIB(CopySubBufferMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040028 // glXCreateContext implemented by libglvnd
29 __ATTRIB(CreateContextAttribsARB),
30 __ATTRIB(CreateContextWithConfigSGIX),
31 __ATTRIB(CreateGLXPbufferSGIX),
32 // glXCreateGLXPixmap implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040033 __ATTRIB(CreateGLXPixmapMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040034 __ATTRIB(CreateGLXPixmapWithConfigSGIX),
35 // glXCreateNewContext implemented by libglvnd
36 // glXCreatePbuffer implemented by libglvnd
37 // glXCreatePixmap implemented by libglvnd
38 // glXCreateWindow implemented by libglvnd
39 // glXDestroyContext implemented by libglvnd
40 __ATTRIB(DestroyGLXPbufferSGIX),
41 // glXDestroyGLXPixmap implemented by libglvnd
42 // glXDestroyPbuffer implemented by libglvnd
43 // glXDestroyPixmap implemented by libglvnd
44 // glXDestroyWindow implemented by libglvnd
45 // glXFreeContextEXT implemented by libglvnd
46 // glXGetClientString implemented by libglvnd
47 // glXGetConfig implemented by libglvnd
48 __ATTRIB(GetContextIDEXT),
49 // glXGetCurrentContext implemented by libglvnd
50 // glXGetCurrentDisplay implemented by libglvnd
51 __ATTRIB(GetCurrentDisplayEXT),
52 // glXGetCurrentDrawable implemented by libglvnd
53 // glXGetCurrentReadDrawable implemented by libglvnd
Hans de Goede84f764a2017-03-20 08:41:26 +010054 __ATTRIB(GetDriverConfig),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040055 // glXGetFBConfigAttrib implemented by libglvnd
56 __ATTRIB(GetFBConfigAttribSGIX),
57 __ATTRIB(GetFBConfigFromVisualSGIX),
58 // glXGetFBConfigs implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040059 __ATTRIB(GetMscRateOML),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040060 // glXGetProcAddress implemented by libglvnd
61 // glXGetProcAddressARB implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040062 __ATTRIB(GetScreenDriver),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040063 // glXGetSelectedEvent implemented by libglvnd
64 __ATTRIB(GetSelectedEventSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -040065 __ATTRIB(GetSwapIntervalMESA),
66 __ATTRIB(GetSyncValuesOML),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040067 __ATTRIB(GetVideoSyncSGI),
68 // glXGetVisualFromFBConfig implemented by libglvnd
69 __ATTRIB(GetVisualFromFBConfigSGIX),
70 // glXImportContextEXT implemented by libglvnd
71 // glXIsDirect implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040072 __ATTRIB(JoinSwapGroupSGIX),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040073 // glXMakeContextCurrent implemented by libglvnd
74 // glXMakeCurrent implemented by libglvnd
75 // glXQueryContext implemented by libglvnd
76 __ATTRIB(QueryContextInfoEXT),
Adam Jackson8bca8d82016-09-14 14:01:13 -040077 __ATTRIB(QueryCurrentRendererIntegerMESA),
78 __ATTRIB(QueryCurrentRendererStringMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040079 // glXQueryDrawable implemented by libglvnd
80 // glXQueryExtension implemented by libglvnd
81 // glXQueryExtensionsString implemented by libglvnd
82 __ATTRIB(QueryGLXPbufferSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -040083 __ATTRIB(QueryMaxSwapBarriersSGIX),
84 __ATTRIB(QueryRendererIntegerMESA),
85 __ATTRIB(QueryRendererStringMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040086 // glXQueryServerString implemented by libglvnd
87 // glXQueryVersion implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040088 __ATTRIB(ReleaseBuffersMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040089 __ATTRIB(ReleaseTexImageEXT),
90 // glXSelectEvent implemented by libglvnd
91 __ATTRIB(SelectEventSGIX),
92 // glXSwapBuffers implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040093 __ATTRIB(SwapBuffersMscOML),
94 __ATTRIB(SwapIntervalMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040095 __ATTRIB(SwapIntervalSGI),
96 // glXUseXFont implemented by libglvnd
Adam Jackson8bca8d82016-09-14 14:01:13 -040097 __ATTRIB(WaitForMscOML),
98 __ATTRIB(WaitForSbcOML),
Kyle Brenneman22a9e002016-05-11 14:01:53 -040099 // glXWaitGL implemented by libglvnd
100 __ATTRIB(WaitVideoSyncSGI),
101 // glXWaitX implemented by libglvnd
102
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400103#undef __ATTRIB
104};
105
106#define __FETCH_FUNCTION_PTR(func_name) \
107 p##func_name = (void *) \
108 __VND->fetchDispatchEntry(dd, __glXDispatchTableIndices[DI_##func_name])
109
110
111static void dispatch_BindTexImageEXT(Display *dpy, GLXDrawable drawable,
112 int buffer, const int *attrib_list)
113{
114 PFNGLXBINDTEXIMAGEEXTPROC pBindTexImageEXT;
115 __GLXvendorInfo *dd;
116
117 dd = GetDispatchFromDrawable(dpy, drawable);
118 if (dd == NULL)
119 return;
120
121 __FETCH_FUNCTION_PTR(BindTexImageEXT);
122 if (pBindTexImageEXT == NULL)
123 return;
124
125 (*pBindTexImageEXT)(dpy, drawable, buffer, attrib_list);
126}
127
128
129
130static GLXFBConfigSGIX *dispatch_ChooseFBConfigSGIX(Display *dpy, int screen,
131 const int *attrib_list,
132 int *nelements)
133{
134 PFNGLXCHOOSEFBCONFIGSGIXPROC pChooseFBConfigSGIX;
135 __GLXvendorInfo *dd;
136 GLXFBConfigSGIX *ret;
137
138 dd = __VND->getDynDispatch(dpy, screen);
139 if (dd == NULL)
140 return NULL;
141
142 __FETCH_FUNCTION_PTR(ChooseFBConfigSGIX);
143 if (pChooseFBConfigSGIX == NULL)
144 return NULL;
145
146 ret = (*pChooseFBConfigSGIX)(dpy, screen, attrib_list, nelements);
147 if (AddFBConfigsMapping(dpy, ret, nelements, dd)) {
148 free(ret);
149 return NULL;
150 }
151
152 return ret;
153}
154
155
156
157static GLXContext dispatch_CreateContextAttribsARB(Display *dpy,
158 GLXFBConfig config,
159 GLXContext share_list,
160 Bool direct,
161 const int *attrib_list)
162{
163 PFNGLXCREATECONTEXTATTRIBSARBPROC pCreateContextAttribsARB;
164 __GLXvendorInfo *dd;
165 GLXContext ret;
166
167 dd = GetDispatchFromFBConfig(dpy, config);
168 if (dd == NULL)
169 return None;
170
171 __FETCH_FUNCTION_PTR(CreateContextAttribsARB);
172 if (pCreateContextAttribsARB == NULL)
173 return None;
174
175 ret = (*pCreateContextAttribsARB)(dpy, config, share_list, direct, attrib_list);
176 if (AddContextMapping(dpy, ret, dd)) {
177 /* XXX: Call glXDestroyContext which lives in libglvnd. If we're not
178 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
179 */
180 return None;
181 }
182
183 return ret;
184}
185
186
187
188static GLXContext dispatch_CreateContextWithConfigSGIX(Display *dpy,
189 GLXFBConfigSGIX config,
190 int render_type,
191 GLXContext share_list,
192 Bool direct)
193{
194 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC pCreateContextWithConfigSGIX;
195 __GLXvendorInfo *dd;
196 GLXContext ret;
197
198 dd = GetDispatchFromFBConfig(dpy, config);
199 if (dd == NULL)
200 return None;
201
202 __FETCH_FUNCTION_PTR(CreateContextWithConfigSGIX);
203 if (pCreateContextWithConfigSGIX == NULL)
204 return None;
205
206 ret = (*pCreateContextWithConfigSGIX)(dpy, config, render_type, share_list, direct);
207 if (AddContextMapping(dpy, ret, dd)) {
208 /* XXX: Call glXDestroyContext which lives in libglvnd. If we're not
209 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
210 */
211 return None;
212 }
213
214 return ret;
215}
216
217
218
219static GLXPbuffer dispatch_CreateGLXPbufferSGIX(Display *dpy,
220 GLXFBConfig config,
221 unsigned int width,
222 unsigned int height,
223 const int *attrib_list)
224{
225 PFNGLXCREATEGLXPBUFFERSGIXPROC pCreateGLXPbufferSGIX;
226 __GLXvendorInfo *dd;
227 GLXPbuffer ret;
228
229 dd = GetDispatchFromFBConfig(dpy, config);
230 if (dd == NULL)
231 return None;
232
233 __FETCH_FUNCTION_PTR(CreateGLXPbufferSGIX);
234 if (pCreateGLXPbufferSGIX == NULL)
235 return None;
236
237 ret = (*pCreateGLXPbufferSGIX)(dpy, config, width, height, attrib_list);
238 if (AddDrawableMapping(dpy, ret, dd)) {
239 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX;
240
241 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX);
242 if (pDestroyGLXPbufferSGIX)
243 (*pDestroyGLXPbufferSGIX)(dpy, ret);
244
245 return None;
246 }
247
248 return ret;
249}
250
251
252
253static GLXPixmap dispatch_CreateGLXPixmapWithConfigSGIX(Display *dpy,
254 GLXFBConfigSGIX config,
255 Pixmap pixmap)
256{
257 PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC pCreateGLXPixmapWithConfigSGIX;
258 __GLXvendorInfo *dd;
259 GLXPixmap ret;
260
261 dd = GetDispatchFromFBConfig(dpy, config);
262 if (dd == NULL)
263 return None;
264
265 __FETCH_FUNCTION_PTR(CreateGLXPixmapWithConfigSGIX);
266 if (pCreateGLXPixmapWithConfigSGIX == NULL)
267 return None;
268
269 ret = (*pCreateGLXPixmapWithConfigSGIX)(dpy, config, pixmap);
270 if (AddDrawableMapping(dpy, ret, dd)) {
271 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
272 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
273 */
274 return None;
275 }
276
277 return ret;
278}
279
280
281
282static void dispatch_DestroyGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf)
283{
284 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX;
285 __GLXvendorInfo *dd;
286
287 dd = GetDispatchFromDrawable(dpy, pbuf);
288 if (dd == NULL)
289 return;
290
291 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX);
292 if (pDestroyGLXPbufferSGIX == NULL)
293 return;
294
295 (*pDestroyGLXPbufferSGIX)(dpy, pbuf);
296}
297
298
299
300static GLXContextID dispatch_GetContextIDEXT(const GLXContext ctx)
301{
302 PFNGLXGETCONTEXTIDEXTPROC pGetContextIDEXT;
303 __GLXvendorInfo *dd;
304
305 dd = GetDispatchFromContext(ctx);
306 if (dd == NULL)
307 return None;
308
309 __FETCH_FUNCTION_PTR(GetContextIDEXT);
310 if (pGetContextIDEXT == NULL)
311 return None;
312
313 return (*pGetContextIDEXT)(ctx);
314}
315
316
317
318static Display *dispatch_GetCurrentDisplayEXT(void)
319{
320 PFNGLXGETCURRENTDISPLAYEXTPROC pGetCurrentDisplayEXT;
321 __GLXvendorInfo *dd;
322
323 if (!__VND->getCurrentContext())
324 return NULL;
325
326 dd = __VND->getCurrentDynDispatch();
327 if (dd == NULL)
328 return NULL;
329
330 __FETCH_FUNCTION_PTR(GetCurrentDisplayEXT);
331 if (pGetCurrentDisplayEXT == NULL)
332 return NULL;
333
334 return (*pGetCurrentDisplayEXT)();
335}
336
337
338
Hans de Goede84f764a2017-03-20 08:41:26 +0100339static const char *dispatch_GetDriverConfig(const char *driverName)
340{
341 /*
342 * The options are constant for a given driverName, so we do not need
343 * a context (and apps expect to be able to call this without one).
344 */
345 return glXGetDriverConfig(driverName);
346}
347
348
349
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400350static int dispatch_GetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config,
351 int attribute, int *value_return)
352{
353 PFNGLXGETFBCONFIGATTRIBSGIXPROC pGetFBConfigAttribSGIX;
354 __GLXvendorInfo *dd;
355
356 dd = GetDispatchFromFBConfig(dpy, config);
357 if (dd == NULL)
358 return GLX_NO_EXTENSION;
359
360 __FETCH_FUNCTION_PTR(GetFBConfigAttribSGIX);
361 if (pGetFBConfigAttribSGIX == NULL)
362 return GLX_NO_EXTENSION;
363
364 return (*pGetFBConfigAttribSGIX)(dpy, config, attribute, value_return);
365}
366
367
368
369static GLXFBConfigSGIX dispatch_GetFBConfigFromVisualSGIX(Display *dpy,
370 XVisualInfo *vis)
371{
372 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC pGetFBConfigFromVisualSGIX;
373 __GLXvendorInfo *dd;
374 GLXFBConfigSGIX ret = NULL;
375
376 dd = GetDispatchFromVisual(dpy, vis);
377 if (dd == NULL)
378 return NULL;
379
380 __FETCH_FUNCTION_PTR(GetFBConfigFromVisualSGIX);
381 if (pGetFBConfigFromVisualSGIX == NULL)
382 return NULL;
383
384 ret = (*pGetFBConfigFromVisualSGIX)(dpy, vis);
385 if (AddFBConfigMapping(dpy, ret, dd))
386 /* XXX: dealloc ret ? */
387 return NULL;
388
389 return ret;
390}
391
392
393
394static void dispatch_GetSelectedEventSGIX(Display *dpy, GLXDrawable drawable,
395 unsigned long *mask)
396{
397 PFNGLXGETSELECTEDEVENTSGIXPROC pGetSelectedEventSGIX;
398 __GLXvendorInfo *dd;
399
400 dd = GetDispatchFromDrawable(dpy, drawable);
401 if (dd == NULL)
402 return;
403
404 __FETCH_FUNCTION_PTR(GetSelectedEventSGIX);
405 if (pGetSelectedEventSGIX == NULL)
406 return;
407
408 (*pGetSelectedEventSGIX)(dpy, drawable, mask);
409}
410
411
412
413static int dispatch_GetVideoSyncSGI(unsigned int *count)
414{
415 PFNGLXGETVIDEOSYNCSGIPROC pGetVideoSyncSGI;
416 __GLXvendorInfo *dd;
417
418 if (!__VND->getCurrentContext())
419 return GLX_BAD_CONTEXT;
420
421 dd = __VND->getCurrentDynDispatch();
422 if (dd == NULL)
423 return GLX_NO_EXTENSION;
424
425 __FETCH_FUNCTION_PTR(GetVideoSyncSGI);
426 if (pGetVideoSyncSGI == NULL)
427 return GLX_NO_EXTENSION;
428
429 return (*pGetVideoSyncSGI)(count);
430}
431
432
433
434static XVisualInfo *dispatch_GetVisualFromFBConfigSGIX(Display *dpy,
435 GLXFBConfigSGIX config)
436{
437 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC pGetVisualFromFBConfigSGIX;
438 __GLXvendorInfo *dd;
439
440 dd = GetDispatchFromFBConfig(dpy, config);
441 if (dd == NULL)
442 return NULL;
443
444 __FETCH_FUNCTION_PTR(GetVisualFromFBConfigSGIX);
445 if (pGetVisualFromFBConfigSGIX == NULL)
446 return NULL;
447
448 return (*pGetVisualFromFBConfigSGIX)(dpy, config);
449}
450
451
452
453static int dispatch_QueryContextInfoEXT(Display *dpy, GLXContext ctx,
454 int attribute, int *value)
455{
456 PFNGLXQUERYCONTEXTINFOEXTPROC pQueryContextInfoEXT;
457 __GLXvendorInfo *dd;
458
459 dd = GetDispatchFromContext(ctx);
460 if (dd == NULL)
461 return GLX_NO_EXTENSION;
462
463 __FETCH_FUNCTION_PTR(QueryContextInfoEXT);
464 if (pQueryContextInfoEXT == NULL)
465 return GLX_NO_EXTENSION;
466
467 return (*pQueryContextInfoEXT)(dpy, ctx, attribute, value);
468}
469
470
471
472static void dispatch_QueryGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf,
473 int attribute, unsigned int *value)
474{
475 PFNGLXQUERYGLXPBUFFERSGIXPROC pQueryGLXPbufferSGIX;
476 __GLXvendorInfo *dd;
477
478 dd = GetDispatchFromDrawable(dpy, pbuf);
479 if (dd == NULL)
480 return;
481
482 __FETCH_FUNCTION_PTR(QueryGLXPbufferSGIX);
483 if (pQueryGLXPbufferSGIX == NULL)
484 return;
485
486 (*pQueryGLXPbufferSGIX)(dpy, pbuf, attribute, value);
487}
488
489
490
491static void dispatch_ReleaseTexImageEXT(Display *dpy, GLXDrawable drawable,
492 int buffer)
493{
494 PFNGLXRELEASETEXIMAGEEXTPROC pReleaseTexImageEXT;
495 __GLXvendorInfo *dd;
496
497 dd = GetDispatchFromDrawable(dpy, drawable);
498 if (dd == NULL)
499 return;
500
501 __FETCH_FUNCTION_PTR(ReleaseTexImageEXT);
502 if (pReleaseTexImageEXT == NULL)
503 return;
504
505 (*pReleaseTexImageEXT)(dpy, drawable, buffer);
506}
507
508
509
510static void dispatch_SelectEventSGIX(Display *dpy, GLXDrawable drawable,
511 unsigned long mask)
512{
513 PFNGLXSELECTEVENTSGIXPROC pSelectEventSGIX;
514 __GLXvendorInfo *dd;
515
516 dd = GetDispatchFromDrawable(dpy, drawable);
517 if (dd == NULL)
518 return;
519
520 __FETCH_FUNCTION_PTR(SelectEventSGIX);
521 if (pSelectEventSGIX == NULL)
522 return;
523
524 (*pSelectEventSGIX)(dpy, drawable, mask);
525}
526
527
528
529static int dispatch_SwapIntervalSGI(int interval)
530{
531 PFNGLXSWAPINTERVALSGIPROC pSwapIntervalSGI;
532 __GLXvendorInfo *dd;
533
534 if (!__VND->getCurrentContext())
535 return GLX_BAD_CONTEXT;
536
537 dd = __VND->getCurrentDynDispatch();
538 if (dd == NULL)
539 return GLX_NO_EXTENSION;
540
541 __FETCH_FUNCTION_PTR(SwapIntervalSGI);
542 if (pSwapIntervalSGI == NULL)
543 return GLX_NO_EXTENSION;
544
545 return (*pSwapIntervalSGI)(interval);
546}
547
548
549
550static int dispatch_WaitVideoSyncSGI(int divisor, int remainder,
551 unsigned int *count)
552{
553 PFNGLXWAITVIDEOSYNCSGIPROC pWaitVideoSyncSGI;
554 __GLXvendorInfo *dd;
555
556 if (!__VND->getCurrentContext())
557 return GLX_BAD_CONTEXT;
558
559 dd = __VND->getCurrentDynDispatch();
560 if (dd == NULL)
561 return GLX_NO_EXTENSION;
562
563 __FETCH_FUNCTION_PTR(WaitVideoSyncSGI);
564 if (pWaitVideoSyncSGI == NULL)
565 return GLX_NO_EXTENSION;
566
567 return (*pWaitVideoSyncSGI)(divisor, remainder, count);
568}
569
570
571
Adam Jackson8bca8d82016-09-14 14:01:13 -0400572static void dispatch_BindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400573 int barrier)
574{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400575 PFNGLXBINDSWAPBARRIERSGIXPROC pBindSwapBarrierSGIX;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400576 __GLXvendorInfo *dd;
577
578 dd = GetDispatchFromDrawable(dpy, drawable);
579 if (dd == NULL)
580 return;
581
Adam Jackson8bca8d82016-09-14 14:01:13 -0400582 __FETCH_FUNCTION_PTR(BindSwapBarrierSGIX);
583 if (pBindSwapBarrierSGIX == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400584 return;
585
Adam Jackson8bca8d82016-09-14 14:01:13 -0400586 (*pBindSwapBarrierSGIX)(dpy, drawable, barrier);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400587}
588
589
590
Adam Jackson8bca8d82016-09-14 14:01:13 -0400591static void dispatch_CopySubBufferMESA(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400592 int x, int y, int width, int height)
593{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400594 PFNGLXCOPYSUBBUFFERMESAPROC pCopySubBufferMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400595 __GLXvendorInfo *dd;
596
597 dd = GetDispatchFromDrawable(dpy, drawable);
598 if (dd == NULL)
599 return;
600
Adam Jackson8bca8d82016-09-14 14:01:13 -0400601 __FETCH_FUNCTION_PTR(CopySubBufferMESA);
602 if (pCopySubBufferMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400603 return;
604
Adam Jackson8bca8d82016-09-14 14:01:13 -0400605 (*pCopySubBufferMESA)(dpy, drawable, x, y, width, height);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400606}
607
608
609
Adam Jackson8bca8d82016-09-14 14:01:13 -0400610static GLXPixmap dispatch_CreateGLXPixmapMESA(Display *dpy,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400611 XVisualInfo *visinfo,
612 Pixmap pixmap, Colormap cmap)
613{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400614 PFNGLXCREATEGLXPIXMAPMESAPROC pCreateGLXPixmapMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400615 __GLXvendorInfo *dd;
616 GLXPixmap ret;
617
618 dd = GetDispatchFromVisual(dpy, visinfo);
619 if (dd == NULL)
620 return None;
621
Adam Jackson8bca8d82016-09-14 14:01:13 -0400622 __FETCH_FUNCTION_PTR(CreateGLXPixmapMESA);
623 if (pCreateGLXPixmapMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400624 return None;
625
Adam Jackson8bca8d82016-09-14 14:01:13 -0400626 ret = (*pCreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400627 if (AddDrawableMapping(dpy, ret, dd)) {
628 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
629 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
630 */
631 return None;
632 }
633
634 return ret;
635}
636
637
638
Adam Jackson8bca8d82016-09-14 14:01:13 -0400639static GLboolean dispatch_GetMscRateOML(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400640 int32_t *numerator, int32_t *denominator)
641{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400642 PFNGLXGETMSCRATEOMLPROC pGetMscRateOML;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400643 __GLXvendorInfo *dd;
644
645 dd = GetDispatchFromDrawable(dpy, drawable);
646 if (dd == NULL)
647 return GL_FALSE;
648
Adam Jackson8bca8d82016-09-14 14:01:13 -0400649 __FETCH_FUNCTION_PTR(GetMscRateOML);
650 if (pGetMscRateOML == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400651 return GL_FALSE;
652
Adam Jackson8bca8d82016-09-14 14:01:13 -0400653 return (*pGetMscRateOML)(dpy, drawable, numerator, denominator);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400654}
655
656
657
Adam Jackson8bca8d82016-09-14 14:01:13 -0400658static const char *dispatch_GetScreenDriver(Display *dpy, int scrNum)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400659{
660 typedef const char *(*fn_glXGetScreenDriver_ptr)(Display *dpy, int scrNum);
Adam Jackson8bca8d82016-09-14 14:01:13 -0400661 fn_glXGetScreenDriver_ptr pGetScreenDriver;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400662 __GLXvendorInfo *dd;
663
664 dd = __VND->getDynDispatch(dpy, scrNum);
665 if (dd == NULL)
666 return NULL;
667
Adam Jackson8bca8d82016-09-14 14:01:13 -0400668 __FETCH_FUNCTION_PTR(GetScreenDriver);
669 if (pGetScreenDriver == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400670 return NULL;
671
Adam Jackson8bca8d82016-09-14 14:01:13 -0400672 return (*pGetScreenDriver)(dpy, scrNum);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400673}
674
675
676
Adam Jackson8bca8d82016-09-14 14:01:13 -0400677static int dispatch_GetSwapIntervalMESA(void)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400678{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400679 PFNGLXGETSWAPINTERVALMESAPROC pGetSwapIntervalMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400680 __GLXvendorInfo *dd;
681
682 if (!__VND->getCurrentContext())
683 return GLX_BAD_CONTEXT;
684
685 dd = __VND->getCurrentDynDispatch();
686 if (dd == NULL)
687 return 0;
688
Adam Jackson8bca8d82016-09-14 14:01:13 -0400689 __FETCH_FUNCTION_PTR(GetSwapIntervalMESA);
690 if (pGetSwapIntervalMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400691 return 0;
692
Adam Jackson8bca8d82016-09-14 14:01:13 -0400693 return (*pGetSwapIntervalMESA)();
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400694}
695
696
697
Adam Jackson8bca8d82016-09-14 14:01:13 -0400698static Bool dispatch_GetSyncValuesOML(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400699 int64_t *ust, int64_t *msc, int64_t *sbc)
700{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400701 PFNGLXGETSYNCVALUESOMLPROC pGetSyncValuesOML;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400702 __GLXvendorInfo *dd;
703
704 dd = GetDispatchFromDrawable(dpy, drawable);
705 if (dd == NULL)
706 return False;
707
Adam Jackson8bca8d82016-09-14 14:01:13 -0400708 __FETCH_FUNCTION_PTR(GetSyncValuesOML);
709 if (pGetSyncValuesOML == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400710 return False;
711
Adam Jackson8bca8d82016-09-14 14:01:13 -0400712 return (*pGetSyncValuesOML)(dpy, drawable, ust, msc, sbc);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400713}
714
715
716
Adam Jackson8bca8d82016-09-14 14:01:13 -0400717static void dispatch_JoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400718 GLXDrawable member)
719{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400720 PFNGLXJOINSWAPGROUPSGIXPROC pJoinSwapGroupSGIX;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400721 __GLXvendorInfo *dd;
722
723 dd = GetDispatchFromDrawable(dpy, drawable);
724 if (dd == NULL)
725 return;
726
Adam Jackson8bca8d82016-09-14 14:01:13 -0400727 __FETCH_FUNCTION_PTR(JoinSwapGroupSGIX);
728 if (pJoinSwapGroupSGIX == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400729 return;
730
Adam Jackson8bca8d82016-09-14 14:01:13 -0400731 (*pJoinSwapGroupSGIX)(dpy, drawable, member);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400732}
733
734
735
Adam Jackson8bca8d82016-09-14 14:01:13 -0400736static Bool dispatch_QueryCurrentRendererIntegerMESA(int attribute,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400737 unsigned int *value)
738{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400739 PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC pQueryCurrentRendererIntegerMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400740 __GLXvendorInfo *dd;
741
742 if (!__VND->getCurrentContext())
743 return False;
744
745 dd = __VND->getCurrentDynDispatch();
746 if (dd == NULL)
747 return False;
748
Adam Jackson8bca8d82016-09-14 14:01:13 -0400749 __FETCH_FUNCTION_PTR(QueryCurrentRendererIntegerMESA);
750 if (pQueryCurrentRendererIntegerMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400751 return False;
752
Adam Jackson8bca8d82016-09-14 14:01:13 -0400753 return (*pQueryCurrentRendererIntegerMESA)(attribute, value);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400754}
755
756
757
Adam Jackson8bca8d82016-09-14 14:01:13 -0400758static const char *dispatch_QueryCurrentRendererStringMESA(int attribute)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400759{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400760 PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC pQueryCurrentRendererStringMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400761 __GLXvendorInfo *dd;
762
763 if (!__VND->getCurrentContext())
764 return NULL;
765
766 dd = __VND->getCurrentDynDispatch();
767 if (dd == NULL)
768 return NULL;
769
Adam Jackson8bca8d82016-09-14 14:01:13 -0400770 __FETCH_FUNCTION_PTR(QueryCurrentRendererStringMESA);
771 if (pQueryCurrentRendererStringMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400772 return NULL;
773
Adam Jackson8bca8d82016-09-14 14:01:13 -0400774 return (*pQueryCurrentRendererStringMESA)(attribute);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400775}
776
777
778
Adam Jackson8bca8d82016-09-14 14:01:13 -0400779static Bool dispatch_QueryMaxSwapBarriersSGIX(Display *dpy, int screen,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400780 int *max)
781{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400782 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pQueryMaxSwapBarriersSGIX;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400783 __GLXvendorInfo *dd;
784
785 dd = __VND->getDynDispatch(dpy, screen);
786 if (dd == NULL)
787 return False;
788
Adam Jackson8bca8d82016-09-14 14:01:13 -0400789 __FETCH_FUNCTION_PTR(QueryMaxSwapBarriersSGIX);
790 if (pQueryMaxSwapBarriersSGIX == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400791 return False;
792
Adam Jackson8bca8d82016-09-14 14:01:13 -0400793 return (*pQueryMaxSwapBarriersSGIX)(dpy, screen, max);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400794}
795
796
797
Adam Jackson8bca8d82016-09-14 14:01:13 -0400798static Bool dispatch_QueryRendererIntegerMESA(Display *dpy, int screen,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400799 int renderer, int attribute,
800 unsigned int *value)
801{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400802 PFNGLXQUERYRENDERERINTEGERMESAPROC pQueryRendererIntegerMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400803 __GLXvendorInfo *dd;
804
805 dd = __VND->getDynDispatch(dpy, screen);
806 if (dd == NULL)
807 return False;
808
Adam Jackson8bca8d82016-09-14 14:01:13 -0400809 __FETCH_FUNCTION_PTR(QueryRendererIntegerMESA);
810 if (pQueryRendererIntegerMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400811 return False;
812
Adam Jackson8bca8d82016-09-14 14:01:13 -0400813 return (*pQueryRendererIntegerMESA)(dpy, screen, renderer, attribute, value);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400814}
815
816
817
Adam Jackson8bca8d82016-09-14 14:01:13 -0400818static const char *dispatch_QueryRendererStringMESA(Display *dpy, int screen,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400819 int renderer, int attribute)
820{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400821 PFNGLXQUERYRENDERERSTRINGMESAPROC pQueryRendererStringMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400822 __GLXvendorInfo *dd = NULL;
823
824 dd = __VND->getDynDispatch(dpy, screen);
825 if (dd == NULL)
826 return NULL;
827
Adam Jackson8bca8d82016-09-14 14:01:13 -0400828 __FETCH_FUNCTION_PTR(QueryRendererStringMESA);
829 if (pQueryRendererStringMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400830 return NULL;
831
Adam Jackson8bca8d82016-09-14 14:01:13 -0400832 return (*pQueryRendererStringMESA)(dpy, screen, renderer, attribute);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400833}
834
835
836
Adam Jackson8bca8d82016-09-14 14:01:13 -0400837static Bool dispatch_ReleaseBuffersMESA(Display *dpy, GLXDrawable d)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400838{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400839 PFNGLXRELEASEBUFFERSMESAPROC pReleaseBuffersMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400840 __GLXvendorInfo *dd;
841
842 dd = GetDispatchFromDrawable(dpy, d);
843 if (dd == NULL)
844 return False;
845
Adam Jackson8bca8d82016-09-14 14:01:13 -0400846 __FETCH_FUNCTION_PTR(ReleaseBuffersMESA);
847 if (pReleaseBuffersMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400848 return False;
849
Adam Jackson8bca8d82016-09-14 14:01:13 -0400850 return (*pReleaseBuffersMESA)(dpy, d);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400851}
852
853
854
Adam Jackson8bca8d82016-09-14 14:01:13 -0400855static int64_t dispatch_SwapBuffersMscOML(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400856 int64_t target_msc, int64_t divisor,
857 int64_t remainder)
858{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400859 PFNGLXSWAPBUFFERSMSCOMLPROC pSwapBuffersMscOML;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400860 __GLXvendorInfo *dd;
861
862 dd = GetDispatchFromDrawable(dpy, drawable);
863 if (dd == NULL)
864 return 0;
865
Adam Jackson8bca8d82016-09-14 14:01:13 -0400866 __FETCH_FUNCTION_PTR(SwapBuffersMscOML);
867 if (pSwapBuffersMscOML == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400868 return 0;
869
Adam Jackson8bca8d82016-09-14 14:01:13 -0400870 return (*pSwapBuffersMscOML)(dpy, drawable, target_msc, divisor, remainder);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400871}
872
873
874
Adam Jackson8bca8d82016-09-14 14:01:13 -0400875static int dispatch_SwapIntervalMESA(unsigned int interval)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400876{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400877 PFNGLXSWAPINTERVALMESAPROC pSwapIntervalMESA;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400878 __GLXvendorInfo *dd;
879
880 if (!__VND->getCurrentContext())
881 return GLX_BAD_CONTEXT;
882
883 dd = __VND->getCurrentDynDispatch();
884 if (dd == NULL)
885 return 0;
886
Adam Jackson8bca8d82016-09-14 14:01:13 -0400887 __FETCH_FUNCTION_PTR(SwapIntervalMESA);
888 if (pSwapIntervalMESA == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400889 return 0;
890
Adam Jackson8bca8d82016-09-14 14:01:13 -0400891 return (*pSwapIntervalMESA)(interval);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400892}
893
894
895
Adam Jackson8bca8d82016-09-14 14:01:13 -0400896static Bool dispatch_WaitForMscOML(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400897 int64_t target_msc, int64_t divisor,
898 int64_t remainder, int64_t *ust,
899 int64_t *msc, int64_t *sbc)
900{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400901 PFNGLXWAITFORMSCOMLPROC pWaitForMscOML;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400902 __GLXvendorInfo *dd;
903
904 dd = GetDispatchFromDrawable(dpy, drawable);
905 if (dd == NULL)
906 return False;
907
Adam Jackson8bca8d82016-09-14 14:01:13 -0400908 __FETCH_FUNCTION_PTR(WaitForMscOML);
909 if (pWaitForMscOML == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400910 return False;
911
Adam Jackson8bca8d82016-09-14 14:01:13 -0400912 return (*pWaitForMscOML)(dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400913}
914
915
916
Adam Jackson8bca8d82016-09-14 14:01:13 -0400917static Bool dispatch_WaitForSbcOML(Display *dpy, GLXDrawable drawable,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400918 int64_t target_sbc, int64_t *ust,
919 int64_t *msc, int64_t *sbc)
920{
Adam Jackson8bca8d82016-09-14 14:01:13 -0400921 PFNGLXWAITFORSBCOMLPROC pWaitForSbcOML;
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400922 __GLXvendorInfo *dd;
923
924 dd = GetDispatchFromDrawable(dpy, drawable);
925 if (dd == NULL)
926 return False;
927
Adam Jackson8bca8d82016-09-14 14:01:13 -0400928 __FETCH_FUNCTION_PTR(WaitForSbcOML);
929 if (pWaitForSbcOML == NULL)
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400930 return False;
931
Adam Jackson8bca8d82016-09-14 14:01:13 -0400932 return (*pWaitForSbcOML)(dpy, drawable, target_sbc, ust, msc, sbc);
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400933}
934
935#undef __FETCH_FUNCTION_PTR
936
937
Emil Velikov3bf00b62016-05-11 14:01:55 -0400938/* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
939const void * const __glXDispatchFunctions[DI_LAST_INDEX + 1] = {
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400940#define __ATTRIB(field) \
941 [DI_##field] = (void *)dispatch_##field
942
Adam Jackson8bca8d82016-09-14 14:01:13 -0400943 __ATTRIB(BindSwapBarrierSGIX),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400944 __ATTRIB(BindTexImageEXT),
945 __ATTRIB(ChooseFBConfigSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400946 __ATTRIB(CopySubBufferMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400947 __ATTRIB(CreateContextAttribsARB),
948 __ATTRIB(CreateContextWithConfigSGIX),
949 __ATTRIB(CreateGLXPbufferSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400950 __ATTRIB(CreateGLXPixmapMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400951 __ATTRIB(CreateGLXPixmapWithConfigSGIX),
952 __ATTRIB(DestroyGLXPbufferSGIX),
953 __ATTRIB(GetContextIDEXT),
954 __ATTRIB(GetCurrentDisplayEXT),
Hans de Goede84f764a2017-03-20 08:41:26 +0100955 __ATTRIB(GetDriverConfig),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400956 __ATTRIB(GetFBConfigAttribSGIX),
957 __ATTRIB(GetFBConfigFromVisualSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400958 __ATTRIB(GetMscRateOML),
959 __ATTRIB(GetScreenDriver),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400960 __ATTRIB(GetSelectedEventSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400961 __ATTRIB(GetSwapIntervalMESA),
962 __ATTRIB(GetSyncValuesOML),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400963 __ATTRIB(GetVideoSyncSGI),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400964 __ATTRIB(GetVisualFromFBConfigSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400965 __ATTRIB(JoinSwapGroupSGIX),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400966 __ATTRIB(QueryContextInfoEXT),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400967 __ATTRIB(QueryCurrentRendererIntegerMESA),
968 __ATTRIB(QueryCurrentRendererStringMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400969 __ATTRIB(QueryGLXPbufferSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400970 __ATTRIB(QueryMaxSwapBarriersSGIX),
971 __ATTRIB(QueryRendererIntegerMESA),
972 __ATTRIB(QueryRendererStringMESA),
973 __ATTRIB(ReleaseBuffersMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400974 __ATTRIB(ReleaseTexImageEXT),
975 __ATTRIB(SelectEventSGIX),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400976 __ATTRIB(SwapBuffersMscOML),
977 __ATTRIB(SwapIntervalMESA),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400978 __ATTRIB(SwapIntervalSGI),
Adam Jackson8bca8d82016-09-14 14:01:13 -0400979 __ATTRIB(WaitForMscOML),
980 __ATTRIB(WaitForSbcOML),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400981 __ATTRIB(WaitVideoSyncSGI),
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400982
Emil Velikov3bf00b62016-05-11 14:01:55 -0400983 [DI_LAST_INDEX] = NULL,
Kyle Brenneman22a9e002016-05-11 14:01:53 -0400984#undef __ATTRIB
985};