Multi Displays with M1 Macs
Like many people out in the community, we’ve been entranced by Apple’s launch of Apple Silicon Macs into the wild. However for me, there’s 1 issue that’s stuck in my head:
- A maximum of 2 displays total may be used with M1
Why does M1 only support 2 total displays?
The technical limitation seems fairly basic, specifically that Apple’s M1 SOCs only has 2 total display pipelines physically routed. This means that there is no way for Apple to realistically add 3+ displays on machines it already shipped. The likely reason why Apple chose to do this was probably space costs as well as extra engineering, and instead chose to dedicate time towards future Apple Silicon products.
Additionally, this explains why closing the lid of the MacBook Air/Pro does not magically allow for dual display outs or even mirroring. As Apple would need to add a multiplexer to detect when the internal display is inactive, and reroute the display pipeline to the USB-C ports. While technically possible, this goes back around to Apple wanting to minimize the complexity of their first generation in-house Mac SOCs.
So how do we get around this?
So how do end users circumvent this issue? Well currently there are a few solutions:
DisplayPort MST
DisplayPort MST is an interesting idea, as it tries to daisy chain multiple DisplayPort connections into 1 cable. While technically this could work, macOS unfortunately does not proper support MST. Instead, this will result in the all outputs being mirrored, instead of extended. For some, this is perfect however for many of us its pointless.
This is also the same reason many cheap multi-display docks on Amazon only support extended on Windows, like this LENTION USB-C Hub
Matrox Display Fission
Matrox sells a very interesting family of products called DualHead2Go. The idea is simple:
- Take one large video stream, and chop them in half/thirds and pipe each section to a monitor.
For the host machine, they only see this as 1 super wide display being used allowing us to get around the display pipeline issue on M1. The main downside is macOS doesn’t officially support splitting displays this way, and so results in some unfortunate situations especially if you need to rotate a monitor.
DisplayLink
And last, but certainly not least we have DisplayLink. This solution is split into 2 components: the userspace software and the hardware adapters.
Instead of directly using display outputs like the other 2 solutions, DisplayLink’s software will try to create a new framebuffer in macOS and pipe the data into USB. On the other end, we have DisplayLink hardware which ingests the USB data and converts it into a DisplayPort signal.
Overall the results are quite good when running 1080p and below, however gets much more complicated when we run at 1440p and higher. Because DisplayLink chipsets currently max out at USB 3.0, we have a big issue when trying to add DisplayPort 1.2 support:
Interface | Bandwidth | Maximum Resolution |
---|---|---|
USB 3.0 | 5Gbps | N/A |
HDMI 1.2 | 4.95 Gbps | 1080p60Hz |
HDMI 2.0 | 18Gbps | 4k60Hz |
DisplayPort 1.1 | 10.8 Gbps | 4k30Hz |
DisplayPort 1.2 | 21.6 Gbps | 4k60Hz |
So how does DisplayLink support 4k60Hz displays when only supporting 1/4th the bandwidth USB 3.0 provides? Well by doing a few things:
- Lowering overall color depth
- Only sending new data of sections of the display, instead of rendering the entire display each frame
- Compressing the image when large sections of the display are changing
- Additionally worsens screen responce
For most users, this is very much worth the trade-off to get proper dual displays. Personally, DisplayLink has been great for keep Discord and documentation open while I have more active content on my internal display and a dedicated DisplayPort monitor.
And a few other notes I wanted to mention with DisplayLink:
- DisplayLink docks with USB hubs built-in will share the overall bandwidth of the USB 3.0 connection
- Some fancier DisplayLink docks will run over USB 3.1 allowing for additional USB and Ethernet devices to have proper bandwidth
- Note that DisplayLink chipsets themselves are still maxed at USB 3.0, so can’t increase display fidelity with them
- Personally have been using the WAVLINK USB-C Dual 4K Dock, has been an absolute champ with full 1Gbps Ethernet working consistently even when driving a 4k60Hz display
- 60w and USB-C out has also been super stellar
- FairPlay content will not play with DisplayLink displays plugged in
- Netflix and such will detect DisplayLink adapters as non-HCDP compliant and will error out
- Unplugging the display or killing the DisplayLink process will resolve this
- Overall the DisplayLink software uses very little resources when the display is moderately static
- Memory rarely got over 300MB
- Had about 20% overall CPU usage playing a youtube video full screen
- Application is still
x86_64
based, so clear room for improvements with a nativeARM64
build
Below image should give you an idea how colors look(Left is DisplayPort, right is DisplayLink):