glx/glvnd: Fix dispatch function names and indices
[mesa.git] / src / glx / g_glxglvnddispatchfuncs.c
1 /*
2 * THIS FILE IS AUTOMATICALLY GENERATED BY gen_scrn_dispatch.pl
3 * DO NOT EDIT!!
4 */
5 #include <stdlib.h>
6
7 #include "glxglvnd.h"
8 #include "glxglvnddispatchfuncs.h"
9 #include "g_glxglvnddispatchindices.h"
10
11 const int DI_FUNCTION_COUNT = DI_LAST_INDEX;
12 /* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
13 int __glXDispatchTableIndices[DI_LAST_INDEX + 1];
14 const __GLXapiExports *__glXGLVNDAPIExports;
15
16 const char * const __glXDispatchTableStrings[DI_LAST_INDEX] = {
17 #define __ATTRIB(field) \
18 [DI_##field] = "glX"#field
19
20 __ATTRIB(BindSwapBarrierSGIX),
21 __ATTRIB(BindTexImageEXT),
22 // glXChooseFBConfig implemented by libglvnd
23 __ATTRIB(ChooseFBConfigSGIX),
24 // glXChooseVisual implemented by libglvnd
25 // glXCopyContext implemented by libglvnd
26 __ATTRIB(CopySubBufferMESA),
27 // glXCreateContext implemented by libglvnd
28 __ATTRIB(CreateContextAttribsARB),
29 __ATTRIB(CreateContextWithConfigSGIX),
30 __ATTRIB(CreateGLXPbufferSGIX),
31 // glXCreateGLXPixmap implemented by libglvnd
32 __ATTRIB(CreateGLXPixmapMESA),
33 __ATTRIB(CreateGLXPixmapWithConfigSGIX),
34 // glXCreateNewContext implemented by libglvnd
35 // glXCreatePbuffer implemented by libglvnd
36 // glXCreatePixmap implemented by libglvnd
37 // glXCreateWindow implemented by libglvnd
38 // glXDestroyContext implemented by libglvnd
39 __ATTRIB(DestroyGLXPbufferSGIX),
40 // glXDestroyGLXPixmap implemented by libglvnd
41 // glXDestroyPbuffer implemented by libglvnd
42 // glXDestroyPixmap implemented by libglvnd
43 // glXDestroyWindow implemented by libglvnd
44 // glXFreeContextEXT implemented by libglvnd
45 // glXGetClientString implemented by libglvnd
46 // glXGetConfig implemented by libglvnd
47 __ATTRIB(GetContextIDEXT),
48 // glXGetCurrentContext implemented by libglvnd
49 // glXGetCurrentDisplay implemented by libglvnd
50 __ATTRIB(GetCurrentDisplayEXT),
51 // glXGetCurrentDrawable implemented by libglvnd
52 // glXGetCurrentReadDrawable implemented by libglvnd
53 // glXGetFBConfigAttrib implemented by libglvnd
54 __ATTRIB(GetFBConfigAttribSGIX),
55 __ATTRIB(GetFBConfigFromVisualSGIX),
56 // glXGetFBConfigs implemented by libglvnd
57 __ATTRIB(GetMscRateOML),
58 // glXGetProcAddress implemented by libglvnd
59 // glXGetProcAddressARB implemented by libglvnd
60 __ATTRIB(GetScreenDriver),
61 // glXGetSelectedEvent implemented by libglvnd
62 __ATTRIB(GetSelectedEventSGIX),
63 __ATTRIB(GetSwapIntervalMESA),
64 __ATTRIB(GetSyncValuesOML),
65 __ATTRIB(GetVideoSyncSGI),
66 // glXGetVisualFromFBConfig implemented by libglvnd
67 __ATTRIB(GetVisualFromFBConfigSGIX),
68 // glXImportContextEXT implemented by libglvnd
69 // glXIsDirect implemented by libglvnd
70 __ATTRIB(JoinSwapGroupSGIX),
71 // glXMakeContextCurrent implemented by libglvnd
72 // glXMakeCurrent implemented by libglvnd
73 // glXQueryContext implemented by libglvnd
74 __ATTRIB(QueryContextInfoEXT),
75 __ATTRIB(QueryCurrentRendererIntegerMESA),
76 __ATTRIB(QueryCurrentRendererStringMESA),
77 // glXQueryDrawable implemented by libglvnd
78 // glXQueryExtension implemented by libglvnd
79 // glXQueryExtensionsString implemented by libglvnd
80 __ATTRIB(QueryGLXPbufferSGIX),
81 __ATTRIB(QueryMaxSwapBarriersSGIX),
82 __ATTRIB(QueryRendererIntegerMESA),
83 __ATTRIB(QueryRendererStringMESA),
84 // glXQueryServerString implemented by libglvnd
85 // glXQueryVersion implemented by libglvnd
86 __ATTRIB(ReleaseBuffersMESA),
87 __ATTRIB(ReleaseTexImageEXT),
88 // glXSelectEvent implemented by libglvnd
89 __ATTRIB(SelectEventSGIX),
90 // glXSwapBuffers implemented by libglvnd
91 __ATTRIB(SwapBuffersMscOML),
92 __ATTRIB(SwapIntervalMESA),
93 __ATTRIB(SwapIntervalSGI),
94 // glXUseXFont implemented by libglvnd
95 __ATTRIB(WaitForMscOML),
96 __ATTRIB(WaitForSbcOML),
97 // glXWaitGL implemented by libglvnd
98 __ATTRIB(WaitVideoSyncSGI),
99 // glXWaitX implemented by libglvnd
100
101 #undef __ATTRIB
102 };
103
104 #define __FETCH_FUNCTION_PTR(func_name) \
105 p##func_name = (void *) \
106 __VND->fetchDispatchEntry(dd, __glXDispatchTableIndices[DI_##func_name])
107
108
109 static void dispatch_BindTexImageEXT(Display *dpy, GLXDrawable drawable,
110 int buffer, const int *attrib_list)
111 {
112 PFNGLXBINDTEXIMAGEEXTPROC pBindTexImageEXT;
113 __GLXvendorInfo *dd;
114
115 dd = GetDispatchFromDrawable(dpy, drawable);
116 if (dd == NULL)
117 return;
118
119 __FETCH_FUNCTION_PTR(BindTexImageEXT);
120 if (pBindTexImageEXT == NULL)
121 return;
122
123 (*pBindTexImageEXT)(dpy, drawable, buffer, attrib_list);
124 }
125
126
127
128 static GLXFBConfigSGIX *dispatch_ChooseFBConfigSGIX(Display *dpy, int screen,
129 const int *attrib_list,
130 int *nelements)
131 {
132 PFNGLXCHOOSEFBCONFIGSGIXPROC pChooseFBConfigSGIX;
133 __GLXvendorInfo *dd;
134 GLXFBConfigSGIX *ret;
135
136 dd = __VND->getDynDispatch(dpy, screen);
137 if (dd == NULL)
138 return NULL;
139
140 __FETCH_FUNCTION_PTR(ChooseFBConfigSGIX);
141 if (pChooseFBConfigSGIX == NULL)
142 return NULL;
143
144 ret = (*pChooseFBConfigSGIX)(dpy, screen, attrib_list, nelements);
145 if (AddFBConfigsMapping(dpy, ret, nelements, dd)) {
146 free(ret);
147 return NULL;
148 }
149
150 return ret;
151 }
152
153
154
155 static GLXContext dispatch_CreateContextAttribsARB(Display *dpy,
156 GLXFBConfig config,
157 GLXContext share_list,
158 Bool direct,
159 const int *attrib_list)
160 {
161 PFNGLXCREATECONTEXTATTRIBSARBPROC pCreateContextAttribsARB;
162 __GLXvendorInfo *dd;
163 GLXContext ret;
164
165 dd = GetDispatchFromFBConfig(dpy, config);
166 if (dd == NULL)
167 return None;
168
169 __FETCH_FUNCTION_PTR(CreateContextAttribsARB);
170 if (pCreateContextAttribsARB == NULL)
171 return None;
172
173 ret = (*pCreateContextAttribsARB)(dpy, config, share_list, direct, attrib_list);
174 if (AddContextMapping(dpy, ret, dd)) {
175 /* XXX: Call glXDestroyContext which lives in libglvnd. If we're not
176 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
177 */
178 return None;
179 }
180
181 return ret;
182 }
183
184
185
186 static GLXContext dispatch_CreateContextWithConfigSGIX(Display *dpy,
187 GLXFBConfigSGIX config,
188 int render_type,
189 GLXContext share_list,
190 Bool direct)
191 {
192 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC pCreateContextWithConfigSGIX;
193 __GLXvendorInfo *dd;
194 GLXContext ret;
195
196 dd = GetDispatchFromFBConfig(dpy, config);
197 if (dd == NULL)
198 return None;
199
200 __FETCH_FUNCTION_PTR(CreateContextWithConfigSGIX);
201 if (pCreateContextWithConfigSGIX == NULL)
202 return None;
203
204 ret = (*pCreateContextWithConfigSGIX)(dpy, config, render_type, share_list, direct);
205 if (AddContextMapping(dpy, ret, dd)) {
206 /* XXX: Call glXDestroyContext which lives in libglvnd. If we're not
207 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
208 */
209 return None;
210 }
211
212 return ret;
213 }
214
215
216
217 static GLXPbuffer dispatch_CreateGLXPbufferSGIX(Display *dpy,
218 GLXFBConfig config,
219 unsigned int width,
220 unsigned int height,
221 const int *attrib_list)
222 {
223 PFNGLXCREATEGLXPBUFFERSGIXPROC pCreateGLXPbufferSGIX;
224 __GLXvendorInfo *dd;
225 GLXPbuffer ret;
226
227 dd = GetDispatchFromFBConfig(dpy, config);
228 if (dd == NULL)
229 return None;
230
231 __FETCH_FUNCTION_PTR(CreateGLXPbufferSGIX);
232 if (pCreateGLXPbufferSGIX == NULL)
233 return None;
234
235 ret = (*pCreateGLXPbufferSGIX)(dpy, config, width, height, attrib_list);
236 if (AddDrawableMapping(dpy, ret, dd)) {
237 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX;
238
239 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX);
240 if (pDestroyGLXPbufferSGIX)
241 (*pDestroyGLXPbufferSGIX)(dpy, ret);
242
243 return None;
244 }
245
246 return ret;
247 }
248
249
250
251 static GLXPixmap dispatch_CreateGLXPixmapWithConfigSGIX(Display *dpy,
252 GLXFBConfigSGIX config,
253 Pixmap pixmap)
254 {
255 PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC pCreateGLXPixmapWithConfigSGIX;
256 __GLXvendorInfo *dd;
257 GLXPixmap ret;
258
259 dd = GetDispatchFromFBConfig(dpy, config);
260 if (dd == NULL)
261 return None;
262
263 __FETCH_FUNCTION_PTR(CreateGLXPixmapWithConfigSGIX);
264 if (pCreateGLXPixmapWithConfigSGIX == NULL)
265 return None;
266
267 ret = (*pCreateGLXPixmapWithConfigSGIX)(dpy, config, pixmap);
268 if (AddDrawableMapping(dpy, ret, dd)) {
269 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
270 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
271 */
272 return None;
273 }
274
275 return ret;
276 }
277
278
279
280 static void dispatch_DestroyGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf)
281 {
282 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX;
283 __GLXvendorInfo *dd;
284
285 dd = GetDispatchFromDrawable(dpy, pbuf);
286 if (dd == NULL)
287 return;
288
289 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX);
290 if (pDestroyGLXPbufferSGIX == NULL)
291 return;
292
293 (*pDestroyGLXPbufferSGIX)(dpy, pbuf);
294 }
295
296
297
298 static GLXContextID dispatch_GetContextIDEXT(const GLXContext ctx)
299 {
300 PFNGLXGETCONTEXTIDEXTPROC pGetContextIDEXT;
301 __GLXvendorInfo *dd;
302
303 dd = GetDispatchFromContext(ctx);
304 if (dd == NULL)
305 return None;
306
307 __FETCH_FUNCTION_PTR(GetContextIDEXT);
308 if (pGetContextIDEXT == NULL)
309 return None;
310
311 return (*pGetContextIDEXT)(ctx);
312 }
313
314
315
316 static Display *dispatch_GetCurrentDisplayEXT(void)
317 {
318 PFNGLXGETCURRENTDISPLAYEXTPROC pGetCurrentDisplayEXT;
319 __GLXvendorInfo *dd;
320
321 if (!__VND->getCurrentContext())
322 return NULL;
323
324 dd = __VND->getCurrentDynDispatch();
325 if (dd == NULL)
326 return NULL;
327
328 __FETCH_FUNCTION_PTR(GetCurrentDisplayEXT);
329 if (pGetCurrentDisplayEXT == NULL)
330 return NULL;
331
332 return (*pGetCurrentDisplayEXT)();
333 }
334
335
336
337 static int dispatch_GetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config,
338 int attribute, int *value_return)
339 {
340 PFNGLXGETFBCONFIGATTRIBSGIXPROC pGetFBConfigAttribSGIX;
341 __GLXvendorInfo *dd;
342
343 dd = GetDispatchFromFBConfig(dpy, config);
344 if (dd == NULL)
345 return GLX_NO_EXTENSION;
346
347 __FETCH_FUNCTION_PTR(GetFBConfigAttribSGIX);
348 if (pGetFBConfigAttribSGIX == NULL)
349 return GLX_NO_EXTENSION;
350
351 return (*pGetFBConfigAttribSGIX)(dpy, config, attribute, value_return);
352 }
353
354
355
356 static GLXFBConfigSGIX dispatch_GetFBConfigFromVisualSGIX(Display *dpy,
357 XVisualInfo *vis)
358 {
359 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC pGetFBConfigFromVisualSGIX;
360 __GLXvendorInfo *dd;
361 GLXFBConfigSGIX ret = NULL;
362
363 dd = GetDispatchFromVisual(dpy, vis);
364 if (dd == NULL)
365 return NULL;
366
367 __FETCH_FUNCTION_PTR(GetFBConfigFromVisualSGIX);
368 if (pGetFBConfigFromVisualSGIX == NULL)
369 return NULL;
370
371 ret = (*pGetFBConfigFromVisualSGIX)(dpy, vis);
372 if (AddFBConfigMapping(dpy, ret, dd))
373 /* XXX: dealloc ret ? */
374 return NULL;
375
376 return ret;
377 }
378
379
380
381 static void dispatch_GetSelectedEventSGIX(Display *dpy, GLXDrawable drawable,
382 unsigned long *mask)
383 {
384 PFNGLXGETSELECTEDEVENTSGIXPROC pGetSelectedEventSGIX;
385 __GLXvendorInfo *dd;
386
387 dd = GetDispatchFromDrawable(dpy, drawable);
388 if (dd == NULL)
389 return;
390
391 __FETCH_FUNCTION_PTR(GetSelectedEventSGIX);
392 if (pGetSelectedEventSGIX == NULL)
393 return;
394
395 (*pGetSelectedEventSGIX)(dpy, drawable, mask);
396 }
397
398
399
400 static int dispatch_GetVideoSyncSGI(unsigned int *count)
401 {
402 PFNGLXGETVIDEOSYNCSGIPROC pGetVideoSyncSGI;
403 __GLXvendorInfo *dd;
404
405 if (!__VND->getCurrentContext())
406 return GLX_BAD_CONTEXT;
407
408 dd = __VND->getCurrentDynDispatch();
409 if (dd == NULL)
410 return GLX_NO_EXTENSION;
411
412 __FETCH_FUNCTION_PTR(GetVideoSyncSGI);
413 if (pGetVideoSyncSGI == NULL)
414 return GLX_NO_EXTENSION;
415
416 return (*pGetVideoSyncSGI)(count);
417 }
418
419
420
421 static XVisualInfo *dispatch_GetVisualFromFBConfigSGIX(Display *dpy,
422 GLXFBConfigSGIX config)
423 {
424 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC pGetVisualFromFBConfigSGIX;
425 __GLXvendorInfo *dd;
426
427 dd = GetDispatchFromFBConfig(dpy, config);
428 if (dd == NULL)
429 return NULL;
430
431 __FETCH_FUNCTION_PTR(GetVisualFromFBConfigSGIX);
432 if (pGetVisualFromFBConfigSGIX == NULL)
433 return NULL;
434
435 return (*pGetVisualFromFBConfigSGIX)(dpy, config);
436 }
437
438
439
440 static int dispatch_QueryContextInfoEXT(Display *dpy, GLXContext ctx,
441 int attribute, int *value)
442 {
443 PFNGLXQUERYCONTEXTINFOEXTPROC pQueryContextInfoEXT;
444 __GLXvendorInfo *dd;
445
446 dd = GetDispatchFromContext(ctx);
447 if (dd == NULL)
448 return GLX_NO_EXTENSION;
449
450 __FETCH_FUNCTION_PTR(QueryContextInfoEXT);
451 if (pQueryContextInfoEXT == NULL)
452 return GLX_NO_EXTENSION;
453
454 return (*pQueryContextInfoEXT)(dpy, ctx, attribute, value);
455 }
456
457
458
459 static void dispatch_QueryGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf,
460 int attribute, unsigned int *value)
461 {
462 PFNGLXQUERYGLXPBUFFERSGIXPROC pQueryGLXPbufferSGIX;
463 __GLXvendorInfo *dd;
464
465 dd = GetDispatchFromDrawable(dpy, pbuf);
466 if (dd == NULL)
467 return;
468
469 __FETCH_FUNCTION_PTR(QueryGLXPbufferSGIX);
470 if (pQueryGLXPbufferSGIX == NULL)
471 return;
472
473 (*pQueryGLXPbufferSGIX)(dpy, pbuf, attribute, value);
474 }
475
476
477
478 static void dispatch_ReleaseTexImageEXT(Display *dpy, GLXDrawable drawable,
479 int buffer)
480 {
481 PFNGLXRELEASETEXIMAGEEXTPROC pReleaseTexImageEXT;
482 __GLXvendorInfo *dd;
483
484 dd = GetDispatchFromDrawable(dpy, drawable);
485 if (dd == NULL)
486 return;
487
488 __FETCH_FUNCTION_PTR(ReleaseTexImageEXT);
489 if (pReleaseTexImageEXT == NULL)
490 return;
491
492 (*pReleaseTexImageEXT)(dpy, drawable, buffer);
493 }
494
495
496
497 static void dispatch_SelectEventSGIX(Display *dpy, GLXDrawable drawable,
498 unsigned long mask)
499 {
500 PFNGLXSELECTEVENTSGIXPROC pSelectEventSGIX;
501 __GLXvendorInfo *dd;
502
503 dd = GetDispatchFromDrawable(dpy, drawable);
504 if (dd == NULL)
505 return;
506
507 __FETCH_FUNCTION_PTR(SelectEventSGIX);
508 if (pSelectEventSGIX == NULL)
509 return;
510
511 (*pSelectEventSGIX)(dpy, drawable, mask);
512 }
513
514
515
516 static int dispatch_SwapIntervalSGI(int interval)
517 {
518 PFNGLXSWAPINTERVALSGIPROC pSwapIntervalSGI;
519 __GLXvendorInfo *dd;
520
521 if (!__VND->getCurrentContext())
522 return GLX_BAD_CONTEXT;
523
524 dd = __VND->getCurrentDynDispatch();
525 if (dd == NULL)
526 return GLX_NO_EXTENSION;
527
528 __FETCH_FUNCTION_PTR(SwapIntervalSGI);
529 if (pSwapIntervalSGI == NULL)
530 return GLX_NO_EXTENSION;
531
532 return (*pSwapIntervalSGI)(interval);
533 }
534
535
536
537 static int dispatch_WaitVideoSyncSGI(int divisor, int remainder,
538 unsigned int *count)
539 {
540 PFNGLXWAITVIDEOSYNCSGIPROC pWaitVideoSyncSGI;
541 __GLXvendorInfo *dd;
542
543 if (!__VND->getCurrentContext())
544 return GLX_BAD_CONTEXT;
545
546 dd = __VND->getCurrentDynDispatch();
547 if (dd == NULL)
548 return GLX_NO_EXTENSION;
549
550 __FETCH_FUNCTION_PTR(WaitVideoSyncSGI);
551 if (pWaitVideoSyncSGI == NULL)
552 return GLX_NO_EXTENSION;
553
554 return (*pWaitVideoSyncSGI)(divisor, remainder, count);
555 }
556
557
558
559 static void dispatch_BindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable,
560 int barrier)
561 {
562 PFNGLXBINDSWAPBARRIERSGIXPROC pBindSwapBarrierSGIX;
563 __GLXvendorInfo *dd;
564
565 dd = GetDispatchFromDrawable(dpy, drawable);
566 if (dd == NULL)
567 return;
568
569 __FETCH_FUNCTION_PTR(BindSwapBarrierSGIX);
570 if (pBindSwapBarrierSGIX == NULL)
571 return;
572
573 (*pBindSwapBarrierSGIX)(dpy, drawable, barrier);
574 }
575
576
577
578 static void dispatch_CopySubBufferMESA(Display *dpy, GLXDrawable drawable,
579 int x, int y, int width, int height)
580 {
581 PFNGLXCOPYSUBBUFFERMESAPROC pCopySubBufferMESA;
582 __GLXvendorInfo *dd;
583
584 dd = GetDispatchFromDrawable(dpy, drawable);
585 if (dd == NULL)
586 return;
587
588 __FETCH_FUNCTION_PTR(CopySubBufferMESA);
589 if (pCopySubBufferMESA == NULL)
590 return;
591
592 (*pCopySubBufferMESA)(dpy, drawable, x, y, width, height);
593 }
594
595
596
597 static GLXPixmap dispatch_CreateGLXPixmapMESA(Display *dpy,
598 XVisualInfo *visinfo,
599 Pixmap pixmap, Colormap cmap)
600 {
601 PFNGLXCREATEGLXPIXMAPMESAPROC pCreateGLXPixmapMESA;
602 __GLXvendorInfo *dd;
603 GLXPixmap ret;
604
605 dd = GetDispatchFromVisual(dpy, visinfo);
606 if (dd == NULL)
607 return None;
608
609 __FETCH_FUNCTION_PTR(CreateGLXPixmapMESA);
610 if (pCreateGLXPixmapMESA == NULL)
611 return None;
612
613 ret = (*pCreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap);
614 if (AddDrawableMapping(dpy, ret, dd)) {
615 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
616 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
617 */
618 return None;
619 }
620
621 return ret;
622 }
623
624
625
626 static GLboolean dispatch_GetMscRateOML(Display *dpy, GLXDrawable drawable,
627 int32_t *numerator, int32_t *denominator)
628 {
629 PFNGLXGETMSCRATEOMLPROC pGetMscRateOML;
630 __GLXvendorInfo *dd;
631
632 dd = GetDispatchFromDrawable(dpy, drawable);
633 if (dd == NULL)
634 return GL_FALSE;
635
636 __FETCH_FUNCTION_PTR(GetMscRateOML);
637 if (pGetMscRateOML == NULL)
638 return GL_FALSE;
639
640 return (*pGetMscRateOML)(dpy, drawable, numerator, denominator);
641 }
642
643
644
645 static const char *dispatch_GetScreenDriver(Display *dpy, int scrNum)
646 {
647 typedef const char *(*fn_glXGetScreenDriver_ptr)(Display *dpy, int scrNum);
648 fn_glXGetScreenDriver_ptr pGetScreenDriver;
649 __GLXvendorInfo *dd;
650
651 dd = __VND->getDynDispatch(dpy, scrNum);
652 if (dd == NULL)
653 return NULL;
654
655 __FETCH_FUNCTION_PTR(GetScreenDriver);
656 if (pGetScreenDriver == NULL)
657 return NULL;
658
659 return (*pGetScreenDriver)(dpy, scrNum);
660 }
661
662
663
664 static int dispatch_GetSwapIntervalMESA(void)
665 {
666 PFNGLXGETSWAPINTERVALMESAPROC pGetSwapIntervalMESA;
667 __GLXvendorInfo *dd;
668
669 if (!__VND->getCurrentContext())
670 return GLX_BAD_CONTEXT;
671
672 dd = __VND->getCurrentDynDispatch();
673 if (dd == NULL)
674 return 0;
675
676 __FETCH_FUNCTION_PTR(GetSwapIntervalMESA);
677 if (pGetSwapIntervalMESA == NULL)
678 return 0;
679
680 return (*pGetSwapIntervalMESA)();
681 }
682
683
684
685 static Bool dispatch_GetSyncValuesOML(Display *dpy, GLXDrawable drawable,
686 int64_t *ust, int64_t *msc, int64_t *sbc)
687 {
688 PFNGLXGETSYNCVALUESOMLPROC pGetSyncValuesOML;
689 __GLXvendorInfo *dd;
690
691 dd = GetDispatchFromDrawable(dpy, drawable);
692 if (dd == NULL)
693 return False;
694
695 __FETCH_FUNCTION_PTR(GetSyncValuesOML);
696 if (pGetSyncValuesOML == NULL)
697 return False;
698
699 return (*pGetSyncValuesOML)(dpy, drawable, ust, msc, sbc);
700 }
701
702
703
704 static void dispatch_JoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable,
705 GLXDrawable member)
706 {
707 PFNGLXJOINSWAPGROUPSGIXPROC pJoinSwapGroupSGIX;
708 __GLXvendorInfo *dd;
709
710 dd = GetDispatchFromDrawable(dpy, drawable);
711 if (dd == NULL)
712 return;
713
714 __FETCH_FUNCTION_PTR(JoinSwapGroupSGIX);
715 if (pJoinSwapGroupSGIX == NULL)
716 return;
717
718 (*pJoinSwapGroupSGIX)(dpy, drawable, member);
719 }
720
721
722
723 static Bool dispatch_QueryCurrentRendererIntegerMESA(int attribute,
724 unsigned int *value)
725 {
726 PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC pQueryCurrentRendererIntegerMESA;
727 __GLXvendorInfo *dd;
728
729 if (!__VND->getCurrentContext())
730 return False;
731
732 dd = __VND->getCurrentDynDispatch();
733 if (dd == NULL)
734 return False;
735
736 __FETCH_FUNCTION_PTR(QueryCurrentRendererIntegerMESA);
737 if (pQueryCurrentRendererIntegerMESA == NULL)
738 return False;
739
740 return (*pQueryCurrentRendererIntegerMESA)(attribute, value);
741 }
742
743
744
745 static const char *dispatch_QueryCurrentRendererStringMESA(int attribute)
746 {
747 PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC pQueryCurrentRendererStringMESA;
748 __GLXvendorInfo *dd;
749
750 if (!__VND->getCurrentContext())
751 return NULL;
752
753 dd = __VND->getCurrentDynDispatch();
754 if (dd == NULL)
755 return NULL;
756
757 __FETCH_FUNCTION_PTR(QueryCurrentRendererStringMESA);
758 if (pQueryCurrentRendererStringMESA == NULL)
759 return NULL;
760
761 return (*pQueryCurrentRendererStringMESA)(attribute);
762 }
763
764
765
766 static Bool dispatch_QueryMaxSwapBarriersSGIX(Display *dpy, int screen,
767 int *max)
768 {
769 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pQueryMaxSwapBarriersSGIX;
770 __GLXvendorInfo *dd;
771
772 dd = __VND->getDynDispatch(dpy, screen);
773 if (dd == NULL)
774 return False;
775
776 __FETCH_FUNCTION_PTR(QueryMaxSwapBarriersSGIX);
777 if (pQueryMaxSwapBarriersSGIX == NULL)
778 return False;
779
780 return (*pQueryMaxSwapBarriersSGIX)(dpy, screen, max);
781 }
782
783
784
785 static Bool dispatch_QueryRendererIntegerMESA(Display *dpy, int screen,
786 int renderer, int attribute,
787 unsigned int *value)
788 {
789 PFNGLXQUERYRENDERERINTEGERMESAPROC pQueryRendererIntegerMESA;
790 __GLXvendorInfo *dd;
791
792 dd = __VND->getDynDispatch(dpy, screen);
793 if (dd == NULL)
794 return False;
795
796 __FETCH_FUNCTION_PTR(QueryRendererIntegerMESA);
797 if (pQueryRendererIntegerMESA == NULL)
798 return False;
799
800 return (*pQueryRendererIntegerMESA)(dpy, screen, renderer, attribute, value);
801 }
802
803
804
805 static const char *dispatch_QueryRendererStringMESA(Display *dpy, int screen,
806 int renderer, int attribute)
807 {
808 PFNGLXQUERYRENDERERSTRINGMESAPROC pQueryRendererStringMESA;
809 __GLXvendorInfo *dd = NULL;
810
811 dd = __VND->getDynDispatch(dpy, screen);
812 if (dd == NULL)
813 return NULL;
814
815 __FETCH_FUNCTION_PTR(QueryRendererStringMESA);
816 if (pQueryRendererStringMESA == NULL)
817 return NULL;
818
819 return (*pQueryRendererStringMESA)(dpy, screen, renderer, attribute);
820 }
821
822
823
824 static Bool dispatch_ReleaseBuffersMESA(Display *dpy, GLXDrawable d)
825 {
826 PFNGLXRELEASEBUFFERSMESAPROC pReleaseBuffersMESA;
827 __GLXvendorInfo *dd;
828
829 dd = GetDispatchFromDrawable(dpy, d);
830 if (dd == NULL)
831 return False;
832
833 __FETCH_FUNCTION_PTR(ReleaseBuffersMESA);
834 if (pReleaseBuffersMESA == NULL)
835 return False;
836
837 return (*pReleaseBuffersMESA)(dpy, d);
838 }
839
840
841
842 static int64_t dispatch_SwapBuffersMscOML(Display *dpy, GLXDrawable drawable,
843 int64_t target_msc, int64_t divisor,
844 int64_t remainder)
845 {
846 PFNGLXSWAPBUFFERSMSCOMLPROC pSwapBuffersMscOML;
847 __GLXvendorInfo *dd;
848
849 dd = GetDispatchFromDrawable(dpy, drawable);
850 if (dd == NULL)
851 return 0;
852
853 __FETCH_FUNCTION_PTR(SwapBuffersMscOML);
854 if (pSwapBuffersMscOML == NULL)
855 return 0;
856
857 return (*pSwapBuffersMscOML)(dpy, drawable, target_msc, divisor, remainder);
858 }
859
860
861
862 static int dispatch_SwapIntervalMESA(unsigned int interval)
863 {
864 PFNGLXSWAPINTERVALMESAPROC pSwapIntervalMESA;
865 __GLXvendorInfo *dd;
866
867 if (!__VND->getCurrentContext())
868 return GLX_BAD_CONTEXT;
869
870 dd = __VND->getCurrentDynDispatch();
871 if (dd == NULL)
872 return 0;
873
874 __FETCH_FUNCTION_PTR(SwapIntervalMESA);
875 if (pSwapIntervalMESA == NULL)
876 return 0;
877
878 return (*pSwapIntervalMESA)(interval);
879 }
880
881
882
883 static Bool dispatch_WaitForMscOML(Display *dpy, GLXDrawable drawable,
884 int64_t target_msc, int64_t divisor,
885 int64_t remainder, int64_t *ust,
886 int64_t *msc, int64_t *sbc)
887 {
888 PFNGLXWAITFORMSCOMLPROC pWaitForMscOML;
889 __GLXvendorInfo *dd;
890
891 dd = GetDispatchFromDrawable(dpy, drawable);
892 if (dd == NULL)
893 return False;
894
895 __FETCH_FUNCTION_PTR(WaitForMscOML);
896 if (pWaitForMscOML == NULL)
897 return False;
898
899 return (*pWaitForMscOML)(dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc);
900 }
901
902
903
904 static Bool dispatch_WaitForSbcOML(Display *dpy, GLXDrawable drawable,
905 int64_t target_sbc, int64_t *ust,
906 int64_t *msc, int64_t *sbc)
907 {
908 PFNGLXWAITFORSBCOMLPROC pWaitForSbcOML;
909 __GLXvendorInfo *dd;
910
911 dd = GetDispatchFromDrawable(dpy, drawable);
912 if (dd == NULL)
913 return False;
914
915 __FETCH_FUNCTION_PTR(WaitForSbcOML);
916 if (pWaitForSbcOML == NULL)
917 return False;
918
919 return (*pWaitForSbcOML)(dpy, drawable, target_sbc, ust, msc, sbc);
920 }
921
922 #undef __FETCH_FUNCTION_PTR
923
924
925 /* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
926 const void * const __glXDispatchFunctions[DI_LAST_INDEX + 1] = {
927 #define __ATTRIB(field) \
928 [DI_##field] = (void *)dispatch_##field
929
930 __ATTRIB(BindSwapBarrierSGIX),
931 __ATTRIB(BindTexImageEXT),
932 __ATTRIB(ChooseFBConfigSGIX),
933 __ATTRIB(CopySubBufferMESA),
934 __ATTRIB(CreateContextAttribsARB),
935 __ATTRIB(CreateContextWithConfigSGIX),
936 __ATTRIB(CreateGLXPbufferSGIX),
937 __ATTRIB(CreateGLXPixmapMESA),
938 __ATTRIB(CreateGLXPixmapWithConfigSGIX),
939 __ATTRIB(DestroyGLXPbufferSGIX),
940 __ATTRIB(GetContextIDEXT),
941 __ATTRIB(GetCurrentDisplayEXT),
942 __ATTRIB(GetFBConfigAttribSGIX),
943 __ATTRIB(GetFBConfigFromVisualSGIX),
944 __ATTRIB(GetMscRateOML),
945 __ATTRIB(GetScreenDriver),
946 __ATTRIB(GetSelectedEventSGIX),
947 __ATTRIB(GetSwapIntervalMESA),
948 __ATTRIB(GetSyncValuesOML),
949 __ATTRIB(GetVideoSyncSGI),
950 __ATTRIB(GetVisualFromFBConfigSGIX),
951 __ATTRIB(JoinSwapGroupSGIX),
952 __ATTRIB(QueryContextInfoEXT),
953 __ATTRIB(QueryCurrentRendererIntegerMESA),
954 __ATTRIB(QueryCurrentRendererStringMESA),
955 __ATTRIB(QueryGLXPbufferSGIX),
956 __ATTRIB(QueryMaxSwapBarriersSGIX),
957 __ATTRIB(QueryRendererIntegerMESA),
958 __ATTRIB(QueryRendererStringMESA),
959 __ATTRIB(ReleaseBuffersMESA),
960 __ATTRIB(ReleaseTexImageEXT),
961 __ATTRIB(SelectEventSGIX),
962 __ATTRIB(SwapBuffersMscOML),
963 __ATTRIB(SwapIntervalMESA),
964 __ATTRIB(SwapIntervalSGI),
965 __ATTRIB(WaitForMscOML),
966 __ATTRIB(WaitForSbcOML),
967 __ATTRIB(WaitVideoSyncSGI),
968
969 [DI_LAST_INDEX] = NULL,
970 #undef __ATTRIB
971 };