One of the feature limitations of using the Mir Display Server up to this point has been when using multiple monitors (or say a laptop connected to a projector) the only display configuration possibility is using a cloned mode whereby the screens are the same. Canonical's Mir developers have begun working on improved multi-monitor handling.
With revision 892
made to Mir on Tuesday, this very big commit ends up adding support for non-cloned display configurations. Introduced with this commit is no longer being limited to having cloned displays but now there's a side-by-side display configuration whereby the displays are offset on the screen based upon resolution. This support works when using GBM with outputs exposed via a kernel mode-setting driver.
The branch where the code was pulled from notes:
This MP adds support for arbitrary display configurations (see the SideBySide configuration policy in one of tests for a non-cloned configuration). Next step is to make the hardware cursor behave properly with multiple monitors.
To see this in action change the DefaultDisplayConfigurationPolicy to act like e.g. the side by side configuration policy, and run mir_demo_standalone_render_surfaces. You should see the mir surfaces moving between connected monitors (the virtual space they move in is the bounding rectangle of the two screens).
MM support in GBM works by grouping together outputs that overlap in the virtual coordinate space, either completely, as in clone, or partially. Each group uses the same DisplayBuffer that covers the bounding rectangle of all outputs in the group. Outputs that don't overlap with any other outputs live in their own group and have their own DisplayBuffer. We can fine tune the details of the policy in upcoming MPs as needed (e.g. create separate DisplayBuffers if the overlap is small or the resulting DisplayBuffer is too large).
Also committed on Tuesday with another revision
a new --nested-mode
option for running a Mir Display Server in a nested configuration atop an already present Mir process.