summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoegeun Kwon <hoegeun.kwon@samsung.com>2023-01-16 17:18:04 +0900
committerSeung-Woo Kim <sw0312.kim@samsung.com>2023-12-04 14:23:07 +0900
commit624055987b5ddd7628482ef238e25c80a30c5fc4 (patch)
tree03cddce0a8e4fdbe69f3118e54d6a4ad909244f7
parent9d1380ac7984ad269db683e8212ed085a8bd0118 (diff)
downloadlibdrm-624055987b5ddd7628482ef238e25c80a30c5fc4.tar.gz
libdrm-624055987b5ddd7628482ef238e25c80a30c5fc4.tar.bz2
libdrm-624055987b5ddd7628482ef238e25c80a30c5fc4.zip
vbltest: add option to use high pipe
Add option to use high pipe. Change-Id: I028f305a5dac877bd4ec925ed11295ec4d319c1a Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>
-rw-r--r--tests/vbltest/vbltest.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/tests/vbltest/vbltest.c b/tests/vbltest/vbltest.c
index 1c2b519e..1be77b81 100644
--- a/tests/vbltest/vbltest.c
+++ b/tests/vbltest/vbltest.c
@@ -45,10 +45,13 @@
extern char *optarg;
extern int optind, opterr, optopt;
-static char optstr[] = "D:M:s";
+static char optstr[] = "D:M:p:s";
int secondary = 0;
+#define DRM_VBLANK_HIGH_CRTC_SHIFT 1
+static int high_pipe = 0;
+
struct vbl_info {
unsigned int vbl_count;
struct timeval start;
@@ -65,6 +68,8 @@ static void vblank_handler(int fd, unsigned int frame, unsigned int sec,
vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
if (secondary)
vbl.request.type |= DRM_VBLANK_SECONDARY;
+ if (high_pipe)
+ vbl.request.type |= high_pipe << DRM_VBLANK_HIGH_CRTC_SHIFT;
vbl.request.sequence = 1;
vbl.request.signal = (unsigned long)data;
@@ -90,6 +95,7 @@ static void usage(char *name)
fprintf(stderr, " -D DEVICE open the given device\n");
fprintf(stderr, " -M MODULE open the given module\n");
fprintf(stderr, " -s use secondary pipe\n");
+ fprintf(stderr, " -p NUM use high pipe\n");
exit(0);
}
@@ -113,12 +119,18 @@ int main(int argc, char **argv)
case 's':
secondary = 1;
break;
+ case 'p':
+ high_pipe = atoi(optarg);
+ break;
default:
usage(argv[0]);
break;
}
}
+ if (secondary && high_pipe)
+ return 1;
+
fd = util_open(device, module);
if (fd < 0)
return 1;
@@ -127,6 +139,8 @@ int main(int argc, char **argv)
vbl.request.type = DRM_VBLANK_RELATIVE;
if (secondary)
vbl.request.type |= DRM_VBLANK_SECONDARY;
+ if (high_pipe)
+ vbl.request.type |= high_pipe << DRM_VBLANK_HIGH_CRTC_SHIFT;
vbl.request.sequence = 0;
ret = drmWaitVBlank(fd, &vbl);
if (ret != 0) {
@@ -143,6 +157,8 @@ int main(int argc, char **argv)
vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
if (secondary)
vbl.request.type |= DRM_VBLANK_SECONDARY;
+ if (high_pipe)
+ vbl.request.type |= high_pipe << DRM_VBLANK_HIGH_CRTC_SHIFT;
vbl.request.sequence = 1;
vbl.request.signal = (unsigned long)&handler_info;
ret = drmWaitVBlank(fd, &vbl);