2 * THIS FILE IS AUTOMATICALLY GENERATED BY gen_scrn_dispatch.pl
8 #include "glxglvnddispatchfuncs.h"
9 #include "g_glxglvnddispatchindices.h"
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
;
16 const char * const __glXDispatchTableStrings
[DI_LAST_INDEX
] = {
17 #define __ATTRIB(field) \
18 [DI_##field] = "glX"#field
20 __ATTRIB(BindTexImageEXT
),
21 // glXChooseFBConfig implemented by libglvnd
22 __ATTRIB(ChooseFBConfigSGIX
),
23 // glXChooseVisual implemented by libglvnd
24 // glXCopyContext implemented by libglvnd
25 // glXCreateContext implemented by libglvnd
26 __ATTRIB(CreateContextAttribsARB
),
27 __ATTRIB(CreateContextWithConfigSGIX
),
28 __ATTRIB(CreateGLXPbufferSGIX
),
29 // glXCreateGLXPixmap implemented by libglvnd
30 __ATTRIB(CreateGLXPixmapWithConfigSGIX
),
31 // glXCreateNewContext implemented by libglvnd
32 // glXCreatePbuffer implemented by libglvnd
33 // glXCreatePixmap implemented by libglvnd
34 // glXCreateWindow implemented by libglvnd
35 // glXDestroyContext implemented by libglvnd
36 __ATTRIB(DestroyGLXPbufferSGIX
),
37 // glXDestroyGLXPixmap implemented by libglvnd
38 // glXDestroyPbuffer implemented by libglvnd
39 // glXDestroyPixmap implemented by libglvnd
40 // glXDestroyWindow implemented by libglvnd
41 // glXFreeContextEXT implemented by libglvnd
42 // glXGetClientString implemented by libglvnd
43 // glXGetConfig implemented by libglvnd
44 __ATTRIB(GetContextIDEXT
),
45 // glXGetCurrentContext implemented by libglvnd
46 // glXGetCurrentDisplay implemented by libglvnd
47 __ATTRIB(GetCurrentDisplayEXT
),
48 // glXGetCurrentDrawable implemented by libglvnd
49 // glXGetCurrentReadDrawable implemented by libglvnd
50 // glXGetFBConfigAttrib implemented by libglvnd
51 __ATTRIB(GetFBConfigAttribSGIX
),
52 __ATTRIB(GetFBConfigFromVisualSGIX
),
53 // glXGetFBConfigs implemented by libglvnd
54 // glXGetProcAddress implemented by libglvnd
55 // glXGetProcAddressARB implemented by libglvnd
56 // glXGetSelectedEvent implemented by libglvnd
57 __ATTRIB(GetSelectedEventSGIX
),
58 __ATTRIB(GetVideoSyncSGI
),
59 // glXGetVisualFromFBConfig implemented by libglvnd
60 __ATTRIB(GetVisualFromFBConfigSGIX
),
61 // glXImportContextEXT implemented by libglvnd
62 // glXIsDirect implemented by libglvnd
63 // glXMakeContextCurrent implemented by libglvnd
64 // glXMakeCurrent implemented by libglvnd
65 // glXQueryContext implemented by libglvnd
66 __ATTRIB(QueryContextInfoEXT
),
67 // glXQueryDrawable implemented by libglvnd
68 // glXQueryExtension implemented by libglvnd
69 // glXQueryExtensionsString implemented by libglvnd
70 __ATTRIB(QueryGLXPbufferSGIX
),
71 // glXQueryServerString implemented by libglvnd
72 // glXQueryVersion implemented by libglvnd
73 __ATTRIB(ReleaseTexImageEXT
),
74 // glXSelectEvent implemented by libglvnd
75 __ATTRIB(SelectEventSGIX
),
76 // glXSwapBuffers implemented by libglvnd
77 __ATTRIB(SwapIntervalSGI
),
78 // glXUseXFont implemented by libglvnd
79 // glXWaitGL implemented by libglvnd
80 __ATTRIB(WaitVideoSyncSGI
),
81 // glXWaitX implemented by libglvnd
83 __ATTRIB(glXBindSwapBarrierSGIX
),
84 __ATTRIB(glXCopySubBufferMESA
),
85 __ATTRIB(glXCreateGLXPixmapMESA
),
86 __ATTRIB(glXGetMscRateOML
),
87 __ATTRIB(glXGetScreenDriver
),
88 __ATTRIB(glXGetSwapIntervalMESA
),
89 __ATTRIB(glXGetSyncValuesOML
),
90 __ATTRIB(glXJoinSwapGroupSGIX
),
91 __ATTRIB(glXQueryCurrentRendererIntegerMESA
),
92 __ATTRIB(glXQueryCurrentRendererStringMESA
),
93 __ATTRIB(glXQueryMaxSwapBarriersSGIX
),
94 __ATTRIB(glXQueryRendererIntegerMESA
),
95 __ATTRIB(glXQueryRendererStringMESA
),
96 __ATTRIB(glXReleaseBuffersMESA
),
97 __ATTRIB(glXSwapBuffersMscOML
),
98 __ATTRIB(glXSwapIntervalMESA
),
99 __ATTRIB(glXWaitForMscOML
),
100 __ATTRIB(glXWaitForSbcOML
),
105 #define __FETCH_FUNCTION_PTR(func_name) \
106 p##func_name = (void *) \
107 __VND->fetchDispatchEntry(dd, __glXDispatchTableIndices[DI_##func_name])
110 static void dispatch_BindTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
111 int buffer
, const int *attrib_list
)
113 PFNGLXBINDTEXIMAGEEXTPROC pBindTexImageEXT
;
116 dd
= GetDispatchFromDrawable(dpy
, drawable
);
120 __FETCH_FUNCTION_PTR(BindTexImageEXT
);
121 if (pBindTexImageEXT
== NULL
)
124 (*pBindTexImageEXT
)(dpy
, drawable
, buffer
, attrib_list
);
129 static GLXFBConfigSGIX
*dispatch_ChooseFBConfigSGIX(Display
*dpy
, int screen
,
130 const int *attrib_list
,
133 PFNGLXCHOOSEFBCONFIGSGIXPROC pChooseFBConfigSGIX
;
135 GLXFBConfigSGIX
*ret
;
137 dd
= __VND
->getDynDispatch(dpy
, screen
);
141 __FETCH_FUNCTION_PTR(ChooseFBConfigSGIX
);
142 if (pChooseFBConfigSGIX
== NULL
)
145 ret
= (*pChooseFBConfigSGIX
)(dpy
, screen
, attrib_list
, nelements
);
146 if (AddFBConfigsMapping(dpy
, ret
, nelements
, dd
)) {
156 static GLXContext
dispatch_CreateContextAttribsARB(Display
*dpy
,
158 GLXContext share_list
,
160 const int *attrib_list
)
162 PFNGLXCREATECONTEXTATTRIBSARBPROC pCreateContextAttribsARB
;
166 dd
= GetDispatchFromFBConfig(dpy
, config
);
170 __FETCH_FUNCTION_PTR(CreateContextAttribsARB
);
171 if (pCreateContextAttribsARB
== NULL
)
174 ret
= (*pCreateContextAttribsARB
)(dpy
, config
, share_list
, direct
, attrib_list
);
175 if (AddContextMapping(dpy
, ret
, dd
)) {
176 /* XXX: Call glXDestroyContext which lives in libglvnd. If we're not
177 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
187 static GLXContext
dispatch_CreateContextWithConfigSGIX(Display
*dpy
,
188 GLXFBConfigSGIX config
,
190 GLXContext share_list
,
193 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC pCreateContextWithConfigSGIX
;
197 dd
= GetDispatchFromFBConfig(dpy
, config
);
201 __FETCH_FUNCTION_PTR(CreateContextWithConfigSGIX
);
202 if (pCreateContextWithConfigSGIX
== NULL
)
205 ret
= (*pCreateContextWithConfigSGIX
)(dpy
, config
, render_type
, share_list
, direct
);
206 if (AddContextMapping(dpy
, ret
, dd
)) {
207 /* XXX: Call glXDestroyContext which lives in libglvnd. If we're not
208 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
218 static GLXPbuffer
dispatch_CreateGLXPbufferSGIX(Display
*dpy
,
222 const int *attrib_list
)
224 PFNGLXCREATEGLXPBUFFERSGIXPROC pCreateGLXPbufferSGIX
;
228 dd
= GetDispatchFromFBConfig(dpy
, config
);
232 __FETCH_FUNCTION_PTR(CreateGLXPbufferSGIX
);
233 if (pCreateGLXPbufferSGIX
== NULL
)
236 ret
= (*pCreateGLXPbufferSGIX
)(dpy
, config
, width
, height
, attrib_list
);
237 if (AddDrawableMapping(dpy
, ret
, dd
)) {
238 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX
;
240 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX
);
241 if (pDestroyGLXPbufferSGIX
)
242 (*pDestroyGLXPbufferSGIX
)(dpy
, ret
);
252 static GLXPixmap
dispatch_CreateGLXPixmapWithConfigSGIX(Display
*dpy
,
253 GLXFBConfigSGIX config
,
256 PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC pCreateGLXPixmapWithConfigSGIX
;
260 dd
= GetDispatchFromFBConfig(dpy
, config
);
264 __FETCH_FUNCTION_PTR(CreateGLXPixmapWithConfigSGIX
);
265 if (pCreateGLXPixmapWithConfigSGIX
== NULL
)
268 ret
= (*pCreateGLXPixmapWithConfigSGIX
)(dpy
, config
, pixmap
);
269 if (AddDrawableMapping(dpy
, ret
, dd
)) {
270 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
271 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
281 static void dispatch_DestroyGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
)
283 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX
;
286 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
290 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX
);
291 if (pDestroyGLXPbufferSGIX
== NULL
)
294 (*pDestroyGLXPbufferSGIX
)(dpy
, pbuf
);
299 static GLXContextID
dispatch_GetContextIDEXT(const GLXContext ctx
)
301 PFNGLXGETCONTEXTIDEXTPROC pGetContextIDEXT
;
304 dd
= GetDispatchFromContext(ctx
);
308 __FETCH_FUNCTION_PTR(GetContextIDEXT
);
309 if (pGetContextIDEXT
== NULL
)
312 return (*pGetContextIDEXT
)(ctx
);
317 static Display
*dispatch_GetCurrentDisplayEXT(void)
319 PFNGLXGETCURRENTDISPLAYEXTPROC pGetCurrentDisplayEXT
;
322 if (!__VND
->getCurrentContext())
325 dd
= __VND
->getCurrentDynDispatch();
329 __FETCH_FUNCTION_PTR(GetCurrentDisplayEXT
);
330 if (pGetCurrentDisplayEXT
== NULL
)
333 return (*pGetCurrentDisplayEXT
)();
338 static int dispatch_GetFBConfigAttribSGIX(Display
*dpy
, GLXFBConfigSGIX config
,
339 int attribute
, int *value_return
)
341 PFNGLXGETFBCONFIGATTRIBSGIXPROC pGetFBConfigAttribSGIX
;
344 dd
= GetDispatchFromFBConfig(dpy
, config
);
346 return GLX_NO_EXTENSION
;
348 __FETCH_FUNCTION_PTR(GetFBConfigAttribSGIX
);
349 if (pGetFBConfigAttribSGIX
== NULL
)
350 return GLX_NO_EXTENSION
;
352 return (*pGetFBConfigAttribSGIX
)(dpy
, config
, attribute
, value_return
);
357 static GLXFBConfigSGIX
dispatch_GetFBConfigFromVisualSGIX(Display
*dpy
,
360 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC pGetFBConfigFromVisualSGIX
;
362 GLXFBConfigSGIX ret
= NULL
;
364 dd
= GetDispatchFromVisual(dpy
, vis
);
368 __FETCH_FUNCTION_PTR(GetFBConfigFromVisualSGIX
);
369 if (pGetFBConfigFromVisualSGIX
== NULL
)
372 ret
= (*pGetFBConfigFromVisualSGIX
)(dpy
, vis
);
373 if (AddFBConfigMapping(dpy
, ret
, dd
))
374 /* XXX: dealloc ret ? */
382 static void dispatch_GetSelectedEventSGIX(Display
*dpy
, GLXDrawable drawable
,
385 PFNGLXGETSELECTEDEVENTSGIXPROC pGetSelectedEventSGIX
;
388 dd
= GetDispatchFromDrawable(dpy
, drawable
);
392 __FETCH_FUNCTION_PTR(GetSelectedEventSGIX
);
393 if (pGetSelectedEventSGIX
== NULL
)
396 (*pGetSelectedEventSGIX
)(dpy
, drawable
, mask
);
401 static int dispatch_GetVideoSyncSGI(unsigned int *count
)
403 PFNGLXGETVIDEOSYNCSGIPROC pGetVideoSyncSGI
;
406 if (!__VND
->getCurrentContext())
407 return GLX_BAD_CONTEXT
;
409 dd
= __VND
->getCurrentDynDispatch();
411 return GLX_NO_EXTENSION
;
413 __FETCH_FUNCTION_PTR(GetVideoSyncSGI
);
414 if (pGetVideoSyncSGI
== NULL
)
415 return GLX_NO_EXTENSION
;
417 return (*pGetVideoSyncSGI
)(count
);
422 static XVisualInfo
*dispatch_GetVisualFromFBConfigSGIX(Display
*dpy
,
423 GLXFBConfigSGIX config
)
425 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC pGetVisualFromFBConfigSGIX
;
428 dd
= GetDispatchFromFBConfig(dpy
, config
);
432 __FETCH_FUNCTION_PTR(GetVisualFromFBConfigSGIX
);
433 if (pGetVisualFromFBConfigSGIX
== NULL
)
436 return (*pGetVisualFromFBConfigSGIX
)(dpy
, config
);
441 static int dispatch_QueryContextInfoEXT(Display
*dpy
, GLXContext ctx
,
442 int attribute
, int *value
)
444 PFNGLXQUERYCONTEXTINFOEXTPROC pQueryContextInfoEXT
;
447 dd
= GetDispatchFromContext(ctx
);
449 return GLX_NO_EXTENSION
;
451 __FETCH_FUNCTION_PTR(QueryContextInfoEXT
);
452 if (pQueryContextInfoEXT
== NULL
)
453 return GLX_NO_EXTENSION
;
455 return (*pQueryContextInfoEXT
)(dpy
, ctx
, attribute
, value
);
460 static void dispatch_QueryGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
,
461 int attribute
, unsigned int *value
)
463 PFNGLXQUERYGLXPBUFFERSGIXPROC pQueryGLXPbufferSGIX
;
466 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
470 __FETCH_FUNCTION_PTR(QueryGLXPbufferSGIX
);
471 if (pQueryGLXPbufferSGIX
== NULL
)
474 (*pQueryGLXPbufferSGIX
)(dpy
, pbuf
, attribute
, value
);
479 static void dispatch_ReleaseTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
482 PFNGLXRELEASETEXIMAGEEXTPROC pReleaseTexImageEXT
;
485 dd
= GetDispatchFromDrawable(dpy
, drawable
);
489 __FETCH_FUNCTION_PTR(ReleaseTexImageEXT
);
490 if (pReleaseTexImageEXT
== NULL
)
493 (*pReleaseTexImageEXT
)(dpy
, drawable
, buffer
);
498 static void dispatch_SelectEventSGIX(Display
*dpy
, GLXDrawable drawable
,
501 PFNGLXSELECTEVENTSGIXPROC pSelectEventSGIX
;
504 dd
= GetDispatchFromDrawable(dpy
, drawable
);
508 __FETCH_FUNCTION_PTR(SelectEventSGIX
);
509 if (pSelectEventSGIX
== NULL
)
512 (*pSelectEventSGIX
)(dpy
, drawable
, mask
);
517 static int dispatch_SwapIntervalSGI(int interval
)
519 PFNGLXSWAPINTERVALSGIPROC pSwapIntervalSGI
;
522 if (!__VND
->getCurrentContext())
523 return GLX_BAD_CONTEXT
;
525 dd
= __VND
->getCurrentDynDispatch();
527 return GLX_NO_EXTENSION
;
529 __FETCH_FUNCTION_PTR(SwapIntervalSGI
);
530 if (pSwapIntervalSGI
== NULL
)
531 return GLX_NO_EXTENSION
;
533 return (*pSwapIntervalSGI
)(interval
);
538 static int dispatch_WaitVideoSyncSGI(int divisor
, int remainder
,
541 PFNGLXWAITVIDEOSYNCSGIPROC pWaitVideoSyncSGI
;
544 if (!__VND
->getCurrentContext())
545 return GLX_BAD_CONTEXT
;
547 dd
= __VND
->getCurrentDynDispatch();
549 return GLX_NO_EXTENSION
;
551 __FETCH_FUNCTION_PTR(WaitVideoSyncSGI
);
552 if (pWaitVideoSyncSGI
== NULL
)
553 return GLX_NO_EXTENSION
;
555 return (*pWaitVideoSyncSGI
)(divisor
, remainder
, count
);
560 static void dispatch_glXBindSwapBarrierSGIX(Display
*dpy
, GLXDrawable drawable
,
563 PFNGLXBINDSWAPBARRIERSGIXPROC pglXBindSwapBarrierSGIX
;
566 dd
= GetDispatchFromDrawable(dpy
, drawable
);
570 __FETCH_FUNCTION_PTR(glXBindSwapBarrierSGIX
);
571 if (pglXBindSwapBarrierSGIX
== NULL
)
574 (*pglXBindSwapBarrierSGIX
)(dpy
, drawable
, barrier
);
579 static void dispatch_glXCopySubBufferMESA(Display
*dpy
, GLXDrawable drawable
,
580 int x
, int y
, int width
, int height
)
582 PFNGLXCOPYSUBBUFFERMESAPROC pglXCopySubBufferMESA
;
585 dd
= GetDispatchFromDrawable(dpy
, drawable
);
589 __FETCH_FUNCTION_PTR(glXCopySubBufferMESA
);
590 if (pglXCopySubBufferMESA
== NULL
)
593 (*pglXCopySubBufferMESA
)(dpy
, drawable
, x
, y
, width
, height
);
598 static GLXPixmap
dispatch_glXCreateGLXPixmapMESA(Display
*dpy
,
599 XVisualInfo
*visinfo
,
600 Pixmap pixmap
, Colormap cmap
)
602 PFNGLXCREATEGLXPIXMAPMESAPROC pglXCreateGLXPixmapMESA
;
606 dd
= GetDispatchFromVisual(dpy
, visinfo
);
610 __FETCH_FUNCTION_PTR(glXCreateGLXPixmapMESA
);
611 if (pglXCreateGLXPixmapMESA
== NULL
)
614 ret
= (*pglXCreateGLXPixmapMESA
)(dpy
, visinfo
, pixmap
, cmap
);
615 if (AddDrawableMapping(dpy
, ret
, dd
)) {
616 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
617 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
627 static GLboolean
dispatch_glXGetMscRateOML(Display
*dpy
, GLXDrawable drawable
,
628 int32_t *numerator
, int32_t *denominator
)
630 PFNGLXGETMSCRATEOMLPROC pglXGetMscRateOML
;
633 dd
= GetDispatchFromDrawable(dpy
, drawable
);
637 __FETCH_FUNCTION_PTR(glXGetMscRateOML
);
638 if (pglXGetMscRateOML
== NULL
)
641 return (*pglXGetMscRateOML
)(dpy
, drawable
, numerator
, denominator
);
646 static const char *dispatch_glXGetScreenDriver(Display
*dpy
, int scrNum
)
648 typedef const char *(*fn_glXGetScreenDriver_ptr
)(Display
*dpy
, int scrNum
);
649 fn_glXGetScreenDriver_ptr pglXGetScreenDriver
;
652 dd
= __VND
->getDynDispatch(dpy
, scrNum
);
656 __FETCH_FUNCTION_PTR(glXGetScreenDriver
);
657 if (pglXGetScreenDriver
== NULL
)
660 return (*pglXGetScreenDriver
)(dpy
, scrNum
);
665 static int dispatch_glXGetSwapIntervalMESA(void)
667 PFNGLXGETSWAPINTERVALMESAPROC pglXGetSwapIntervalMESA
;
670 if (!__VND
->getCurrentContext())
671 return GLX_BAD_CONTEXT
;
673 dd
= __VND
->getCurrentDynDispatch();
677 __FETCH_FUNCTION_PTR(glXGetSwapIntervalMESA
);
678 if (pglXGetSwapIntervalMESA
== NULL
)
681 return (*pglXGetSwapIntervalMESA
)();
686 static Bool
dispatch_glXGetSyncValuesOML(Display
*dpy
, GLXDrawable drawable
,
687 int64_t *ust
, int64_t *msc
, int64_t *sbc
)
689 PFNGLXGETSYNCVALUESOMLPROC pglXGetSyncValuesOML
;
692 dd
= GetDispatchFromDrawable(dpy
, drawable
);
696 __FETCH_FUNCTION_PTR(glXGetSyncValuesOML
);
697 if (pglXGetSyncValuesOML
== NULL
)
700 return (*pglXGetSyncValuesOML
)(dpy
, drawable
, ust
, msc
, sbc
);
705 static void dispatch_glXJoinSwapGroupSGIX(Display
*dpy
, GLXDrawable drawable
,
708 PFNGLXJOINSWAPGROUPSGIXPROC pglXJoinSwapGroupSGIX
;
711 dd
= GetDispatchFromDrawable(dpy
, drawable
);
715 __FETCH_FUNCTION_PTR(glXJoinSwapGroupSGIX
);
716 if (pglXJoinSwapGroupSGIX
== NULL
)
719 (*pglXJoinSwapGroupSGIX
)(dpy
, drawable
, member
);
724 static Bool
dispatch_glXQueryCurrentRendererIntegerMESA(int attribute
,
727 PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC pglXQueryCurrentRendererIntegerMESA
;
730 if (!__VND
->getCurrentContext())
733 dd
= __VND
->getCurrentDynDispatch();
737 __FETCH_FUNCTION_PTR(glXQueryCurrentRendererIntegerMESA
);
738 if (pglXQueryCurrentRendererIntegerMESA
== NULL
)
741 return (*pglXQueryCurrentRendererIntegerMESA
)(attribute
, value
);
746 static const char *dispatch_glXQueryCurrentRendererStringMESA(int attribute
)
748 PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC pglXQueryCurrentRendererStringMESA
;
751 if (!__VND
->getCurrentContext())
754 dd
= __VND
->getCurrentDynDispatch();
758 __FETCH_FUNCTION_PTR(glXQueryCurrentRendererStringMESA
);
759 if (pglXQueryCurrentRendererStringMESA
== NULL
)
762 return (*pglXQueryCurrentRendererStringMESA
)(attribute
);
767 static Bool
dispatch_glXQueryMaxSwapBarriersSGIX(Display
*dpy
, int screen
,
770 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pglXQueryMaxSwapBarriersSGIX
;
773 dd
= __VND
->getDynDispatch(dpy
, screen
);
777 __FETCH_FUNCTION_PTR(glXQueryMaxSwapBarriersSGIX
);
778 if (pglXQueryMaxSwapBarriersSGIX
== NULL
)
781 return (*pglXQueryMaxSwapBarriersSGIX
)(dpy
, screen
, max
);
786 static Bool
dispatch_glXQueryRendererIntegerMESA(Display
*dpy
, int screen
,
787 int renderer
, int attribute
,
790 PFNGLXQUERYRENDERERINTEGERMESAPROC pglXQueryRendererIntegerMESA
;
793 dd
= __VND
->getDynDispatch(dpy
, screen
);
797 __FETCH_FUNCTION_PTR(glXQueryRendererIntegerMESA
);
798 if (pglXQueryRendererIntegerMESA
== NULL
)
801 return (*pglXQueryRendererIntegerMESA
)(dpy
, screen
, renderer
, attribute
, value
);
806 static const char *dispatch_glXQueryRendererStringMESA(Display
*dpy
, int screen
,
807 int renderer
, int attribute
)
809 PFNGLXQUERYRENDERERSTRINGMESAPROC pglXQueryRendererStringMESA
;
810 __GLXvendorInfo
*dd
= NULL
;
812 dd
= __VND
->getDynDispatch(dpy
, screen
);
816 __FETCH_FUNCTION_PTR(glXQueryRendererStringMESA
);
817 if (pglXQueryRendererStringMESA
== NULL
)
820 return (*pglXQueryRendererStringMESA
)(dpy
, screen
, renderer
, attribute
);
825 static Bool
dispatch_glXReleaseBuffersMESA(Display
*dpy
, GLXDrawable d
)
827 PFNGLXRELEASEBUFFERSMESAPROC pglXReleaseBuffersMESA
;
830 dd
= GetDispatchFromDrawable(dpy
, d
);
834 __FETCH_FUNCTION_PTR(glXReleaseBuffersMESA
);
835 if (pglXReleaseBuffersMESA
== NULL
)
838 return (*pglXReleaseBuffersMESA
)(dpy
, d
);
843 static int64_t dispatch_glXSwapBuffersMscOML(Display
*dpy
, GLXDrawable drawable
,
844 int64_t target_msc
, int64_t divisor
,
847 PFNGLXSWAPBUFFERSMSCOMLPROC pglXSwapBuffersMscOML
;
850 dd
= GetDispatchFromDrawable(dpy
, drawable
);
854 __FETCH_FUNCTION_PTR(glXSwapBuffersMscOML
);
855 if (pglXSwapBuffersMscOML
== NULL
)
858 return (*pglXSwapBuffersMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
);
863 static int dispatch_glXSwapIntervalMESA(unsigned int interval
)
865 PFNGLXSWAPINTERVALMESAPROC pglXSwapIntervalMESA
;
868 if (!__VND
->getCurrentContext())
869 return GLX_BAD_CONTEXT
;
871 dd
= __VND
->getCurrentDynDispatch();
875 __FETCH_FUNCTION_PTR(glXSwapIntervalMESA
);
876 if (pglXSwapIntervalMESA
== NULL
)
879 return (*pglXSwapIntervalMESA
)(interval
);
884 static Bool
dispatch_glXWaitForMscOML(Display
*dpy
, GLXDrawable drawable
,
885 int64_t target_msc
, int64_t divisor
,
886 int64_t remainder
, int64_t *ust
,
887 int64_t *msc
, int64_t *sbc
)
889 PFNGLXWAITFORMSCOMLPROC pglXWaitForMscOML
;
892 dd
= GetDispatchFromDrawable(dpy
, drawable
);
896 __FETCH_FUNCTION_PTR(glXWaitForMscOML
);
897 if (pglXWaitForMscOML
== NULL
)
900 return (*pglXWaitForMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
, ust
, msc
, sbc
);
905 static Bool
dispatch_glXWaitForSbcOML(Display
*dpy
, GLXDrawable drawable
,
906 int64_t target_sbc
, int64_t *ust
,
907 int64_t *msc
, int64_t *sbc
)
909 PFNGLXWAITFORSBCOMLPROC pglXWaitForSbcOML
;
912 dd
= GetDispatchFromDrawable(dpy
, drawable
);
916 __FETCH_FUNCTION_PTR(glXWaitForSbcOML
);
917 if (pglXWaitForSbcOML
== NULL
)
920 return (*pglXWaitForSbcOML
)(dpy
, drawable
, target_sbc
, ust
, msc
, sbc
);
923 #undef __FETCH_FUNCTION_PTR
926 /* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
927 const void * const __glXDispatchFunctions
[DI_LAST_INDEX
+ 1] = {
928 #define __ATTRIB(field) \
929 [DI_##field] = (void *)dispatch_##field
931 __ATTRIB(BindTexImageEXT
),
932 __ATTRIB(BindTexImageEXT
),
933 __ATTRIB(ChooseFBConfigSGIX
),
934 __ATTRIB(CreateContextAttribsARB
),
935 __ATTRIB(CreateContextWithConfigSGIX
),
936 __ATTRIB(CreateGLXPbufferSGIX
),
937 __ATTRIB(CreateGLXPixmapWithConfigSGIX
),
938 __ATTRIB(DestroyGLXPbufferSGIX
),
939 __ATTRIB(GetContextIDEXT
),
940 __ATTRIB(GetCurrentDisplayEXT
),
941 __ATTRIB(GetFBConfigAttribSGIX
),
942 __ATTRIB(GetFBConfigFromVisualSGIX
),
943 __ATTRIB(GetSelectedEventSGIX
),
944 __ATTRIB(GetVideoSyncSGI
),
945 __ATTRIB(GetVisualFromFBConfigSGIX
),
946 __ATTRIB(QueryContextInfoEXT
),
947 __ATTRIB(QueryGLXPbufferSGIX
),
948 __ATTRIB(ReleaseTexImageEXT
),
949 __ATTRIB(SelectEventSGIX
),
950 __ATTRIB(SwapIntervalSGI
),
951 __ATTRIB(WaitVideoSyncSGI
),
952 __ATTRIB(glXBindSwapBarrierSGIX
),
953 __ATTRIB(glXCopySubBufferMESA
),
954 __ATTRIB(glXCreateGLXPixmapMESA
),
955 __ATTRIB(glXGetMscRateOML
),
956 __ATTRIB(glXGetScreenDriver
),
957 __ATTRIB(glXGetSwapIntervalMESA
),
958 __ATTRIB(glXGetSyncValuesOML
),
959 __ATTRIB(glXJoinSwapGroupSGIX
),
960 __ATTRIB(glXQueryCurrentRendererIntegerMESA
),
961 __ATTRIB(glXQueryCurrentRendererStringMESA
),
962 __ATTRIB(glXQueryMaxSwapBarriersSGIX
),
963 __ATTRIB(glXQueryRendererIntegerMESA
),
964 __ATTRIB(glXQueryRendererStringMESA
),
965 __ATTRIB(glXReleaseBuffersMESA
),
966 __ATTRIB(glXSwapBuffersMscOML
),
967 __ATTRIB(glXSwapIntervalMESA
),
968 __ATTRIB(glXWaitForMscOML
),
969 __ATTRIB(glXWaitForSbcOML
),
971 [DI_LAST_INDEX
] = NULL
,