aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2019-12-02 11:51:27 +0100
committerGerd Hoffmann <kraxel@redhat.com>2019-12-02 11:51:27 +0100
commit55a27b58035f9ae644913a3feb337315b17f86e2 (patch)
tree195c699684e0af1369f59c67c8b88b111cfc4c26
parentc9f399d8354fd72a950d112711e59ccf13f02a78 (diff)
downloaddrminfo-55a27b58035f9ae644913a3feb337315b17f86e2.tar.gz
some vgem bits
-rw-r--r--drmtest.c12
-rw-r--r--drmtools.c23
-rw-r--r--drmtools.h1
3 files changed, 35 insertions, 1 deletions
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 <nr> pick card\n"
" -o <name> pick output\n"
" -s <secs> 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);