On 2017-12-14 05:40 AM, Pekka Paalanen wrote:
From: Pekka Paalanen <pekka.paala...@collabora.co.uk>

The 'head' member of 'struct weston_output' is going to go unused and
then disappear, so stop using it and find a head from the proper list.

However, this leaves a problem in cms-colord: if you have multiple
monitors driver with the same CRTC, what do you say to the color
management system? The monitors could be different, but all the color
LUTs etc. are in the CRTC and are shared, as is the framebuffer.

Do the simple hack here and just use whatever head happens to be the
first in the list.

I am a complete non-expert in this area, so if I'm making no sense feel free to tell me to shut up...

I think if someone's going through the effort to properly setup color management, then we can't use cloned heads off a single CRTC?

We should probably disallow a CRTCs to drive multiple heads if two or more of those heads have differing color profiles?

If I went to the trouble of calibrating two displays, I would probably be extremely surprised to see them looking different with clone mode enabled.

(All previous patches have my RB, but I'm worried about this one.)

Thanks,
Derek

Signed-off-by: Pekka Paalanen <pekka.paala...@collabora.co.uk>
---
  compositor/cms-colord.c | 10 ++++++++--
  1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/compositor/cms-colord.c b/compositor/cms-colord.c
index f421773b..9061091b 100644
--- a/compositor/cms-colord.c
+++ b/compositor/cms-colord.c
@@ -102,10 +102,13 @@ edid_value_valid(const char *str)
  static gchar *
  get_output_id(struct cms_colord *cms, struct weston_output *o)
  {
-       struct weston_head *head = &o->head;
+       struct weston_head *head;
        const gchar *tmp;
        GString *device_id;
+ /* XXX: What to do with multiple heads? */
+       head = weston_output_get_first_head(o);
+
        /* see 
https://github.com/hughsie/colord/blob/master/doc/device-and-profile-naming-spec.txt
         * for format and allowed values */
        device_id = g_string_new("xrandr");
@@ -231,7 +234,7 @@ colord_notifier_output_destroy(struct wl_listener 
*listener, void *data)
  static void
  colord_output_created(struct cms_colord *cms, struct weston_output *o)
  {
-       struct weston_head *head = &o->head;
+       struct weston_head *head;
        CdDevice *device;
        const gchar *tmp;
        gchar *device_id;
@@ -239,6 +242,9 @@ colord_output_created(struct cms_colord *cms, struct 
weston_output *o)
        GHashTable *device_props;
        struct cms_output *ocms;
+ /* XXX: What to do with multiple heads? */
+       head = weston_output_get_first_head(o);
+
        /* create device */
        device_id = get_output_id(cms, o);
        weston_log("colord: output added %s\n", device_id);


_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to