From 562f51cea4abd49208a7876facb711c1a13b0650 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Thu, 13 Dec 2018 16:37:38 +0100 Subject: lib/igt_kms: Add helpers to count and iterate planes from pipe This introduces helpers that allow counting how many planes of a given type are present from a pipe and getting the n-th plane of a given type. Signed-off-by: Paul Kocialkowski Reviewed-by: Lyude Paul Reviewed-by: Maxime Ripard --- lib/igt_kms.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 3 +++ 2 files changed, 51 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 761bb193..5bde391f 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -2279,6 +2279,54 @@ igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type) return &pipe->planes[plane_idx]; } +/** + * igt_pipe_count_plane_type: + * @pipe: Target pipe + * @plane_type: Cursor, primary or an overlay plane + * + * Counts the number of planes of type @plane_type for the provided @pipe. + * + * Returns: The number of planes that match the requested plane type + */ +int igt_pipe_count_plane_type(igt_pipe_t *pipe, int plane_type) +{ + int i, count = 0; + + for(i = 0; i < pipe->n_planes; i++) + if (pipe->planes[i].type == plane_type) + count++; + + return count; +} + +/** + * igt_pipe_get_plane_type_index: + * @pipe: Target pipe + * @plane_type: Cursor, primary or an overlay plane + * @index: the index of the plane among planes of the same type + * + * Get the @index th plane of type @plane_type for the provided @pipe. + * + * Returns: The @index th plane that matches the requested plane type + */ +igt_plane_t *igt_pipe_get_plane_type_index(igt_pipe_t *pipe, int plane_type, + int index) +{ + int i, type_index = 0; + + for(i = 0; i < pipe->n_planes; i++) { + if (pipe->planes[i].type != plane_type) + continue; + + if (type_index == index) + return &pipe->planes[i]; + + type_index++; + } + + return NULL; +} + static bool output_is_internal_panel(igt_output_t *output) { switch (output->config.connector->connector_type) { diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 5755b160..df8b07c1 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -407,6 +407,9 @@ igt_output_t *igt_output_from_connector(igt_display_t *display, drmModeConnector *connector); igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type); +int igt_pipe_count_plane_type(igt_pipe_t *pipe, int plane_type); +igt_plane_t *igt_pipe_get_plane_type_index(igt_pipe_t *pipe, int plane_type, + int index); igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe); void igt_pipe_request_out_fence(igt_pipe_t *pipe); -- cgit v1.2.3