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
)
342 * The options are constant for a given driverName, so we do not need
343 * a context (and apps expect to be able to call this without one).
345 return glXGetDriverConfig(driverName
);
350 static int dispatch_GetFBConfigAttribSGIX(Display
*dpy
, GLXFBConfigSGIX config
,
351 int attribute
, int *value_return
)
353 PFNGLXGETFBCONFIGATTRIBSGIXPROC pGetFBConfigAttribSGIX
;
356 dd
= GetDispatchFromFBConfig(dpy
, config
);
358 return GLX_NO_EXTENSION
;
360 __FETCH_FUNCTION_PTR(GetFBConfigAttribSGIX
);
361 if (pGetFBConfigAttribSGIX
== NULL
)
362 return GLX_NO_EXTENSION
;
364 return (*pGetFBConfigAttribSGIX
)(dpy
, config
, attribute
, value_return
);
369 static GLXFBConfigSGIX
dispatch_GetFBConfigFromVisualSGIX(Display
*dpy
,
372 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC pGetFBConfigFromVisualSGIX
;
374 GLXFBConfigSGIX ret
= NULL
;
376 dd
= GetDispatchFromVisual(dpy
, vis
);
380 __FETCH_FUNCTION_PTR(GetFBConfigFromVisualSGIX
);
381 if (pGetFBConfigFromVisualSGIX
== NULL
)
384 ret
= (*pGetFBConfigFromVisualSGIX
)(dpy
, vis
);
385 if (AddFBConfigMapping(dpy
, ret
, dd
))
386 /* XXX: dealloc ret ? */
394 static void dispatch_GetSelectedEventSGIX(Display
*dpy
, GLXDrawable drawable
,
397 PFNGLXGETSELECTEDEVENTSGIXPROC pGetSelectedEventSGIX
;
400 dd
= GetDispatchFromDrawable(dpy
, drawable
);
404 __FETCH_FUNCTION_PTR(GetSelectedEventSGIX
);
405 if (pGetSelectedEventSGIX
== NULL
)
408 (*pGetSelectedEventSGIX
)(dpy
, drawable
, mask
);
413 static int dispatch_GetVideoSyncSGI(unsigned int *count
)
415 PFNGLXGETVIDEOSYNCSGIPROC pGetVideoSyncSGI
;
418 if (!__VND
->getCurrentContext())
419 return GLX_BAD_CONTEXT
;
421 dd
= __VND
->getCurrentDynDispatch();
423 return GLX_NO_EXTENSION
;
425 __FETCH_FUNCTION_PTR(GetVideoSyncSGI
);
426 if (pGetVideoSyncSGI
== NULL
)
427 return GLX_NO_EXTENSION
;
429 return (*pGetVideoSyncSGI
)(count
);
434 static XVisualInfo
*dispatch_GetVisualFromFBConfigSGIX(Display
*dpy
,
435 GLXFBConfigSGIX config
)
437 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC pGetVisualFromFBConfigSGIX
;
440 dd
= GetDispatchFromFBConfig(dpy
, config
);
444 __FETCH_FUNCTION_PTR(GetVisualFromFBConfigSGIX
);
445 if (pGetVisualFromFBConfigSGIX
== NULL
)
448 return (*pGetVisualFromFBConfigSGIX
)(dpy
, config
);
453 static int dispatch_QueryContextInfoEXT(Display
*dpy
, GLXContext ctx
,
454 int attribute
, int *value
)
456 PFNGLXQUERYCONTEXTINFOEXTPROC pQueryContextInfoEXT
;
459 dd
= GetDispatchFromContext(ctx
);
461 return GLX_NO_EXTENSION
;
463 __FETCH_FUNCTION_PTR(QueryContextInfoEXT
);
464 if (pQueryContextInfoEXT
== NULL
)
465 return GLX_NO_EXTENSION
;
467 return (*pQueryContextInfoEXT
)(dpy
, ctx
, attribute
, value
);
472 static void dispatch_QueryGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
,
473 int attribute
, unsigned int *value
)
475 PFNGLXQUERYGLXPBUFFERSGIXPROC pQueryGLXPbufferSGIX
;
478 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
482 __FETCH_FUNCTION_PTR(QueryGLXPbufferSGIX
);
483 if (pQueryGLXPbufferSGIX
== NULL
)
486 (*pQueryGLXPbufferSGIX
)(dpy
, pbuf
, attribute
, value
);
491 static void dispatch_ReleaseTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
494 PFNGLXRELEASETEXIMAGEEXTPROC pReleaseTexImageEXT
;
497 dd
= GetDispatchFromDrawable(dpy
, drawable
);
501 __FETCH_FUNCTION_PTR(ReleaseTexImageEXT
);
502 if (pReleaseTexImageEXT
== NULL
)
505 (*pReleaseTexImageEXT
)(dpy
, drawable
, buffer
);
510 static void dispatch_SelectEventSGIX(Display
*dpy
, GLXDrawable drawable
,
513 PFNGLXSELECTEVENTSGIXPROC pSelectEventSGIX
;
516 dd
= GetDispatchFromDrawable(dpy
, drawable
);
520 __FETCH_FUNCTION_PTR(SelectEventSGIX
);
521 if (pSelectEventSGIX
== NULL
)
524 (*pSelectEventSGIX
)(dpy
, drawable
, mask
);
529 static int dispatch_SwapIntervalSGI(int interval
)
531 PFNGLXSWAPINTERVALSGIPROC pSwapIntervalSGI
;
534 if (!__VND
->getCurrentContext())
535 return GLX_BAD_CONTEXT
;
537 dd
= __VND
->getCurrentDynDispatch();
539 return GLX_NO_EXTENSION
;
541 __FETCH_FUNCTION_PTR(SwapIntervalSGI
);
542 if (pSwapIntervalSGI
== NULL
)
543 return GLX_NO_EXTENSION
;
545 return (*pSwapIntervalSGI
)(interval
);
550 static int dispatch_WaitVideoSyncSGI(int divisor
, int remainder
,
553 PFNGLXWAITVIDEOSYNCSGIPROC pWaitVideoSyncSGI
;
556 if (!__VND
->getCurrentContext())
557 return GLX_BAD_CONTEXT
;
559 dd
= __VND
->getCurrentDynDispatch();
561 return GLX_NO_EXTENSION
;
563 __FETCH_FUNCTION_PTR(WaitVideoSyncSGI
);
564 if (pWaitVideoSyncSGI
== NULL
)
565 return GLX_NO_EXTENSION
;
567 return (*pWaitVideoSyncSGI
)(divisor
, remainder
, count
);
572 static void dispatch_BindSwapBarrierSGIX(Display
*dpy
, GLXDrawable drawable
,
575 PFNGLXBINDSWAPBARRIERSGIXPROC pBindSwapBarrierSGIX
;
578 dd
= GetDispatchFromDrawable(dpy
, drawable
);
582 __FETCH_FUNCTION_PTR(BindSwapBarrierSGIX
);
583 if (pBindSwapBarrierSGIX
== NULL
)
586 (*pBindSwapBarrierSGIX
)(dpy
, drawable
, barrier
);
591 static void dispatch_CopySubBufferMESA(Display
*dpy
, GLXDrawable drawable
,
592 int x
, int y
, int width
, int height
)
594 PFNGLXCOPYSUBBUFFERMESAPROC pCopySubBufferMESA
;
597 dd
= GetDispatchFromDrawable(dpy
, drawable
);
601 __FETCH_FUNCTION_PTR(CopySubBufferMESA
);
602 if (pCopySubBufferMESA
== NULL
)
605 (*pCopySubBufferMESA
)(dpy
, drawable
, x
, y
, width
, height
);
610 static GLXPixmap
dispatch_CreateGLXPixmapMESA(Display
*dpy
,
611 XVisualInfo
*visinfo
,
612 Pixmap pixmap
, Colormap cmap
)
614 PFNGLXCREATEGLXPIXMAPMESAPROC pCreateGLXPixmapMESA
;
618 dd
= GetDispatchFromVisual(dpy
, visinfo
);
622 __FETCH_FUNCTION_PTR(CreateGLXPixmapMESA
);
623 if (pCreateGLXPixmapMESA
== NULL
)
626 ret
= (*pCreateGLXPixmapMESA
)(dpy
, visinfo
, pixmap
, cmap
);
627 if (AddDrawableMapping(dpy
, ret
, dd
)) {
628 /* XXX: Call glXDestroyGLXPixmap which lives in libglvnd. If we're not
629 * allowed to call it from here, should we extend __glXDispatchTableIndices ?
639 static GLboolean
dispatch_GetMscRateOML(Display
*dpy
, GLXDrawable drawable
,
640 int32_t *numerator
, int32_t *denominator
)
642 PFNGLXGETMSCRATEOMLPROC pGetMscRateOML
;
645 dd
= GetDispatchFromDrawable(dpy
, drawable
);
649 __FETCH_FUNCTION_PTR(GetMscRateOML
);
650 if (pGetMscRateOML
== NULL
)
653 return (*pGetMscRateOML
)(dpy
, drawable
, numerator
, denominator
);
658 static const char *dispatch_GetScreenDriver(Display
*dpy
, int scrNum
)
660 typedef const char *(*fn_glXGetScreenDriver_ptr
)(Display
*dpy
, int scrNum
);
661 fn_glXGetScreenDriver_ptr pGetScreenDriver
;
664 dd
= __VND
->getDynDispatch(dpy
, scrNum
);
668 __FETCH_FUNCTION_PTR(GetScreenDriver
);
669 if (pGetScreenDriver
== NULL
)
672 return (*pGetScreenDriver
)(dpy
, scrNum
);
677 static int dispatch_GetSwapIntervalMESA(void)
679 PFNGLXGETSWAPINTERVALMESAPROC pGetSwapIntervalMESA
;
682 if (!__VND
->getCurrentContext())
683 return GLX_BAD_CONTEXT
;
685 dd
= __VND
->getCurrentDynDispatch();
689 __FETCH_FUNCTION_PTR(GetSwapIntervalMESA
);
690 if (pGetSwapIntervalMESA
== NULL
)
693 return (*pGetSwapIntervalMESA
)();
698 static Bool
dispatch_GetSyncValuesOML(Display
*dpy
, GLXDrawable drawable
,
699 int64_t *ust
, int64_t *msc
, int64_t *sbc
)
701 PFNGLXGETSYNCVALUESOMLPROC pGetSyncValuesOML
;
704 dd
= GetDispatchFromDrawable(dpy
, drawable
);
708 __FETCH_FUNCTION_PTR(GetSyncValuesOML
);
709 if (pGetSyncValuesOML
== NULL
)
712 return (*pGetSyncValuesOML
)(dpy
, drawable
, ust
, msc
, sbc
);
717 static void dispatch_JoinSwapGroupSGIX(Display
*dpy
, GLXDrawable drawable
,
720 PFNGLXJOINSWAPGROUPSGIXPROC pJoinSwapGroupSGIX
;
723 dd
= GetDispatchFromDrawable(dpy
, drawable
);
727 __FETCH_FUNCTION_PTR(JoinSwapGroupSGIX
);
728 if (pJoinSwapGroupSGIX
== NULL
)
731 (*pJoinSwapGroupSGIX
)(dpy
, drawable
, member
);
736 static Bool
dispatch_QueryCurrentRendererIntegerMESA(int attribute
,
739 PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC pQueryCurrentRendererIntegerMESA
;
742 if (!__VND
->getCurrentContext())
745 dd
= __VND
->getCurrentDynDispatch();
749 __FETCH_FUNCTION_PTR(QueryCurrentRendererIntegerMESA
);
750 if (pQueryCurrentRendererIntegerMESA
== NULL
)
753 return (*pQueryCurrentRendererIntegerMESA
)(attribute
, value
);
758 static const char *dispatch_QueryCurrentRendererStringMESA(int attribute
)
760 PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC pQueryCurrentRendererStringMESA
;
763 if (!__VND
->getCurrentContext())
766 dd
= __VND
->getCurrentDynDispatch();
770 __FETCH_FUNCTION_PTR(QueryCurrentRendererStringMESA
);
771 if (pQueryCurrentRendererStringMESA
== NULL
)
774 return (*pQueryCurrentRendererStringMESA
)(attribute
);
779 static Bool
dispatch_QueryMaxSwapBarriersSGIX(Display
*dpy
, int screen
,
782 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pQueryMaxSwapBarriersSGIX
;
785 dd
= __VND
->getDynDispatch(dpy
, screen
);
789 __FETCH_FUNCTION_PTR(QueryMaxSwapBarriersSGIX
);
790 if (pQueryMaxSwapBarriersSGIX
== NULL
)
793 return (*pQueryMaxSwapBarriersSGIX
)(dpy
, screen
, max
);
798 static Bool
dispatch_QueryRendererIntegerMESA(Display
*dpy
, int screen
,
799 int renderer
, int attribute
,
802 PFNGLXQUERYRENDERERINTEGERMESAPROC pQueryRendererIntegerMESA
;
805 dd
= __VND
->getDynDispatch(dpy
, screen
);
809 __FETCH_FUNCTION_PTR(QueryRendererIntegerMESA
);
810 if (pQueryRendererIntegerMESA
== NULL
)
813 return (*pQueryRendererIntegerMESA
)(dpy
, screen
, renderer
, attribute
, value
);
818 static const char *dispatch_QueryRendererStringMESA(Display
*dpy
, int screen
,
819 int renderer
, int attribute
)
821 PFNGLXQUERYRENDERERSTRINGMESAPROC pQueryRendererStringMESA
;
822 __GLXvendorInfo
*dd
= NULL
;
824 dd
= __VND
->getDynDispatch(dpy
, screen
);
828 __FETCH_FUNCTION_PTR(QueryRendererStringMESA
);
829 if (pQueryRendererStringMESA
== NULL
)
832 return (*pQueryRendererStringMESA
)(dpy
, screen
, renderer
, attribute
);
837 static Bool
dispatch_ReleaseBuffersMESA(Display
*dpy
, GLXDrawable d
)
839 PFNGLXRELEASEBUFFERSMESAPROC pReleaseBuffersMESA
;
842 dd
= GetDispatchFromDrawable(dpy
, d
);
846 __FETCH_FUNCTION_PTR(ReleaseBuffersMESA
);
847 if (pReleaseBuffersMESA
== NULL
)
850 return (*pReleaseBuffersMESA
)(dpy
, d
);
855 static int64_t dispatch_SwapBuffersMscOML(Display
*dpy
, GLXDrawable drawable
,
856 int64_t target_msc
, int64_t divisor
,
859 PFNGLXSWAPBUFFERSMSCOMLPROC pSwapBuffersMscOML
;
862 dd
= GetDispatchFromDrawable(dpy
, drawable
);
866 __FETCH_FUNCTION_PTR(SwapBuffersMscOML
);
867 if (pSwapBuffersMscOML
== NULL
)
870 return (*pSwapBuffersMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
);
875 static int dispatch_SwapIntervalMESA(unsigned int interval
)
877 PFNGLXSWAPINTERVALMESAPROC pSwapIntervalMESA
;
880 if (!__VND
->getCurrentContext())
881 return GLX_BAD_CONTEXT
;
883 dd
= __VND
->getCurrentDynDispatch();
887 __FETCH_FUNCTION_PTR(SwapIntervalMESA
);
888 if (pSwapIntervalMESA
== NULL
)
891 return (*pSwapIntervalMESA
)(interval
);
896 static Bool
dispatch_WaitForMscOML(Display
*dpy
, GLXDrawable drawable
,
897 int64_t target_msc
, int64_t divisor
,
898 int64_t remainder
, int64_t *ust
,
899 int64_t *msc
, int64_t *sbc
)
901 PFNGLXWAITFORMSCOMLPROC pWaitForMscOML
;
904 dd
= GetDispatchFromDrawable(dpy
, drawable
);
908 __FETCH_FUNCTION_PTR(WaitForMscOML
);
909 if (pWaitForMscOML
== NULL
)
912 return (*pWaitForMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
, ust
, msc
, sbc
);
917 static Bool
dispatch_WaitForSbcOML(Display
*dpy
, GLXDrawable drawable
,
918 int64_t target_sbc
, int64_t *ust
,
919 int64_t *msc
, int64_t *sbc
)
921 PFNGLXWAITFORSBCOMLPROC pWaitForSbcOML
;
924 dd
= GetDispatchFromDrawable(dpy
, drawable
);
928 __FETCH_FUNCTION_PTR(WaitForSbcOML
);
929 if (pWaitForSbcOML
== NULL
)
932 return (*pWaitForSbcOML
)(dpy
, drawable
, target_sbc
, ust
, msc
, sbc
);
935 #undef __FETCH_FUNCTION_PTR
938 /* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
939 const void * const __glXDispatchFunctions
[DI_LAST_INDEX
+ 1] = {
940 #define __ATTRIB(field) \
941 [DI_##field] = (void *)dispatch_##field
943 __ATTRIB(BindSwapBarrierSGIX
),
944 __ATTRIB(BindTexImageEXT
),
945 __ATTRIB(ChooseFBConfigSGIX
),
946 __ATTRIB(CopySubBufferMESA
),
947 __ATTRIB(CreateContextAttribsARB
),
948 __ATTRIB(CreateContextWithConfigSGIX
),
949 __ATTRIB(CreateGLXPbufferSGIX
),
950 __ATTRIB(CreateGLXPixmapMESA
),
951 __ATTRIB(CreateGLXPixmapWithConfigSGIX
),
952 __ATTRIB(DestroyGLXPbufferSGIX
),
953 __ATTRIB(GetContextIDEXT
),
954 __ATTRIB(GetCurrentDisplayEXT
),
955 __ATTRIB(GetDriverConfig
),
956 __ATTRIB(GetFBConfigAttribSGIX
),
957 __ATTRIB(GetFBConfigFromVisualSGIX
),
958 __ATTRIB(GetMscRateOML
),
959 __ATTRIB(GetScreenDriver
),
960 __ATTRIB(GetSelectedEventSGIX
),
961 __ATTRIB(GetSwapIntervalMESA
),
962 __ATTRIB(GetSyncValuesOML
),
963 __ATTRIB(GetVideoSyncSGI
),
964 __ATTRIB(GetVisualFromFBConfigSGIX
),
965 __ATTRIB(JoinSwapGroupSGIX
),
966 __ATTRIB(QueryContextInfoEXT
),
967 __ATTRIB(QueryCurrentRendererIntegerMESA
),
968 __ATTRIB(QueryCurrentRendererStringMESA
),
969 __ATTRIB(QueryGLXPbufferSGIX
),
970 __ATTRIB(QueryMaxSwapBarriersSGIX
),
971 __ATTRIB(QueryRendererIntegerMESA
),
972 __ATTRIB(QueryRendererStringMESA
),
973 __ATTRIB(ReleaseBuffersMESA
),
974 __ATTRIB(ReleaseTexImageEXT
),
975 __ATTRIB(SelectEventSGIX
),
976 __ATTRIB(SwapBuffersMscOML
),
977 __ATTRIB(SwapIntervalMESA
),
978 __ATTRIB(SwapIntervalSGI
),
979 __ATTRIB(WaitForMscOML
),
980 __ATTRIB(WaitForSbcOML
),
981 __ATTRIB(WaitVideoSyncSGI
),
983 [DI_LAST_INDEX
] = NULL
,