summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2017-10-16 03:10:11 +0100
committerDave Airlie <airlied@redhat.com>2017-10-16 03:10:11 +0100
commit7408991eda3e5587e55f2cca778ec2ea64bb183a (patch)
treec3a7590a6255b0a9e6623c0d48444abfbee008be
parent5c7e1eb06624ef9d2984a1452b3de76c326be733 (diff)
kms_lease: add some tests for adding planes with universal planes
-rw-r--r--tests/kms_lease.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/kms_lease.c b/tests/kms_lease.c
index 6d03ecec..61d14a0b 100644
--- a/tests/kms_lease.c
+++ b/tests/kms_lease.c
@@ -658,6 +658,58 @@ static void lease_create_invalid_object(data_t *data)
igt_assert_eq(ret, -EINVAL);
}
+/* Test creating a lease with universal planes and no planes fails */
+static void lease_create_no_plane(data_t *data)
+{
+ uint32_t object_ids[2];
+ struct local_drm_mode_create_lease mcl;
+
+ mcl.object_ids = (uint64_t) (uintptr_t) &object_ids[0];
+ mcl.object_count = 0;
+ mcl.flags = O_CLOEXEC;
+
+ object_ids[mcl.object_count++] = data->connector_id;
+ object_ids[mcl.object_count++] = data->crtc_id;
+
+ igt_assert_eq(create_lease(data->master.fd, &mcl), -EINVAL);
+}
+
+/* Create a lease with UP disabled, make sure we get a plane object back */
+static void lease_create_universal_plane(data_t *data)
+{
+ uint32_t object_ids[4];
+ struct local_drm_mode_create_lease mcl;
+ struct local_drm_mode_get_lease mgl;
+
+ drmSetClientCap(data->master.fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 0);
+
+ mcl.object_ids = (uint64_t) (uintptr_t) &object_ids[0];
+ mcl.object_count = 0;
+ mcl.flags = O_CLOEXEC;
+
+ object_ids[mcl.object_count++] = data->connector_id;
+ object_ids[mcl.object_count++] = data->crtc_id;
+
+ igt_assert_eq(create_lease(data->master.fd, &mcl), 0);
+
+ /* Get the number of objects */
+ mgl.count_objects = 0;
+ mgl.objects_ptr = 0;
+ mgl.pad = 0;
+ igt_assert_eq(get_lease(mcl.fd, &mgl), 0);
+
+ /* Make sure it's 3 - we should get back primary plane */
+ igt_assert_eq(mgl.count_objects, 3);
+
+ /* Get the objects */
+ mgl.objects_ptr = (uint64_t) (uintptr_t) object_ids;
+
+ igt_assert_eq(get_lease(mcl.fd, &mgl), 0);
+
+ close(mcl.fd);
+ drmSetClientCap(data->master.fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
+}
+
static void run_test(data_t *data, void (*testfunc)(data_t *))
{
lease_t *master = &data->master;
@@ -719,6 +771,8 @@ igt_main
{ "lease_create_unalloc_objects", lease_create_unalloc_objects },
{ "lease_create_invalid_flags", lease_create_invalid_flags },
{ "lease_create_invalid_object", lease_create_invalid_object },
+ { "lease_create_no_plane", lease_create_no_plane },
+ { "lease_create_universal_plane", lease_create_universal_plane },
{ }
}, *f;