From b05c028ccdb6ac8e8d8499a041bb14dfe358ee26 Mon Sep 17 00:00:00 2001 From: Ville Syrjälä Date: Fri, 16 Mar 2018 19:11:59 +0200 Subject: lib/igt_kms: Fill the plane format/mod information for pre-blobifier drivers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For drivers that don't support the IN_FORMATS blob we should just consult the format list returned by getplane. Since we can't know which modifiers are supported we'll assume linear-only. Obviously that may not work for every driver out there, but not much more we can do unless we start to actually probing with addfb. Cc: Ulrich Hecht Signed-off-by: Ville Syrjälä Reviewed-by: Nicholas Kazlauskas --- lib/igt_kms.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 73cea75d..e5f42a6b 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -4132,8 +4132,28 @@ static void igt_fill_plane_format_mod(igt_display_t *display, igt_plane_t *plane int idx = 0; int count; - if (!igt_plane_has_prop(plane, IGT_PLANE_IN_FORMATS)) + if (!igt_plane_has_prop(plane, IGT_PLANE_IN_FORMATS)) { + drmModePlanePtr p = plane->drm_plane; + + count = p->count_formats; + + plane->format_mod_count = count; + plane->formats = calloc(count, sizeof(plane->formats[0])); + igt_assert(plane->formats); + plane->modifiers = calloc(count, sizeof(plane->modifiers[0])); + igt_assert(plane->modifiers); + + /* + * We don't know which modifiers are + * supported, so we'll assume linear only. + */ + for (int i = 0; i < count; i++) { + plane->formats[i] = p->formats[i]; + plane->modifiers[i] = DRM_FORMAT_MOD_LINEAR; + } + return; + } blob_id = igt_plane_get_prop(plane, IGT_PLANE_IN_FORMATS); -- cgit v1.2.3