diff options
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | test/Makefile.am | 6 | ||||
-rw-r--r-- | test/xvidmode.c | 54 |
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, ¤t); + 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; +} |