]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
drm: Drop crtcs for clones for which we've picked different modes
authorHans de Goede <hdegoede@redhat.com>
Tue, 27 Nov 2018 21:51:58 +0000 (22:51 +0100)
committerHans de Goede <hdegoede@redhat.com>
Tue, 4 Dec 2018 08:44:06 +0000 (09:44 +0100)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
src/plugins/renderers/drm/plugin.c

index 586df627800b5c941bff6ef3a76d3220f6a73783..87ecbfdc9ec2a87200796638d7aa6d52ff24f94a 100644 (file)
@@ -1097,7 +1097,7 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend)
 {
         ply_hashtable_t *heads_by_controller_id;
         ply_output_t *outputs;
-        int i, found, outputs_len;
+        int i, j, found, outputs_len;
 
         heads_by_controller_id = ply_hashtable_new (NULL, NULL);
 
@@ -1147,9 +1147,27 @@ create_heads_for_active_connectors (ply_renderer_backend_t *backend)
         }
         outputs_len = found; /* outputs now contains found valid entries */
 
-        /* Step 2: TODO
+        /* Step 2:
          * Drop controllers for clones for which we've picked different modes.
          */
+        for (i = 0; i < outputs_len; i++) {
+                if (!outputs[i].controller_id)
+                        continue;
+
+                for (j = i + 1; j < outputs_len; j++) {
+                        if (!outputs[j].controller_id)
+                                continue;
+
+                        if (outputs[i].controller_id == outputs[j].controller_id &&
+                            (outputs[i].mode->hdisplay != outputs[j].mode->hdisplay ||
+                             outputs[i].mode->vdisplay != outputs[j].mode->vdisplay)) {
+                                ply_trace ("connector %u uses same controller as %u and modes differ, unlinking controller",
+                                           outputs[j].connector->connector_id,
+                                           outputs[i].connector->connector_id);
+                                outputs[j].controller_id = 0;
+                        }
+                }
+        }
 
         /* Step 3: TODO
          * Assign controllers to outputs without a controller