Mesa (master): demos: Fix vsync checking in glxgears
Jakob Bornecrantz
wallbraker at kemper.freedesktop.org
Tue Jul 7 18:19:41 UTC 2009
Module: Mesa
Branch: master
Commit: 7fb4becf986872268af4ba3f62c0a85b41ef7e5d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fb4becf986872268af4ba3f62c0a85b41ef7e5d
Author: Ian Romanick <ian.d.romanick at intel.com>
Date: Mon Jul 6 11:36:17 2009 -0700
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.
---
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 2dc157a..bc84ee3 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) {
More information about the mesa-commit
mailing list