xdemos/glsync: Add swap interval support to glsync test
authorJesse Barnes <jbarnes@virtuousgeek.org>
Mon, 2 Nov 2009 19:20:08 +0000 (11:20 -0800)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 8 Jan 2010 17:37:43 +0000 (12:37 -0500)
progs/xdemos/glsync.c

index da87306cf2af10227fddf2c91c85834cf32e0373..e813c8770d5479e814b4febd01b03ca762e0b00b 100644 (file)
@@ -59,6 +59,7 @@
 
 void (*video_sync_get)();
 void (*video_sync)();
+void (*swap_interval)();
 
 static int GLXExtensionSupported(Display *dpy, const char *extension)
 {
@@ -84,7 +85,7 @@ static int GLXExtensionSupported(Display *dpy, const char *extension)
 
 extern char *optarg;
 extern int optind, opterr, optopt;
-static char optstr[] = "w:h:s:v";
+static char optstr[] = "w:h:s:vi:";
 
 enum sync_type {
        none = 0,
@@ -100,6 +101,7 @@ static void usage(char *name)
        printf("\t\tn: none\n");
        printf("\t\ts: SGI video sync extension\n");
        printf("\t\tb: buffer swap\n");
+       printf("\t-i<swap interval>\n");
        printf("\t-v: verbose (print count)\n");
        exit(-1);
 }
@@ -117,7 +119,7 @@ int main(int argc, char *argv[])
        Atom wmDelete;
        enum sync_type waitforsync = none;
        int width = 500, height = 500, verbose = 0,
-               countonly = 0;
+               countonly = 0, interval = 1;
        int c, i = 1;
 
        opterr = 0;
@@ -148,6 +150,9 @@ int main(int argc, char *argv[])
                case 'v':
                        verbose = 1;
                        break;
+               case 'i':
+                       interval = atoi(optarg);
+                       break;
                default:
                        usage(argv[0]);
                        break;
@@ -227,11 +232,15 @@ int main(int argc, char *argv[])
        video_sync_get = glXGetProcAddress((unsigned char *)"glXGetVideoSyncSGI");
        video_sync = glXGetProcAddress((unsigned char *)"glXWaitVideoSyncSGI");
 
-       if (!video_sync_get || !video_sync) {
+       swap_interval = glXGetProcAddress((unsigned char *)"glXSwapIntervalSGI");
+
+       if (!video_sync_get || !video_sync || !swap_interval) {
                fprintf(stderr, "failed to get sync functions\n");
                return -1;
        }
 
+       swap_interval(interval);
+       fprintf(stderr, "set swap interval to %d\n", interval);
        video_sync_get(&count);
        count++;
        while (i++) {
@@ -256,6 +265,11 @@ int main(int argc, char *argv[])
                        continue;
                }
 
+               if (verbose) {
+                       video_sync_get(&count);
+                       fprintf(stderr, "current count: %d\n", count);
+               }
+
                /* Alternate colors to make tearing obvious */
                if (i & 1)
                        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);