modetest: Error out if pageflipping is requested but not available
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 9 Dec 2009 15:36:53 +0000 (10:36 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 15 Dec 2009 13:44:40 +0000 (08:44 -0500)
tests/modetest/modetest.c

index 48178b9..34d40ca 100644 (file)
@@ -51,6 +51,7 @@
 #include "xf86drm.h"
 #include "xf86drmMode.h"
 #include "intel_bufmgr.h"
+#include "i915_drm.h"
 
 #ifdef HAVE_CAIRO
 #include <math.h>
@@ -661,6 +662,23 @@ void usage(char *name)
 
 #define dump_resource(res) if (res) dump_##res()
 
+static int page_flipping_supported(int fd)
+{
+       int ret, value;
+       struct drm_i915_getparam gp;
+
+       gp.param = I915_PARAM_HAS_PAGEFLIPPING;
+       gp.value = &value;
+
+       ret = drmCommandWriteRead(fd, DRM_I915_GETPARAM, &gp, sizeof(gp));
+       if (ret) {
+               fprintf(stderr, "drm_i915_getparam: %m\n");
+               return 0;
+       }
+
+       return gp.value;
+}
+
 int main(int argc, char **argv)
 {
        int c;
@@ -725,6 +743,11 @@ int main(int argc, char **argv)
                }
        }
 
+       if (test_vsync && !page_flipping_supported(fd)) {
+               fprintf(stderr, "page flipping not supported by drm.\n");
+               return -1;
+       }
+
        if (i == ARRAY_SIZE(modules)) {
                fprintf(stderr, "failed to load any modules, aborting.\n");
                return -1;