Wayland Looks To Do Multi-Monitor The Right Way
The multi-monitor topic was brought up by Marty Jack after he wrote a patch that allocates the CRTCs to avoid black screens on multiple monitors. Up to this point, Kristian Høgsberg, the creator of Wayland, hasn't really said how he would like support for multiple monitors to be implemented. That changed though this afternoon. In Marty's email, he mentions, "I don't know what Kristian's ultimate vision of this is. Do we allow windows to move like they do now on a virtual desktop where you can slide one to a RightOf monitor by dragging it and it appears part on one and part on the other? A lot of the data structure and processing change for multiple monitors would depend on whether it is possible to have one pair of big FBs added to both CRTCs at the same time, with different (x,y,w,h) if it is tiled and the same (x,y) if it is cloned or how he would want to handle this case [moving the rbo, fb_id, image up to drm_compositor]. With some philosophical guidance I could get the underpinnings in place."
AMD's Alex Deucher was the first to respond with his thoughts. "The sensible way to handle this is one surface per crtc otherwise we run into the same problems we hit with X where a multi-head desktop is too wide for the render/texture limits of the hardware."
Kristian then officially said, "As Alex says, the plan is to have one fb per crtc. The compositor will render the scenegraph into two framebuffers which we will then page flip to each crtc. Eventually we'll only rerender the parts that change so that typically we'll only update the fb where something changed."
For anyone dependent upon multiple displays on their desktop or other systems, this is great news and should be better than the support offered by the X.Org Server and its antiquated code. Only updating the portions of the screen where there's damage / changed contents is a win for performance/efficiency and as said by having one frame-buffer per CRTC will allow multiple displays to be powered without hitting any rendering limitations imposed by having a single frame-buffer spanning multiple CRTCs/displays.