• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
dispatch_BindTexImageEXT(Display * dpy,GLXDrawable drawable,int buffer,const int * attrib_list)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 
dispatch_ChooseFBConfigSGIX(Display * dpy,int screen,const int * attrib_list,int * nelements)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 
dispatch_CreateContextAttribsARB(Display * dpy,GLXFBConfig config,GLXContext share_list,Bool direct,const int * attrib_list)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 
dispatch_CreateContextWithConfigSGIX(Display * dpy,GLXFBConfigSGIX config,int render_type,GLXContext share_list,Bool direct)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 
dispatch_CreateGLXPbufferSGIX(Display * dpy,GLXFBConfig config,unsigned int width,unsigned int height,const int * attrib_list)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 
dispatch_CreateGLXPixmapWithConfigSGIX(Display * dpy,GLXFBConfigSGIX config,Pixmap pixmap)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 
dispatch_DestroyGLXPbufferSGIX(Display * dpy,GLXPbuffer pbuf)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 
dispatch_GetContextIDEXT(const GLXContext ctx)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 
dispatch_GetCurrentDisplayEXT(void)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 
dispatch_GetFBConfigAttribSGIX(Display * dpy,GLXFBConfigSGIX config,int attribute,int * value_return)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 
dispatch_GetFBConfigFromVisualSGIX(Display * dpy,XVisualInfo * vis)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 
dispatch_GetSelectedEventSGIX(Display * dpy,GLXDrawable drawable,unsigned long * mask)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 
dispatch_GetVideoSyncSGI(unsigned int * count)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 
dispatch_GetVisualFromFBConfigSGIX(Display * dpy,GLXFBConfigSGIX config)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 
dispatch_QueryContextInfoEXT(Display * dpy,GLXContext ctx,int attribute,int * value)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 
dispatch_QueryGLXPbufferSGIX(Display * dpy,GLXPbuffer pbuf,int attribute,unsigned int * value)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 
dispatch_ReleaseTexImageEXT(Display * dpy,GLXDrawable drawable,int buffer)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 
dispatch_SelectEventSGIX(Display * dpy,GLXDrawable drawable,unsigned long mask)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 
dispatch_SwapIntervalSGI(int interval)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 
dispatch_WaitVideoSyncSGI(int divisor,int remainder,unsigned int * count)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 
dispatch_BindSwapBarrierSGIX(Display * dpy,GLXDrawable drawable,int barrier)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 
dispatch_CopySubBufferMESA(Display * dpy,GLXDrawable drawable,int x,int y,int width,int height)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 
dispatch_CreateGLXPixmapMESA(Display * dpy,XVisualInfo * visinfo,Pixmap pixmap,Colormap cmap)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 
dispatch_GetMscRateOML(Display * dpy,GLXDrawable drawable,int32_t * numerator,int32_t * denominator)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 
dispatch_GetScreenDriver(Display * dpy,int scrNum)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 
dispatch_GetSwapIntervalMESA(void)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 
dispatch_GetSyncValuesOML(Display * dpy,GLXDrawable drawable,int64_t * ust,int64_t * msc,int64_t * sbc)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 
dispatch_JoinSwapGroupSGIX(Display * dpy,GLXDrawable drawable,GLXDrawable member)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 
dispatch_QueryCurrentRendererIntegerMESA(int attribute,unsigned int * value)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 
dispatch_QueryCurrentRendererStringMESA(int attribute)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 
dispatch_QueryMaxSwapBarriersSGIX(Display * dpy,int screen,int * max)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 
dispatch_QueryRendererIntegerMESA(Display * dpy,int screen,int renderer,int attribute,unsigned int * value)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 
dispatch_QueryRendererStringMESA(Display * dpy,int screen,int renderer,int attribute)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 
dispatch_ReleaseBuffersMESA(Display * dpy,GLXDrawable d)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 
dispatch_SwapBuffersMscOML(Display * dpy,GLXDrawable drawable,int64_t target_msc,int64_t divisor,int64_t remainder)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 
dispatch_SwapIntervalMESA(unsigned int interval)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 
dispatch_WaitForMscOML(Display * dpy,GLXDrawable drawable,int64_t target_msc,int64_t divisor,int64_t remainder,int64_t * ust,int64_t * msc,int64_t * sbc)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 
dispatch_WaitForSbcOML(Display * dpy,GLXDrawable drawable,int64_t target_sbc,int64_t * ust,int64_t * msc,int64_t * sbc)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 };
972