summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac3
-rw-r--r--test/Makefile.am6
-rw-r--r--test/xvidmode.c54
3 files changed, 63 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index c18ad96c..a08661e7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -280,6 +280,9 @@ PKG_CHECK_MODULES(X11_DRI3, [xcb-dri3 xcb-sync xcb-xfixes xcb-present x11-xcb xs
AM_CONDITIONAL(X11_DRI3, test "x$x11_dri3" = "xyes" -a "x$shm" = "xyes")
AM_CONDITIONAL(X11_SHM, test "x$shm" = "xyes")
+PKG_CHECK_MODULES(X11_VM, [xxf86vm], [x11_vm="yes"], [x11_vm="no"])
+AM_CONDITIONAL(X11_VM, test "x$x11_vm" = "xyes")
+
AC_ARG_ENABLE(tools,
AS_HELP_STRING([--disable-tools],
[Enable building and installing the miscellaneous tools [default=auto]]),
diff --git a/test/Makefile.am b/test/Makefile.am
index 286a03b7..7bda948e 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -28,6 +28,12 @@ stress_TESTS = \
shm-test \
$(NULL)
+if X11_VM
+stress_TESTS += \
+ xvidmode \
+ $(NULL)
+endif
+
if DRI2
stress_TESTS += \
dri2-race \
diff --git a/test/xvidmode.c b/test/xvidmode.c
new file mode 100644
index 00000000..5cde8286
--- /dev/null
+++ b/test/xvidmode.c
@@ -0,0 +1,54 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/xf86vmode.h>
+
+int main(void)
+{
+ Display *dpy;
+ XF86VidModeModeLine current;
+ XF86VidModeModeInfo **modes;
+ int num_modes, i;
+ int saved_mode = -1;
+ int dotclock;
+
+ dpy = XOpenDisplay(NULL);
+ if (dpy == NULL)
+ dpy = XOpenDisplay(":0");
+
+ XF86VidModeGetModeLine(dpy, DefaultScreen(dpy), &dotclock, &current);
+ XF86VidModeGetAllModeLines(dpy, XDefaultScreen(dpy),
+ &num_modes, &modes);
+ for (i = 0; i < num_modes; i++) {
+ int this;
+
+ this = (current.hdisplay == modes[i]->hdisplay &&
+ current.vdisplay == modes[i]->vdisplay &&
+ dotclock == modes[i]->dotclock);
+ if (this && saved_mode == -1)
+ saved_mode = i;
+
+ printf("[%d] %dx%d%s\n",
+ i,
+ modes[i]->hdisplay,
+ modes[i]->vdisplay,
+ this ? "*" : "");
+ }
+
+ for (i = 0; i < num_modes; i++) {
+ printf("Switching to mode %dx%d\n",
+ modes[i]->hdisplay,
+ modes[i]->vdisplay);
+ XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), modes[i]);
+ XSync(dpy, True);
+ }
+
+ if (saved_mode != -1) {
+ XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy),
+ modes[saved_mode]);
+ XFlush(dpy);
+ }
+
+ return 0;
+}