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(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
104 #define __FETCH_FUNCTION_PTR(func_name) \
105 p##func_name = (void *) \
106 __VND->fetchDispatchEntry(dd, __glXDispatchTableIndices[DI_##func_name])
109 static void dispatch_BindTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
110 int buffer
, const int *attrib_list
)
112 PFNGLXBINDTEXIMAGEEXTPROC pBindTexImageEXT
;
115 dd
= GetDispatchFromDrawable(dpy
, drawable
);
119 __FETCH_FUNCTION_PTR(BindTexImageEXT
);
120 if (pBindTexImageEXT
== NULL
)
123 (*pBindTexImageEXT
)(dpy
, drawable
, buffer
, attrib_list
);
128 static GLXFBConfigSGIX
*dispatch_ChooseFBConfigSGIX(Display
*dpy
, int screen
,
129 const int *attrib_list
,
132 PFNGLXCHOOSEFBCONFIGSGIXPROC pChooseFBConfigSGIX
;
134 GLXFBConfigSGIX
*ret
;
136 dd
= __VND
->getDynDispatch(dpy
, screen
);
140 __FETCH_FUNCTION_PTR(ChooseFBConfigSGIX
);
141 if (pChooseFBConfigSGIX
== NULL
)
144 ret
= (*pChooseFBConfigSGIX
)(dpy
, screen
, attrib_list
, nelements
);
145 if (AddFBConfigsMapping(dpy
, ret
, nelements
, dd
)) {
155 static GLXContext
dispatch_CreateContextAttribsARB(Display
*dpy
,
157 GLXContext share_list
,
159 const int *attrib_list
)
161 PFNGLXCREATECONTEXTATTRIBSARBPROC pCreateContextAttribsARB
;
165 dd
= GetDispatchFromFBConfig(dpy
, config
);
169 __FETCH_FUNCTION_PTR(CreateContextAttribsARB
);
170 if (pCreateContextAttribsARB
== NULL
)
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 ?
186 static GLXContext
dispatch_CreateContextWithConfigSGIX(Display
*dpy
,
187 GLXFBConfigSGIX config
,
189 GLXContext share_list
,
192 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC pCreateContextWithConfigSGIX
;
196 dd
= GetDispatchFromFBConfig(dpy
, config
);
200 __FETCH_FUNCTION_PTR(CreateContextWithConfigSGIX
);
201 if (pCreateContextWithConfigSGIX
== NULL
)
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 ?
217 static GLXPbuffer
dispatch_CreateGLXPbufferSGIX(Display
*dpy
,
221 const int *attrib_list
)
223 PFNGLXCREATEGLXPBUFFERSGIXPROC pCreateGLXPbufferSGIX
;
227 dd
= GetDispatchFromFBConfig(dpy
, config
);
231 __FETCH_FUNCTION_PTR(CreateGLXPbufferSGIX
);
232 if (pCreateGLXPbufferSGIX
== NULL
)
235 ret
= (*pCreateGLXPbufferSGIX
)(dpy
, config
, width
, height
, attrib_list
);
236 if (AddDrawableMapping(dpy
, ret
, dd
)) {
237 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX
;
239 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX
);
240 if (pDestroyGLXPbufferSGIX
)
241 (*pDestroyGLXPbufferSGIX
)(dpy
, ret
);
251 static GLXPixmap
dispatch_CreateGLXPixmapWithConfigSGIX(Display
*dpy
,
252 GLXFBConfigSGIX config
,
255 PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC pCreateGLXPixmapWithConfigSGIX
;
259 dd
= GetDispatchFromFBConfig(dpy
, config
);
263 __FETCH_FUNCTION_PTR(CreateGLXPixmapWithConfigSGIX
);
264 if (pCreateGLXPixmapWithConfigSGIX
== NULL
)
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 ?
280 static void dispatch_DestroyGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
)
282 PFNGLXDESTROYGLXPBUFFERSGIXPROC pDestroyGLXPbufferSGIX
;
285 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
289 __FETCH_FUNCTION_PTR(DestroyGLXPbufferSGIX
);
290 if (pDestroyGLXPbufferSGIX
== NULL
)
293 (*pDestroyGLXPbufferSGIX
)(dpy
, pbuf
);
298 static GLXContextID
dispatch_GetContextIDEXT(const GLXContext ctx
)
300 PFNGLXGETCONTEXTIDEXTPROC pGetContextIDEXT
;
303 dd
= GetDispatchFromContext(ctx
);
307 __FETCH_FUNCTION_PTR(GetContextIDEXT
);
308 if (pGetContextIDEXT
== NULL
)
311 return (*pGetContextIDEXT
)(ctx
);
316 static Display
*dispatch_GetCurrentDisplayEXT(void)
318 PFNGLXGETCURRENTDISPLAYEXTPROC pGetCurrentDisplayEXT
;
321 if (!__VND
->getCurrentContext())
324 dd
= __VND
->getCurrentDynDispatch();
328 __FETCH_FUNCTION_PTR(GetCurrentDisplayEXT
);
329 if (pGetCurrentDisplayEXT
== NULL
)
332 return (*pGetCurrentDisplayEXT
)();
337 static int dispatch_GetFBConfigAttribSGIX(Display
*dpy
, GLXFBConfigSGIX config
,
338 int attribute
, int *value_return
)
340 PFNGLXGETFBCONFIGATTRIBSGIXPROC pGetFBConfigAttribSGIX
;
343 dd
= GetDispatchFromFBConfig(dpy
, config
);
345 return GLX_NO_EXTENSION
;
347 __FETCH_FUNCTION_PTR(GetFBConfigAttribSGIX
);
348 if (pGetFBConfigAttribSGIX
== NULL
)
349 return GLX_NO_EXTENSION
;
351 return (*pGetFBConfigAttribSGIX
)(dpy
, config
, attribute
, value_return
);
356 static GLXFBConfigSGIX
dispatch_GetFBConfigFromVisualSGIX(Display
*dpy
,
359 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC pGetFBConfigFromVisualSGIX
;
361 GLXFBConfigSGIX ret
= NULL
;
363 dd
= GetDispatchFromVisual(dpy
, vis
);
367 __FETCH_FUNCTION_PTR(GetFBConfigFromVisualSGIX
);
368 if (pGetFBConfigFromVisualSGIX
== NULL
)
371 ret
= (*pGetFBConfigFromVisualSGIX
)(dpy
, vis
);
372 if (AddFBConfigMapping(dpy
, ret
, dd
))
373 /* XXX: dealloc ret ? */
381 static void dispatch_GetSelectedEventSGIX(Display
*dpy
, GLXDrawable drawable
,
384 PFNGLXGETSELECTEDEVENTSGIXPROC pGetSelectedEventSGIX
;
387 dd
= GetDispatchFromDrawable(dpy
, drawable
);
391 __FETCH_FUNCTION_PTR(GetSelectedEventSGIX
);
392 if (pGetSelectedEventSGIX
== NULL
)
395 (*pGetSelectedEventSGIX
)(dpy
, drawable
, mask
);
400 static int dispatch_GetVideoSyncSGI(unsigned int *count
)
402 PFNGLXGETVIDEOSYNCSGIPROC pGetVideoSyncSGI
;
405 if (!__VND
->getCurrentContext())
406 return GLX_BAD_CONTEXT
;
408 dd
= __VND
->getCurrentDynDispatch();
410 return GLX_NO_EXTENSION
;
412 __FETCH_FUNCTION_PTR(GetVideoSyncSGI
);
413 if (pGetVideoSyncSGI
== NULL
)
414 return GLX_NO_EXTENSION
;
416 return (*pGetVideoSyncSGI
)(count
);
421 static XVisualInfo
*dispatch_GetVisualFromFBConfigSGIX(Display
*dpy
,
422 GLXFBConfigSGIX config
)
424 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC pGetVisualFromFBConfigSGIX
;
427 dd
= GetDispatchFromFBConfig(dpy
, config
);
431 __FETCH_FUNCTION_PTR(GetVisualFromFBConfigSGIX
);
432 if (pGetVisualFromFBConfigSGIX
== NULL
)
435 return (*pGetVisualFromFBConfigSGIX
)(dpy
, config
);
440 static int dispatch_QueryContextInfoEXT(Display
*dpy
, GLXContext ctx
,
441 int attribute
, int *value
)
443 PFNGLXQUERYCONTEXTINFOEXTPROC pQueryContextInfoEXT
;
446 dd
= GetDispatchFromContext(ctx
);
448 return GLX_NO_EXTENSION
;
450 __FETCH_FUNCTION_PTR(QueryContextInfoEXT
);
451 if (pQueryContextInfoEXT
== NULL
)
452 return GLX_NO_EXTENSION
;
454 return (*pQueryContextInfoEXT
)(dpy
, ctx
, attribute
, value
);
459 static void dispatch_QueryGLXPbufferSGIX(Display
*dpy
, GLXPbuffer pbuf
,
460 int attribute
, unsigned int *value
)
462 PFNGLXQUERYGLXPBUFFERSGIXPROC pQueryGLXPbufferSGIX
;
465 dd
= GetDispatchFromDrawable(dpy
, pbuf
);
469 __FETCH_FUNCTION_PTR(QueryGLXPbufferSGIX
);
470 if (pQueryGLXPbufferSGIX
== NULL
)
473 (*pQueryGLXPbufferSGIX
)(dpy
, pbuf
, attribute
, value
);
478 static void dispatch_ReleaseTexImageEXT(Display
*dpy
, GLXDrawable drawable
,
481 PFNGLXRELEASETEXIMAGEEXTPROC pReleaseTexImageEXT
;
484 dd
= GetDispatchFromDrawable(dpy
, drawable
);
488 __FETCH_FUNCTION_PTR(ReleaseTexImageEXT
);
489 if (pReleaseTexImageEXT
== NULL
)
492 (*pReleaseTexImageEXT
)(dpy
, drawable
, buffer
);
497 static void dispatch_SelectEventSGIX(Display
*dpy
, GLXDrawable drawable
,
500 PFNGLXSELECTEVENTSGIXPROC pSelectEventSGIX
;
503 dd
= GetDispatchFromDrawable(dpy
, drawable
);
507 __FETCH_FUNCTION_PTR(SelectEventSGIX
);
508 if (pSelectEventSGIX
== NULL
)
511 (*pSelectEventSGIX
)(dpy
, drawable
, mask
);
516 static int dispatch_SwapIntervalSGI(int interval
)
518 PFNGLXSWAPINTERVALSGIPROC pSwapIntervalSGI
;
521 if (!__VND
->getCurrentContext())
522 return GLX_BAD_CONTEXT
;
524 dd
= __VND
->getCurrentDynDispatch();
526 return GLX_NO_EXTENSION
;
528 __FETCH_FUNCTION_PTR(SwapIntervalSGI
);
529 if (pSwapIntervalSGI
== NULL
)
530 return GLX_NO_EXTENSION
;
532 return (*pSwapIntervalSGI
)(interval
);
537 static int dispatch_WaitVideoSyncSGI(int divisor
, int remainder
,
540 PFNGLXWAITVIDEOSYNCSGIPROC pWaitVideoSyncSGI
;
543 if (!__VND
->getCurrentContext())
544 return GLX_BAD_CONTEXT
;
546 dd
= __VND
->getCurrentDynDispatch();
548 return GLX_NO_EXTENSION
;
550 __FETCH_FUNCTION_PTR(WaitVideoSyncSGI
);
551 if (pWaitVideoSyncSGI
== NULL
)
552 return GLX_NO_EXTENSION
;
554 return (*pWaitVideoSyncSGI
)(divisor
, remainder
, count
);
559 static void dispatch_BindSwapBarrierSGIX(Display
*dpy
, GLXDrawable drawable
,
562 PFNGLXBINDSWAPBARRIERSGIXPROC pBindSwapBarrierSGIX
;
565 dd
= GetDispatchFromDrawable(dpy
, drawable
);
569 __FETCH_FUNCTION_PTR(BindSwapBarrierSGIX
);
570 if (pBindSwapBarrierSGIX
== NULL
)
573 (*pBindSwapBarrierSGIX
)(dpy
, drawable
, barrier
);
578 static void dispatch_CopySubBufferMESA(Display
*dpy
, GLXDrawable drawable
,
579 int x
, int y
, int width
, int height
)
581 PFNGLXCOPYSUBBUFFERMESAPROC pCopySubBufferMESA
;
584 dd
= GetDispatchFromDrawable(dpy
, drawable
);
588 __FETCH_FUNCTION_PTR(CopySubBufferMESA
);
589 if (pCopySubBufferMESA
== NULL
)
592 (*pCopySubBufferMESA
)(dpy
, drawable
, x
, y
, width
, height
);
597 static GLXPixmap
dispatch_CreateGLXPixmapMESA(Display
*dpy
,
598 XVisualInfo
*visinfo
,
599 Pixmap pixmap
, Colormap cmap
)
601 PFNGLXCREATEGLXPIXMAPMESAPROC pCreateGLXPixmapMESA
;
605 dd
= GetDispatchFromVisual(dpy
, visinfo
);
609 __FETCH_FUNCTION_PTR(CreateGLXPixmapMESA
);
610 if (pCreateGLXPixmapMESA
== NULL
)
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 ?
626 static GLboolean
dispatch_GetMscRateOML(Display
*dpy
, GLXDrawable drawable
,
627 int32_t *numerator
, int32_t *denominator
)
629 PFNGLXGETMSCRATEOMLPROC pGetMscRateOML
;
632 dd
= GetDispatchFromDrawable(dpy
, drawable
);
636 __FETCH_FUNCTION_PTR(GetMscRateOML
);
637 if (pGetMscRateOML
== NULL
)
640 return (*pGetMscRateOML
)(dpy
, drawable
, numerator
, denominator
);
645 static const char *dispatch_GetScreenDriver(Display
*dpy
, int scrNum
)
647 typedef const char *(*fn_glXGetScreenDriver_ptr
)(Display
*dpy
, int scrNum
);
648 fn_glXGetScreenDriver_ptr pGetScreenDriver
;
651 dd
= __VND
->getDynDispatch(dpy
, scrNum
);
655 __FETCH_FUNCTION_PTR(GetScreenDriver
);
656 if (pGetScreenDriver
== NULL
)
659 return (*pGetScreenDriver
)(dpy
, scrNum
);
664 static int dispatch_GetSwapIntervalMESA(void)
666 PFNGLXGETSWAPINTERVALMESAPROC pGetSwapIntervalMESA
;
669 if (!__VND
->getCurrentContext())
670 return GLX_BAD_CONTEXT
;
672 dd
= __VND
->getCurrentDynDispatch();
676 __FETCH_FUNCTION_PTR(GetSwapIntervalMESA
);
677 if (pGetSwapIntervalMESA
== NULL
)
680 return (*pGetSwapIntervalMESA
)();
685 static Bool
dispatch_GetSyncValuesOML(Display
*dpy
, GLXDrawable drawable
,
686 int64_t *ust
, int64_t *msc
, int64_t *sbc
)
688 PFNGLXGETSYNCVALUESOMLPROC pGetSyncValuesOML
;
691 dd
= GetDispatchFromDrawable(dpy
, drawable
);
695 __FETCH_FUNCTION_PTR(GetSyncValuesOML
);
696 if (pGetSyncValuesOML
== NULL
)
699 return (*pGetSyncValuesOML
)(dpy
, drawable
, ust
, msc
, sbc
);
704 static void dispatch_JoinSwapGroupSGIX(Display
*dpy
, GLXDrawable drawable
,
707 PFNGLXJOINSWAPGROUPSGIXPROC pJoinSwapGroupSGIX
;
710 dd
= GetDispatchFromDrawable(dpy
, drawable
);
714 __FETCH_FUNCTION_PTR(JoinSwapGroupSGIX
);
715 if (pJoinSwapGroupSGIX
== NULL
)
718 (*pJoinSwapGroupSGIX
)(dpy
, drawable
, member
);
723 static Bool
dispatch_QueryCurrentRendererIntegerMESA(int attribute
,
726 PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC pQueryCurrentRendererIntegerMESA
;
729 if (!__VND
->getCurrentContext())
732 dd
= __VND
->getCurrentDynDispatch();
736 __FETCH_FUNCTION_PTR(QueryCurrentRendererIntegerMESA
);
737 if (pQueryCurrentRendererIntegerMESA
== NULL
)
740 return (*pQueryCurrentRendererIntegerMESA
)(attribute
, value
);
745 static const char *dispatch_QueryCurrentRendererStringMESA(int attribute
)
747 PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC pQueryCurrentRendererStringMESA
;
750 if (!__VND
->getCurrentContext())
753 dd
= __VND
->getCurrentDynDispatch();
757 __FETCH_FUNCTION_PTR(QueryCurrentRendererStringMESA
);
758 if (pQueryCurrentRendererStringMESA
== NULL
)
761 return (*pQueryCurrentRendererStringMESA
)(attribute
);
766 static Bool
dispatch_QueryMaxSwapBarriersSGIX(Display
*dpy
, int screen
,
769 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC pQueryMaxSwapBarriersSGIX
;
772 dd
= __VND
->getDynDispatch(dpy
, screen
);
776 __FETCH_FUNCTION_PTR(QueryMaxSwapBarriersSGIX
);
777 if (pQueryMaxSwapBarriersSGIX
== NULL
)
780 return (*pQueryMaxSwapBarriersSGIX
)(dpy
, screen
, max
);
785 static Bool
dispatch_QueryRendererIntegerMESA(Display
*dpy
, int screen
,
786 int renderer
, int attribute
,
789 PFNGLXQUERYRENDERERINTEGERMESAPROC pQueryRendererIntegerMESA
;
792 dd
= __VND
->getDynDispatch(dpy
, screen
);
796 __FETCH_FUNCTION_PTR(QueryRendererIntegerMESA
);
797 if (pQueryRendererIntegerMESA
== NULL
)
800 return (*pQueryRendererIntegerMESA
)(dpy
, screen
, renderer
, attribute
, value
);
805 static const char *dispatch_QueryRendererStringMESA(Display
*dpy
, int screen
,
806 int renderer
, int attribute
)
808 PFNGLXQUERYRENDERERSTRINGMESAPROC pQueryRendererStringMESA
;
809 __GLXvendorInfo
*dd
= NULL
;
811 dd
= __VND
->getDynDispatch(dpy
, screen
);
815 __FETCH_FUNCTION_PTR(QueryRendererStringMESA
);
816 if (pQueryRendererStringMESA
== NULL
)
819 return (*pQueryRendererStringMESA
)(dpy
, screen
, renderer
, attribute
);
824 static Bool
dispatch_ReleaseBuffersMESA(Display
*dpy
, GLXDrawable d
)
826 PFNGLXRELEASEBUFFERSMESAPROC pReleaseBuffersMESA
;
829 dd
= GetDispatchFromDrawable(dpy
, d
);
833 __FETCH_FUNCTION_PTR(ReleaseBuffersMESA
);
834 if (pReleaseBuffersMESA
== NULL
)
837 return (*pReleaseBuffersMESA
)(dpy
, d
);
842 static int64_t dispatch_SwapBuffersMscOML(Display
*dpy
, GLXDrawable drawable
,
843 int64_t target_msc
, int64_t divisor
,
846 PFNGLXSWAPBUFFERSMSCOMLPROC pSwapBuffersMscOML
;
849 dd
= GetDispatchFromDrawable(dpy
, drawable
);
853 __FETCH_FUNCTION_PTR(SwapBuffersMscOML
);
854 if (pSwapBuffersMscOML
== NULL
)
857 return (*pSwapBuffersMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
);
862 static int dispatch_SwapIntervalMESA(unsigned int interval
)
864 PFNGLXSWAPINTERVALMESAPROC pSwapIntervalMESA
;
867 if (!__VND
->getCurrentContext())
868 return GLX_BAD_CONTEXT
;
870 dd
= __VND
->getCurrentDynDispatch();
874 __FETCH_FUNCTION_PTR(SwapIntervalMESA
);
875 if (pSwapIntervalMESA
== NULL
)
878 return (*pSwapIntervalMESA
)(interval
);
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
)
888 PFNGLXWAITFORMSCOMLPROC pWaitForMscOML
;
891 dd
= GetDispatchFromDrawable(dpy
, drawable
);
895 __FETCH_FUNCTION_PTR(WaitForMscOML
);
896 if (pWaitForMscOML
== NULL
)
899 return (*pWaitForMscOML
)(dpy
, drawable
, target_msc
, divisor
, remainder
, ust
, msc
, 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
)
908 PFNGLXWAITFORSBCOMLPROC pWaitForSbcOML
;
911 dd
= GetDispatchFromDrawable(dpy
, drawable
);
915 __FETCH_FUNCTION_PTR(WaitForSbcOML
);
916 if (pWaitForSbcOML
== NULL
)
919 return (*pWaitForSbcOML
)(dpy
, drawable
, target_sbc
, ust
, msc
, sbc
);
922 #undef __FETCH_FUNCTION_PTR
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
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
),
969 [DI_LAST_INDEX
] = NULL
,