[PATCH weston v6 45/73] compositor-drm: drm_output_find_by_connector from head_list

Pekka Paalanen ppaalanen at gmail.com
Fri Feb 16 14:57:30 UTC 2018


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

Switch drm_output_find_by_connector() to search for the output by
iterating the compositor's head_list. drm_head_find_by_connector() will
be useful later on its own.

As of "compositor-drm: start migration to head-based output API" the
head list is guaranteed to contain all created drm_outputs through the
automatically created drm_head.

This simplifies the code a little, introduces
drm_head_find_by_connector(), and works towards the eventual removal of
drm_output_find_by_connector().

Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
 libweston/compositor-drm.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 58aae1ac..78fce5d6 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -804,21 +804,31 @@ drm_output_find_by_crtc(struct drm_backend *b, uint32_t crtc_id)
 	return NULL;
 }
 
-static struct drm_output *
-drm_output_find_by_connector(struct drm_backend *b, uint32_t connector_id)
+static struct drm_head *
+drm_head_find_by_connector(struct drm_backend *backend, uint32_t connector_id)
 {
-	struct drm_output *output;
+	struct weston_head *base;
+	struct drm_head *head;
 
-	wl_list_for_each(output, &b->compositor->output_list, base.link) {
-		if (output->connector_id == connector_id)
-			return output;
+	wl_list_for_each(base,
+			 &backend->compositor->head_list, compositor_link) {
+		head = to_drm_head(base);
+		if (head->output && head->output->connector_id == connector_id)
+			return head;
 	}
 
-	wl_list_for_each(output, &b->compositor->pending_output_list,
-			 base.link) {
-		if (output->connector_id == connector_id)
-			return output;
-	}
+	return NULL;
+}
+
+static struct drm_output *
+drm_output_find_by_connector(struct drm_backend *b, uint32_t connector_id)
+{
+	struct drm_head *head;
+
+	/* XXX: like the old version, this counts both enabled and disabled outputs */
+	head = drm_head_find_by_connector(b, connector_id);
+	if (head && head->output)
+		return head->output;
 
 	return NULL;
 }
-- 
2.13.6



More information about the wayland-devel mailing list