backend/drm: better hotplug handling

This commit handles better situations in which the number of
connected outputs is greater than the number of available CRTCs.
It'll enable as many outputs as possible, and transfer CRTCs to
outputs that need one on unplug.

This changes CRTC and plane reallocation to happen after scanning
DRM connectors instead of on modeset.

This cleanups CRTCs and planes on unplug to allow them to be
re-used for other outputs.

On modeset, if an output doesn't have a CRTC, the desired mode is
saved and used later when the output gains a CRTC.

Future work includes giving priority to enabled outputs over
disabled ones for CRTC allocation. This requires the compositor to
know about all outputs (even outputs without CRTCs) to properly
modeset outputs enabled in the compositor config file and disable
outputs disabled in the config file.
This commit is contained in:
emersion 2018-09-04 15:09:07 +02:00
parent 73423c988c
commit b877daded1
2 changed files with 230 additions and 179 deletions

View file

@ -119,6 +119,7 @@ struct wlr_drm_connector {
struct wlr_output output;
enum wlr_drm_connector_state state;
struct wlr_output_mode *desired_mode;
uint32_t id;
struct wlr_drm_crtc *crtc;