diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2009-07-06 11:36:17 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2009-07-06 11:42:12 -0700 |
commit | 7fb4becf986872268af4ba3f62c0a85b41ef7e5d (patch) | |
tree | ca98db7229689b1d111ba6a1904edac46d5cd15d | |
parent | 1068c15c61a6c76a2da04ed3ca136f0d49abed1d (diff) |
demos: Fix vsync checking in glxgears
Of course glXGetVideoSyncSGI doesn't return the swap interval. The feature
only exists in the Mesa extension... which is the whole reason I created the
Mesa extension! Note that the Mesa extension allows drivers to default to a
swap interval of 0. If the Mesa extension exists, use its value. Only
consider the SGI extension when the Mesa extension is not available.
Fixes bug #22604.
-rw-r--r-- | progs/xdemos/glxgears.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/progs/xdemos/glxgears.c b/progs/xdemos/glxgears.c index 2dc157a890..bc84ee3dbd 100644 --- a/progs/xdemos/glxgears.c +++ b/progs/xdemos/glxgears.c @@ -39,6 +39,12 @@ #include <GL/gl.h> #include <GL/glx.h> +#ifndef GLX_MESA_swap_control +#define GLX_MESA_swap_control 1 +typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void); +#endif + + static int is_glx_extension_supported(Display *dpy, const char *query); static void query_vsync(Display *dpy); @@ -592,31 +598,22 @@ query_vsync(Display *dpy) int interval = 0; -#ifdef GLX_MESA_swap_control - if ((interval <= 0) - && is_glx_extension_supported(dpy, "GLX_MESA_swap_control")) { + if (is_glx_extension_supported(dpy, "GLX_MESA_swap_control")) { PFNGLXGETSWAPINTERVALMESAPROC pglXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC) glXGetProcAddressARB((const GLubyte *) "glXGetSwapIntervalMESA"); interval = (*pglXGetSwapIntervalMESA)(); + } else if (is_glx_extension_supported(dpy, "GLX_SGI_swap_control")) { + /* The default swap interval with this extension is 1. Assume that it + * is set to the default. + * + * Many Mesa-based drivers default to 0, but all of these drivers also + * export GLX_MESA_swap_control. In that case, this branch will never + * be taken, and the correct result should be reported. + */ + interval = 1; } -#endif - - -#ifdef GLX_SGI_video_sync - if ((interval <= 0) - && is_glx_extension_supported(dpy, "GLX_SGI_video_sync")) { - PFNGLXGETVIDEOSYNCSGIPROC pglXGetVideoSyncSGI = - (PFNGLXGETVIDEOSYNCSGIPROC) - glXGetProcAddressARB((const GLubyte *) "glXGetVideoSyncSGI"); - unsigned count; - - if ((*pglXGetVideoSyncSGI)(& count) == 0) { - interval = (int) count; - } - } -#endif if (interval > 0) { |