From 55a27b58035f9ae644913a3feb337315b17f86e2 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 2 Dec 2019 11:51:27 +0100 Subject: some vgem bits --- drmtest.c | 12 +++++++++++- drmtools.c | 23 +++++++++++++++++++++++ drmtools.h | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/drmtest.c b/drmtest.c index 8dc961c..b0c2907 100644 --- a/drmtest.c +++ b/drmtest.c @@ -336,6 +336,7 @@ static void usage(FILE *fp) " -p pixman mode\n" " -a autotest mode (don't print hardware info)\n" " -d run dma-buf tests\n" + " -v vgem dma-buf import test\n" " -c pick card\n" " -o pick output\n" " -s set sleep time (default: 60)\n" @@ -352,17 +353,19 @@ int main(int argc, char **argv) int card = 0; int secs = 60; int lease_fd = -1; + int vgem_fd = -1; char *output = NULL; char *format = NULL; char *modename = NULL; bool dmabuf = false; bool autotest = false; bool pixman = false; + bool vgem = false; int updatetest = 0; int c,i,pid,rc; for (;;) { - c = getopt(argc, argv, "hpdau:L:c:s:o:i:f:m:"); + c = getopt(argc, argv, "hpdavu:L:c:s:o:i:f:m:"); if (c == -1) break; switch (c) { @@ -376,6 +379,9 @@ int main(int argc, char **argv) case 'a': autotest = true; break; + case 'v': + vgem = true; + break; case 'u': updatetest = atoi(optarg); break; @@ -435,6 +441,10 @@ int main(int argc, char **argv) drm_init_dev(card, output, modename, false, lease_fd); drm_get_caps(); + if (vgem) { + vgem_fd = drm_init_vgem(); + } + if (!fmt) { /* find first supported in list */ for (i = 0; i < fmtcnt; i++) { diff --git a/drmtools.c b/drmtools.c index 7c029f6..5d2901e 100644 --- a/drmtools.c +++ b/drmtools.c @@ -813,6 +813,29 @@ void drm_init_dev(int devnr, const char *output, scrtc = drmModeGetCrtc(drm_fd, drm_enc->crtc_id); } +int drm_init_vgem(void) +{ + char dev[64]; + drmVersion *ver; + int fd, i; + + for (i = 0; i < 128; i++) { + snprintf(dev, sizeof(dev), "/dev/dri/renderD%d", i + 128); + fd = device_open(dev); + if (fd < 0) + goto out; + ver = drmGetVersion(fd); + fprintf(stderr, "%d: %s\n", i, ver->name); + if (strcmp(ver->name, "vgem") == 0) + return fd; + close(fd); + } + +out: + fprintf(stderr, "vgem not found, driver not loaded?\n"); + exit(1); +} + void drm_fini_dev(void) { /* restore crtc */ diff --git a/drmtools.h b/drmtools.h index 1ea9cb9..255e651 100644 --- a/drmtools.h +++ b/drmtools.h @@ -44,6 +44,7 @@ extern drmVersion *version; void drm_init_dev(int devnr, const char *output, const char *modename, bool need_dumb, int lease_fd); +int drm_init_vgem(void); void drm_fini_dev(void); void drm_show_fb(void); -- cgit