diff options
author | Dave Airlie <airlied@redhat.com> | 2017-10-16 03:10:11 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-10-16 03:10:11 +0100 |
commit | 7408991eda3e5587e55f2cca778ec2ea64bb183a (patch) | |
tree | c3a7590a6255b0a9e6623c0d48444abfbee008be | |
parent | 5c7e1eb06624ef9d2984a1452b3de76c326be733 (diff) |
kms_lease: add some tests for adding planes with universal planes
-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; |