aboutsummaryrefslogtreecommitdiffstats
path: root/prime.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2019-01-25 13:55:59 +0100
committerGerd Hoffmann <kraxel@redhat.com>2019-01-25 13:55:59 +0100
commit1f254f3f274708d4e018ec783514804ab1e03974 (patch)
treee57ea62044a1ea491a05a1cbdf26372134471f56 /prime.c
parente7a497865621b1a01b07afd7d3589fd7f1ea5dc8 (diff)
downloaddrminfo-1f254f3f274708d4e018ec783514804ab1e03974.tar.gz
tweak prime gbm handling
Diffstat (limited to 'prime.c')
-rw-r--r--prime.c79
1 files changed, 37 insertions, 42 deletions
diff --git a/prime.c b/prime.c
index 33012d4..7c46d67 100644
--- a/prime.c
+++ b/prime.c
@@ -125,24 +125,26 @@ static void dmabuf_mmap(int dmabuf)
/* ------------------------------------------------------------------ */
-static void gbm_test(int card, bool export)
+static struct gbm_device *gbm_init(int card)
{
struct gbm_device *gbm;
- struct gbm_bo *bo;
- int dmabuf;
- fprintf(stderr, " test gdm buffer (mesa-libgbm)\n");
gbm = gbm_create_device(card);
print_test("create gbm dev", !gbm, 0);
- if (!gbm)
- return;
+ return gbm;
+}
+
+static void gbm_test(struct gbm_device *gbm, bool export)
+{
+ struct gbm_bo *bo;
+ int dmabuf;
bo = gbm_bo_create(gbm, TEST_WIDTH, TEST_HEIGHT,
GBM_FORMAT_XRGB8888,
0);
print_test("create gbm bo", !bo, 0);
if (!bo)
- goto done_gbm;
+ return;
if (!export)
goto done_bo;
@@ -156,37 +158,18 @@ static void gbm_test(int card, bool export)
done_bo:
gbm_bo_destroy(bo);
-done_gbm:
- gbm_device_destroy(gbm);
}
-static void gbm_export_import(int ex, int im)
+static void gbm_export_import(struct gbm_device *gbm_ex,
+ struct gbm_device *gbm_im,
+ int ex, int im)
{
- struct gbm_device *gbm_ex;
- struct gbm_device *gbm_im;
struct gbm_bo *bo_ex, *bo_im;
struct gbm_import_fd_data import;
- char devname[64];
- int card_ex, card_im, dmabuf;
+ int dmabuf;
fprintf(stderr, "test export/import: card %d -> card %d\n", ex, im);
- snprintf(devname, sizeof(devname), DRM_DEV_NAME, DRM_DIR_NAME, ex);
- card_ex = open(devname, O_RDWR);
- gbm_ex = gbm_create_device(card_ex);
- if (!gbm_ex) {
- fprintf(stderr, "%s: gdm init (ex) failed\n", devname);
- exit(1);
- }
-
- snprintf(devname, sizeof(devname), DRM_DEV_NAME, DRM_DIR_NAME, im);
- card_im = open(devname, O_RDWR);
- gbm_im = gbm_create_device(card_im);
- if (!gbm_im) {
- fprintf(stderr, "%s: gdm init (im) failed\n", devname);
- exit(1);
- }
-
bo_ex = gbm_bo_create(gbm_ex, TEST_WIDTH, TEST_HEIGHT,
GBM_FORMAT_XRGB8888,
0);
@@ -229,13 +212,14 @@ static void usage(FILE *fp)
int main(int argc, char **argv)
{
+ struct gbm_device *gbm;
+ struct gbm_device *gbm_ex = NULL;
+ struct gbm_device *gbm_im = NULL;
char devname[64];
bool import, export;
int card, handle, dmabuf, c, i;
int ex = -1;
int im = -1;
- bool exarg = false;
- bool imarg = false;
bool list = false;
for (;;) {
@@ -247,11 +231,9 @@ int main(int argc, char **argv)
list = true;
break;
case 'e':
- exarg = true;
ex = atoi(optarg);
break;
case 'i':
- imarg = true;
im = atoi(optarg);
break;
case 'h':
@@ -273,6 +255,12 @@ int main(int argc, char **argv)
continue;
}
+ if (export && ex == -1 && i != im) {
+ ex = i;
+ } else if (import && im == -1 && i != ex) {
+ im = i;
+ }
+
fprintf(stderr, " test dumb buffer (ioctl)\n");
handle = drm_dumb_buf(card);
if (handle >= 0 && export) {
@@ -283,18 +271,25 @@ int main(int argc, char **argv)
}
}
- gbm_test(card, export);
-
- if (export && !exarg && (ex == -1 || ex == im))
- ex = i;
- if (import && !imarg && (im == -1 || im == ex))
- im = i;
+ fprintf(stderr, " test gdm buffer (mesa-libgbm)\n");
+ gbm = gbm_init(card);
+ if (gbm) {
+ gbm_test(gbm, export);
+ if (i == ex) {
+ gbm_ex = gbm;
+ } else if (i == im) {
+ gbm_im = gbm;
+ } else {
+ gbm_device_destroy(gbm);
+ }
+ }
close(card);
+ fprintf(stderr, "\n");
}
- if (!list && ex != -1 && im != -1 && ex != im)
- gbm_export_import(ex, im);
+ if (!list && gbm_ex && gbm_im)
+ gbm_export_import(gbm_ex, gbm_im, ex, im);
return 0;
}