DRM backend preparations for the scene redesign
The end goal is to have a scene graph per output layer. This will allow us correctly handle weird cases such as a cursor surface with a wp_viewport, etc.
Roughly, the plan is:
-
Introduce OutputLayer
type. Every output layer has a scene graph associated with it. All layers that belong to the same output share a single render loop. Windowed platforms and X11 platform will expose only single output layer. -
Investigate the possibility of using libliftoff. Despite it solving a very tricky problem, it has relatively simple API, which is cool. We may have integration problems though. https://github.com/emersion/libliftoff - libliftoff is an unstable library. It's sort of a problem as plasma has a different release cycle. This issue can be easily fixed using git submodules and locking libliftoff at a particular commit.
-
Resource sharing between scene graphs: TBD, but it makes sense to have "view" objects. -
Cross-gpu buffer transfers between hardware planes: TBD - The laziest solution is to restrict the number of layers on outputs connected to secondary gpus to 1
-
Settle down on the renderer design. Should output layers share a single renderer or should there be a renderer per output layer? TBD
sub-task of #30