2 * THIS FILE IS AUTOMATICALLY GENERATED BY gen_scrn_dispatch.pl
9 #include "glxglvnddispatchfuncs.h"
10 #include "g_glxglvnddispatchindices.h"
12 const int DI_FUNCTION_COUNT
= DI_LAST_INDEX
;
13 /* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
14 int __glXDispatchTableIndices
[DI_LAST_INDEX
+ 1];
15 const __GLXapiExports
*__glXGLVNDAPIExports
;
17 const char * const __glXDispatchTableStrings
[DI_LAST_INDEX
] = {
18 #define __ATTRIB(field) \
19 [DI_##field] = "glX"#field
21 __ATTRIB(BindSwapBarrierSGIX
),
22 __ATTRIB(BindTexImageEXT
),
23 // glXChooseFBConfig implemented by libglvnd
24 __ATTRIB(ChooseFBConfigSGIX
),
25 // glXChooseVisual implemented by libglvnd
26 // glXCopyContext implemented by libglvnd
27 __ATTRIB(CopySubBufferMESA
),
28 // glXCreateContext implemented by libglvnd
29 __ATTRIB(CreateContextAttribsARB
),
30 __ATTRIB(CreateContextWithConfigSGIX
),
31 __ATTRIB(CreateGLXPbufferSGIX
),
32 // glXCreateGLXPixmap implemented by libglvnd
33 __ATTRIB(CreateGLXPixmapMESA
),
34 __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
54 __ATTRIB(GetDriverConfig
),
55 // glXGetFBConfigAttrib implemented by libglvnd
56 __ATTRIB(GetFBConfigAttribSGIX
),
57 __ATTRIB(GetFBConfigFromVisualSGIX
),
58 // glXGetFBConfigs implemented by libglvnd
59 __ATTRIB(GetMscRateOML
),
60 // glXGetProcAddress implemented by libglvnd
61 // glXGetProcAddressARB implemented by libglvnd
62 __ATTRIB(GetScreenDriver
),
63 // glXGetSelectedEvent implemented by libglvnd
64 __ATTRIB(GetSelectedEventSGIX
),
65 __ATTRIB(GetSwapIntervalMESA
),
66 __ATTRIB(GetSyncValuesOML
),
67 __ATTRIB(GetVideoSyncSGI
),
68 // glXGetVisualFromFBConfig implemented by libglvnd
69 __ATTRIB(GetVisualFromFBConfigSGIX
),
70 // glXImportContextEXT implemented by libglvnd
71 // glXIsDirect implemented by libglvnd
72 __ATTRIB(JoinSwapGroupSGIX
),
73 // glXMakeContextCurrent implemented by libglvnd
74 // glXMakeCurrent implemented by libglvnd
75 // glXQueryContext implemented by libglvnd
76 __ATTRIB(QueryContextInfoEXT
),
77 __ATTRIB(QueryCurrentRendererIntegerMESA
),
78 __ATTRIB(QueryCurrentRendererStringMESA
),
79 // glXQueryDrawable implemented by libglvnd
80 // glXQueryExtension implemented by libglvnd
81 // glXQueryExtensionsString implemented by libglvnd
82 __ATTRIB(QueryGLXPbufferSGIX
),
83 __ATTRIB(QueryMaxSwapBarriersSGIX
),
84 __ATTRIB(QueryRendererIntegerMESA
),
85 __ATTRIB(QueryRendererStringMESA
),
86 // glXQueryServerString implemented by libglvnd
87 // glXQueryVersion implemented by libglvnd
88 __ATTRIB(ReleaseBuffersMESA
),
89 __ATTRIB(ReleaseTexImageEXT
),
90 // glXSelectEvent implemented by libglvnd
91 __ATTRIB(SelectEventSGIX
),
92 // glXSwapBuffers implemented by libglvnd
93 __ATTRIB(SwapBuffersMscOML
),
94 __ATTRIB(SwapIntervalMESA
),
95 __ATTRIB(SwapIntervalSGI
),
96 // glXUseXFont implemented by libglvnd
97 __ATTRIB(WaitForMscOML
),
98 __ATTRIB(WaitForSbcOML
),
99 // glXWaitGL implemented by libglvnd
100 __ATTRIB(WaitVideoSyncSGI
),
101 // glXWaitX implemented by libglvnd
106 #define __FETCH_FUNCTION_PTR(func_name) \
107 p##func_name = (void *) \
108 __VND->fetchDispatchEntry(dd, __glXDispatchTableIndices[DI_##func_name])
111 static void dispatch_BindTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
112 int buffer
, const int *attrib_list
)
114 PFNGLXBINDTEXIMAGEEXTPROC pBindTexImageEXT
;
117 dd
= GetDispatchFromDrawable(dpy
, drawable
);
121 __FETCH_FUNCTION_PTR(BindTexImageEXT
);
122 if (pBindTexImageEXT
== NULL
)
125 (*pBindTexImageEXT
)(dpy
, drawable
, buffer
, attrib_list
);
130 static GLXFBConfigSGIX
*dispatch_ChooseFBConfigSGIX(Display
*dpy
, int screen
,
131 const int *attrib_list
,
134 PFNGLXCHOOSEFBCONFIGSGIXPROC pChooseFBConfigSGIX
;
136 GLXFBConfigSGIX
*ret
;
138 dd
= __VND
->getDynDispatch(dpy
, screen
);
142 __FETCH_FUNCTION_PTR(ChooseFBConfigSGIX
);
143 if (pChooseFBConfigSGIX
== NULL
)
146 ret
= (*pChooseFBConfigSGIX
)(dpy
, screen
, attrib_list
, nelements
);
147 if (AddFBConfigsMapping(dpy
, ret
, nelements
, dd
)) {
157 static GLXContext
dispatch_CreateContextAttribsARB(Display
*dpy
,
159 GLXContext share_list
,
161 const int *attrib_list
)
163 PFNGLXCREATECONTEXTATTRIBSARBPROC pCreateContextAttribsARB
;
167 dd
= GetDispatchFromFBConfig(dpy
, config
);
171 __FETCH_FUNCTION_PTR(CreateContextAttribsARB
);
172 if (pCreateContextAttribsARB
== NULL
)
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 ?
188 static GLXContext
dispatch_CreateContextWithConfigSGIX(Display
*dpy
,
189 GLXFBConfigSGIX config
,
191 GLXContext share_list
,
194 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC pCreateContextWithConfigSGIX
;
198 dd
= GetDispatchFromFBConfig(dpy
, config
);
202 __FETCH_FUNCTION_PTR(CreateContextWithConfigSGIX
);
203 if (pCreateContextWithConfigSGIX
== NULL
)
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 ?
219 static GLXPbuffer
dispatch_CreateGLXPbufferSGIX(Display
*dpy
,
223 const int *attrib_list
)
225 PFNGLXCREATEGLXPBUFFERSGIXPROC pCreateGLXPbufferSGIX
;
229 dd
= GetDispatchFromFBConfig(dpy
, config
);
233 __FETCH_FUNCTION_PTR(CreateGLXPbufferSGIX
);
234 if (pCreateGLXPbufferSGIX
== NULL
)
237 ret
= (*pCreateGLXPbufferSGIX
)(dpy
, config
, width
, height
, attrib_list
);
238 if (AddDrawableMapping(dpy
, ret
, dd
)) {
239 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX
;
241 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX
);
242 if (pDestroyGLXPbufferSGIX
)
243 (*pDestroyGLXPbufferSGIX
)(dpy
, ret
);
253 static GLXPixmap
dispatch_CreateGLXPixmapWithConfigSGIX(Display
*dpy
,
254 GLXFBConfigSGIX config
,
257 PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC pCreateGLXPixmapWithConfigSGIX
;
261 dd
= GetDispatchFromFBConfig(dpy
, config
);
265 __FETCH_FUNCTION_PTR(CreateGLXPixmapWithConfigSGIX
);
266 if (pCreateGLXPixmapWithConfigSGIX
== NULL
)
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 ?
282 static void dispatch_DestroyGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
)
284 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX
;
287 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
291 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX
);
292 if (pDestroyGLXPbufferSGIX
== NULL
)
295 (*pDestroyGLXPbufferSGIX
)(dpy
, pbuf
);
300 static GLXContextID
dispatch_GetContextIDEXT(const GLXContext ctx
)
302 PFNGLXGETCONTEXTIDEXTPROC pGetContextIDEXT
;
305 dd
= GetDispatchFromContext(ctx
);
309 __FETCH_FUNCTION_PTR(GetContextIDEXT
);
310 if (pGetContextIDEXT
== NULL
)
313 return (*pGetContextIDEXT
)(ctx
);
318 static Display
*dispatch_GetCurrentDisplayEXT(void)
320 PFNGLXGETCURRENTDISPLAYEXTPROC pGetCurrentDisplayEXT
;
323 if (!__VND
->getCurrentContext())
326 dd
= __VND
->getCurrentDynDispatch();
330 __FETCH_FUNCTION_PTR(GetCurrentDisplayEXT
);
331 if (pGetCurrentDisplayEXT
== NULL
)
334 return (*pGetCurrentDisplayEXT
)();
339 static const char *dispatch_GetDriverConfig(const char *driverName
)
341 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
343 * The options are constant for a given driverName, so we do not need
344 * a context (and apps expect to be able to call this without one).
346 return glXGetDriverConfig(driverName
);
354 static int dispatch_GetFBConfigAttribSGIX(Display
*dpy
, GLXFBConfigSGIX config
,
355 int attribute
, int *value_return
)
357 PFNGLXGETFBCONFIGATTRIBSGIXPROC pGetFBConfigAttribSGIX
;
360 dd
= GetDispatchFromFBConfig(dpy
, config
);
362 return GLX_NO_EXTENSION
;
364 __FETCH_FUNCTION_PTR(GetFBConfigAttribSGIX
);
365 if (pGetFBConfigAttribSGIX
== NULL
)
366 return GLX_NO_EXTENSION
;
368 return (*pGetFBConfigAttribSGIX
)(dpy
, config
, attribute
, value_return
);
373 static GLXFBConfigSGIX
dispatch_GetFBConfigFromVisualSGIX(Display
*dpy
,
376 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC pGetFBConfigFromVisualSGIX
;
378 GLXFBConfigSGIX ret
= NULL
;
380 dd
= GetDispatchFromVisual(dpy
, vis
);
384 __FETCH_FUNCTION_PTR(GetFBConfigFromVisualSGIX
);
385 if (pGetFBConfigFromVisualSGIX
== NULL
)
388 ret
= (*pGetFBConfigFromVisualSGIX
)(dpy
, vis
);
389 if (AddFBConfigMapping(dpy
, ret
, dd
))
390 /* XXX: dealloc ret ? */
398 static void dispatch_GetSelectedEventSGIX(Display
*dpy
, GLXDrawable drawable
,
401 PFNGLXGETSELECTEDEVENTSGIXPROC pGetSelectedEventSGIX
;
404 dd
= GetDispatchFromDrawable(dpy
, drawable
);
408 __FETCH_FUNCTION_PTR(GetSelectedEventSGIX
);
409 if (pGetSelectedEventSGIX
== NULL
)
412 (*pGetSelectedEventSGIX
)(dpy
, drawable
, mask
);
417 static int dispatch_GetVideoSyncSGI(unsigned int *count
)
419 PFNGLXGETVIDEOSYNCSGIPROC pGetVideoSyncSGI
;
422 if (!__VND
->getCurrentContext())
423 return GLX_BAD_CONTEXT
;
425 dd
= __VND
->getCurrentDynDispatch();
427 return GLX_NO_EXTENSION
;
429 __FETCH_FUNCTION_PTR(GetVideoSyncSGI
);
430 if (pGetVideoSyncSGI
== NULL
)
431 return GLX_NO_EXTENSION
;
433 return (*pGetVideoSyncSGI
)(count
);
438 static XVisualInfo
*dispatch_GetVisualFromFBConfigSGIX(Display
*dpy
,
439 GLXFBConfigSGIX config
)
441 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC pGetVisualFromFBConfigSGIX
;
444 dd
= GetDispatchFromFBConfig(dpy
, config
);
448 __FETCH_FUNCTION_PTR(GetVisualFromFBConfigSGIX
);
449 if (pGetVisualFromFBConfigSGIX
== NULL
)
452 return (*pGetVisualFromFBConfigSGIX
)(dpy
, config
);
457 static int dispatch_QueryContextInfoEXT(Display
*dpy
, GLXContext ctx
,
458 int attribute
, int *value
)
460 PFNGLXQUERYCONTEXTINFOEXTPROC pQueryContextInfoEXT
;
463 dd
= GetDispatchFromContext(ctx
);
465 return GLX_NO_EXTENSION
;
467 __FETCH_FUNCTION_PTR(QueryContextInfoEXT
);
468 if (pQueryContextInfoEXT
== NULL
)
469 return GLX_NO_EXTENSION
;
471 return (*pQueryContextInfoEXT
)(dpy
, ctx
, attribute
, value
);
476 static void dispatch_QueryGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
,
477 int attribute
, unsigned int *value
)
479 PFNGLXQUERYGLXPBUFFERSGIXPROC pQueryGLXPbufferSGIX
;
482 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
486 __FETCH_FUNCTION_PTR(QueryGLXPbufferSGIX
);
487 if (pQueryGLXPbufferSGIX
== NULL
)
490 (*pQueryGLXPbufferSGIX
)(dpy
, pbuf
, attribute
, value
);
495 static void dispatch_ReleaseTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
498 PFNGLXRELEASETEXIMAGEEXTPROC pReleaseTexImageEXT
;
501 dd
= GetDispatchFromDrawable(dpy
, drawable
);
505 __FETCH_FUNCTION_PTR(ReleaseTexImageEXT
);
506 if (pReleaseTexImageEXT
== NULL
)
509 (*pReleaseTexImageEXT
)(dpy
, drawable
, buffer
);
514 static void dispatch_SelectEventSGIX(Display
*dpy
, GLXDrawable drawable
,
517 PFNGLXSELECTEVENTSGIXPROC pSelectEventSGIX
;
520 dd
= GetDispatchFromDrawable(dpy
, drawable
);
524 __FETCH_FUNCTION_PTR(SelectEventSGIX
);
525 if (pSelectEventSGIX
== NULL
)
528 (*pSelectEventSGIX
)(dpy
, drawable
, mask
);
533 static int dispatch_SwapIntervalSGI(int interval
)
535 PFNGLXSWAPINTERVALSGIPROC pSwapIntervalSGI
;
538 if (!__VND
->getCurrentContext())
539 return GLX_BAD_CONTEXT
;
541 dd
= __VND
->getCurrentDynDispatch();
543 return GLX_NO_EXTENSION
;
545 __FETCH_FUNCTION_PTR(SwapIntervalSGI
);
546 if (pSwapIntervalSGI
== NULL
)
547 return GLX_NO_EXTENSION
;
549 return (*pSwapIntervalSGI
)(interval
);
554 static int dispatch_WaitVideoSyncSGI(int divisor
, int remainder
,
557 PFNGLXWAITVIDEOSYNCSGIPROC pWaitVideoSyncSGI
;
560 if (!__VND
->getCurrentContext())
561 return GLX_BAD_CONTEXT
;
563 dd
= __VND
->getCurrentDynDispatch();
565 return GLX_NO_EXTENSION
;
567 __FETCH_FUNCTION_PTR(WaitVideoSyncSGI
);
568 if (pWaitVideoSyncSGI
== NULL
)
569 return GLX_NO_EXTENSION
;
571 return (*pWaitVideoSyncSGI
)(divisor
, remainder
, count
);
576 static void dispatch_BindSwapBarrierSGIX(Display
*dpy
, GLXDrawable drawable
,
579 PFNGLXBINDSWAPBARRIERSGIXPROC pBindSwapBarrierSGIX
;
582 dd
= GetDispatchFromDrawable(dpy
, drawable
);
586 __FETCH_FUNCTION_PTR(BindSwapBarrierSGIX
);
587 if (pBindSwapBarrierSGIX
== NULL
)
590 (*pBindSwapBarrierSGIX
)(dpy
, drawable
, barrier
);
595 static void dispatch_CopySubBufferMESA(Display
*dpy
, GLXDrawable drawable
,
596 int x
, int y
, int width
, int height
)
598 PFNGLXCOPYSUBBUFFERMESAPROC pCopySubBufferMESA
;
601 dd
= GetDispatchFromDrawable(dpy
, drawable
);
605 __FETCH_FUNCTION_PTR(CopySubBufferMESA
);
606 if (pCopySubBufferMESA
== NULL
)
609 (*pCopySubBufferMESA
)(dpy
, drawable
, x
, y
, width
, height
);
614 static GLXPixmap
dispatch_CreateGLXPixmapMESA(Display
*dpy
,
615 XVisualInfo
*visinfo
,
616 Pixmap pixmap
, Colormap cmap
)
618 PFNGLXCREATEGLXPIXMAPMESAPROC pCreateGLXPixmapMESA
;
622 dd
= GetDispatchFromVisual(dpy
, visinfo
);
626 __FETCH_FUNCTION_PTR(CreateGLXPixmapMESA
);
627 if (pCreateGLXPixmapMESA
== NULL
)
630 ret
= (*pCreateGLXPixmapMESA
)(dpy
, visinfo
, pixmap
, cmap
);
631 if (AddDrawableMapping(dpy
, ret
, dd
)) {
632 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
633 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
643 static GLboolean
dispatch_GetMscRateOML(Display
*dpy
, GLXDrawable drawable
,
644 int32_t *numerator
, int32_t *denominator
)
646 PFNGLXGETMSCRATEOMLPROC pGetMscRateOML
;
649 dd
= GetDispatchFromDrawable(dpy
, drawable
);
653 __FETCH_FUNCTION_PTR(GetMscRateOML
);
654 if (pGetMscRateOML
== NULL
)
657 return (*pGetMscRateOML
)(dpy
, drawable
, numerator
, denominator
);
662 static const char *dispatch_GetScreenDriver(Display
*dpy
, int scrNum
)
664 typedef const char *(*fn_glXGetScreenDriver_ptr
)(Display
*dpy
, int scrNum
);
665 fn_glXGetScreenDriver_ptr pGetScreenDriver
;
668 dd
= __VND
->getDynDispatch(dpy
, scrNum
);
672 __FETCH_FUNCTION_PTR(GetScreenDriver
);
673 if (pGetScreenDriver
== NULL
)
676 return (*pGetScreenDriver
)(dpy
, scrNum
);
681 static int dispatch_GetSwapIntervalMESA(void)
683 PFNGLXGETSWAPINTERVALMESAPROC pGetSwapIntervalMESA
;
686 if (!__VND
->getCurrentContext())
687 return GLX_BAD_CONTEXT
;
689 dd
= __VND
->getCurrentDynDispatch();
693 __FETCH_FUNCTION_PTR(GetSwapIntervalMESA
);
694 if (pGetSwapIntervalMESA
== NULL
)
697 return (*pGetSwapIntervalMESA
)();
702 static Bool
dispatch_GetSyncValuesOML(Display
*dpy
, GLXDrawable drawable
,
703 int64_t *ust
, int64_t *msc
, int64_t *sbc
)
705 PFNGLXGETSYNCVALUESOMLPROC pGetSyncValuesOML
;
708 dd
= GetDispatchFromDrawable(dpy
, drawable
);
712 __FETCH_FUNCTION_PTR(GetSyncValuesOML
);
713 if (pGetSyncValuesOML
== NULL
)
716 return (*pGetSyncValuesOML
)(dpy
, drawable
, ust
, msc
, sbc
);
721 static void dispatch_JoinSwapGroupSGIX(Display
*dpy
, GLXDrawable drawable
,
724 PFNGLXJOINSWAPGROUPSGIXPROC pJoinSwapGroupSGIX
;
727 dd
= GetDispatchFromDrawable(dpy
, drawable
);
731 __FETCH_FUNCTION_PTR(JoinSwapGroupSGIX
);
732 if (pJoinSwapGroupSGIX
== NULL
)
735 (*pJoinSwapGroupSGIX
)(dpy
, drawable
, member
);
740 static Bool
dispatch_QueryCurrentRendererIntegerMESA(int attribute
,
743 PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC pQueryCurrentRendererIntegerMESA
;
746 if (!__VND
->getCurrentContext())
749 dd
= __VND
->getCurrentDynDispatch();
753 __FETCH_FUNCTION_PTR(QueryCurrentRendererIntegerMESA
);
754 if (pQueryCurrentRendererIntegerMESA
== NULL
)
757 return (*pQueryCurrentRendererIntegerMESA
)(attribute
, value
);
762 static const char *dispatch_QueryCurrentRendererStringMESA(int attribute
)
764 PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC pQueryCurrentRendererStringMESA
;
767 if (!__VND
->getCurrentContext())
770 dd
= __VND
->getCurrentDynDispatch();
774 __FETCH_FUNCTION_PTR(QueryCurrentRendererStringMESA
);
775 if (pQueryCurrentRendererStringMESA
== NULL
)
778 return (*pQueryCurrentRendererStringMESA
)(attribute
);
783 static Bool
dispatch_QueryMaxSwapBarriersSGIX(Display
*dpy
, int screen
,
786 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pQueryMaxSwapBarriersSGIX
;
789 dd
= __VND
->getDynDispatch(dpy
, screen
);
793 __FETCH_FUNCTION_PTR(QueryMaxSwapBarriersSGIX
);
794 if (pQueryMaxSwapBarriersSGIX
== NULL
)
797 return (*pQueryMaxSwapBarriersSGIX
)(dpy
, screen
, max
);
802 static Bool
dispatch_QueryRendererIntegerMESA(Display
*dpy
, int screen
,
803 int renderer
, int attribute
,
806 PFNGLXQUERYRENDERERINTEGERMESAPROC pQueryRendererIntegerMESA
;
809 dd
= __VND
->getDynDispatch(dpy
, screen
);
813 __FETCH_FUNCTION_PTR(QueryRendererIntegerMESA
);
814 if (pQueryRendererIntegerMESA
== NULL
)
817 return (*pQueryRendererIntegerMESA
)(dpy
, screen
, renderer
, attribute
, value
);
822 static const char *dispatch_QueryRendererStringMESA(Display
*dpy
, int screen
,
823 int renderer
, int attribute
)
825 PFNGLXQUERYRENDERERSTRINGMESAPROC pQueryRendererStringMESA
;
826 __GLXvendorInfo
*dd
= NULL
;
828 dd
= __VND
->getDynDispatch(dpy
, screen
);
832 __FETCH_FUNCTION_PTR(QueryRendererStringMESA
);
833 if (pQueryRendererStringMESA
== NULL
)
836 return (*pQueryRendererStringMESA
)(dpy
, screen
, renderer
, attribute
);
841 static Bool
dispatch_ReleaseBuffersMESA(Display
*dpy
, GLXDrawable d
)
843 PFNGLXRELEASEBUFFERSMESAPROC pReleaseBuffersMESA
;
846 dd
= GetDispatchFromDrawable(dpy
, d
);
850 __FETCH_FUNCTION_PTR(ReleaseBuffersMESA
);
851 if (pReleaseBuffersMESA
== NULL
)
854 return (*pReleaseBuffersMESA
)(dpy
, d
);
859 static int64_t dispatch_SwapBuffersMscOML(Display
*dpy
, GLXDrawable drawable
,
860 int64_t target_msc
, int64_t divisor
,
863 PFNGLXSWAPBUFFERSMSCOMLPROC pSwapBuffersMscOML
;
866 dd
= GetDispatchFromDrawable(dpy
, drawable
);
870 __FETCH_FUNCTION_PTR(SwapBuffersMscOML
);
871 if (pSwapBuffersMscOML
== NULL
)
874 return (*pSwapBuffersMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
);
879 static int dispatch_SwapIntervalMESA(unsigned int interval
)
881 PFNGLXSWAPINTERVALMESAPROC pSwapIntervalMESA
;
884 if (!__VND
->getCurrentContext())
885 return GLX_BAD_CONTEXT
;
887 dd
= __VND
->getCurrentDynDispatch();
891 __FETCH_FUNCTION_PTR(SwapIntervalMESA
);
892 if (pSwapIntervalMESA
== NULL
)
895 return (*pSwapIntervalMESA
)(interval
);
900 static Bool
dispatch_WaitForMscOML(Display
*dpy
, GLXDrawable drawable
,
901 int64_t target_msc
, int64_t divisor
,
902 int64_t remainder
, int64_t *ust
,
903 int64_t *msc
, int64_t *sbc
)
905 PFNGLXWAITFORMSCOMLPROC pWaitForMscOML
;
908 dd
= GetDispatchFromDrawable(dpy
, drawable
);
912 __FETCH_FUNCTION_PTR(WaitForMscOML
);
913 if (pWaitForMscOML
== NULL
)
916 return (*pWaitForMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
, ust
, msc
, sbc
);
921 static Bool
dispatch_WaitForSbcOML(Display
*dpy
, GLXDrawable drawable
,
922 int64_t target_sbc
, int64_t *ust
,
923 int64_t *msc
, int64_t *sbc
)
925 PFNGLXWAITFORSBCOMLPROC pWaitForSbcOML
;
928 dd
= GetDispatchFromDrawable(dpy
, drawable
);
932 __FETCH_FUNCTION_PTR(WaitForSbcOML
);
933 if (pWaitForSbcOML
== NULL
)
936 return (*pWaitForSbcOML
)(dpy
, drawable
, target_sbc
, ust
, msc
, sbc
);
939 #undef __FETCH_FUNCTION_PTR
942 /* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
943 const void * const __glXDispatchFunctions
[DI_LAST_INDEX
+ 1] = {
944 #define __ATTRIB(field) \
945 [DI_##field] = (void *)dispatch_##field
947 __ATTRIB(BindSwapBarrierSGIX
),
948 __ATTRIB(BindTexImageEXT
),
949 __ATTRIB(ChooseFBConfigSGIX
),
950 __ATTRIB(CopySubBufferMESA
),
951 __ATTRIB(CreateContextAttribsARB
),
952 __ATTRIB(CreateContextWithConfigSGIX
),
953 __ATTRIB(CreateGLXPbufferSGIX
),
954 __ATTRIB(CreateGLXPixmapMESA
),
955 __ATTRIB(CreateGLXPixmapWithConfigSGIX
),
956 __ATTRIB(DestroyGLXPbufferSGIX
),
957 __ATTRIB(GetContextIDEXT
),
958 __ATTRIB(GetCurrentDisplayEXT
),
959 __ATTRIB(GetDriverConfig
),
960 __ATTRIB(GetFBConfigAttribSGIX
),
961 __ATTRIB(GetFBConfigFromVisualSGIX
),
962 __ATTRIB(GetMscRateOML
),
963 __ATTRIB(GetScreenDriver
),
964 __ATTRIB(GetSelectedEventSGIX
),
965 __ATTRIB(GetSwapIntervalMESA
),
966 __ATTRIB(GetSyncValuesOML
),
967 __ATTRIB(GetVideoSyncSGI
),
968 __ATTRIB(GetVisualFromFBConfigSGIX
),
969 __ATTRIB(JoinSwapGroupSGIX
),
970 __ATTRIB(QueryContextInfoEXT
),
971 __ATTRIB(QueryCurrentRendererIntegerMESA
),
972 __ATTRIB(QueryCurrentRendererStringMESA
),
973 __ATTRIB(QueryGLXPbufferSGIX
),
974 __ATTRIB(QueryMaxSwapBarriersSGIX
),
975 __ATTRIB(QueryRendererIntegerMESA
),
976 __ATTRIB(QueryRendererStringMESA
),
977 __ATTRIB(ReleaseBuffersMESA
),
978 __ATTRIB(ReleaseTexImageEXT
),
979 __ATTRIB(SelectEventSGIX
),
980 __ATTRIB(SwapBuffersMscOML
),
981 __ATTRIB(SwapIntervalMESA
),
982 __ATTRIB(SwapIntervalSGI
),
983 __ATTRIB(WaitForMscOML
),
984 __ATTRIB(WaitForSbcOML
),
985 __ATTRIB(WaitVideoSyncSGI
),
987 [DI_LAST_INDEX
] = NULL
,