diff options
-rw-r--r-- | tests/kms_lease.c | 54 |
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; |