summaryrefslogtreecommitdiff
path: root/tests/kms_lease.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2019-02-28 15:19:15 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2019-03-28 10:08:01 +0100
commitbc30feb7ebbdba2e8abcb53829df364d619189d0 (patch)
treed4b6f0f61a4ccbb123191b565b93e6cdcffa32ca /tests/kms_lease.c
parentf31193daf3104ac2d04ac9c1701310135ff43a7f (diff)
tests/kms_lease: test implicit cursor plane usage
Figured I'll only test the SetCursor interface since in the kernel it's all the same anyway, it's just libdrm that splits it up. Current kernels fail this. Cc: Keith Packard <keithp@keithp.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'tests/kms_lease.c')
-rw-r--r--tests/kms_lease.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/kms_lease.c b/tests/kms_lease.c
index e749e10c..6967c489 100644
--- a/tests/kms_lease.c
+++ b/tests/kms_lease.c
@@ -432,6 +432,42 @@ static void setcrtc_implicit_plane(data_t *data)
connector_id_to_output(&data->master.display, data->connector_id));
}
+static void cursor_implicit_plane(data_t *data)
+{
+ uint32_t object_ids[3];
+ struct local_drm_mode_create_lease mcl;
+
+ mcl.object_ids = (uint64_t) (uintptr_t) &object_ids[0];
+ mcl.object_count = 0;
+ mcl.flags = 0;
+
+ object_ids[mcl.object_count++] = data->connector_id;
+ object_ids[mcl.object_count++] = data->crtc_id;
+
+ drmSetClientCap(data->master.fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 0);
+ do_or_die(create_lease(data->master.fd, &mcl));
+ drmSetClientCap(data->master.fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
+
+ /* Set a mode on the leased output */
+ igt_assert_eq(0, prepare_crtc(&data->master, data->connector_id, data->crtc_id));
+
+ /* sanity check */
+ do_or_die(drmModeSetCursor(data->master.fd, data->crtc_id, 0, 0, 0));
+ do_or_die(drmModeSetCursor(mcl.fd, data->crtc_id, 0, 0, 0));
+ close(mcl.fd);
+
+ /* primary plane is never the cursor */
+ object_ids[mcl.object_count++] = data->plane_id;
+ do_or_die(create_lease(data->master.fd, &mcl));
+
+ igt_assert_eq(drmModeSetCursor(mcl.fd, data->crtc_id, 0, 0, 0),
+ -EACCES);
+ close(mcl.fd);
+
+ cleanup_crtc(&data->master,
+ connector_id_to_output(&data->master.display, data->connector_id));
+}
+
/* Test listing lessees */
static void lessee_list(data_t *data)
{
@@ -1147,6 +1183,7 @@ igt_main
{ "lease_invalid_plane", lease_invalid_plane },
{ "page_flip_implicit_plane", page_flip_implicit_plane },
{ "setcrtc_implicit_plane", setcrtc_implicit_plane },
+ { "cursor_implicit_plane", cursor_implicit_plane },
{ }
}, *f;