Add support for multiple modes to drm_output_propose_state. Currently we intend to operate in three modes: planes-only (no renderer buffer, client buffers in planes only), mixed-mode (promote client buffers to planes where possible, falling back to the renderer where not), and renderer-only (no plane usage at all).
We want to use the first (planes-only) mode where possible: it can avoid us having to allocate buffers for the renderer, and it also gives us the best chance of the optimal configuration, with no composition. In this mode, we walk the scene looking at all views, trying to put them in planes, and failing as soon as we find a view we cannot place in a plane.
In the second mode, rather than failing, we assign those views which cannot be on a plane to the renderer, and allow the renderer to composite them.
In the third mode, planes are not usable, so everything but the cursor goes to the renderer. We will use this when we cannot use the planes-only mode (because some views cannot be placed in planes), but also cannot use the 'mixed' mode because we have no renderer buffer yet. Since we walk the scene graph from top to bottom, using atomic modesetting we will determine if planes can be promoted in mixed mode by placing a renderer buffer at the bottom of the scene, placing a cursor buffer if applicable, then testing if we can add overlay planes to this mode.
Without a buffer from the renderer, we cannot do these tests, so we push everything through the renderer and then switch to mixed mode on the next repaint.
This patch implements the mixed and renderer-only modes (previously differentiated only by the sprites_are_broken flag), with the planes-only mode being left for a later patch.
f7a2f835 compositor-drm: Add modes to drm_output_propose_state
libweston/compositor-drm.c | 70 +++++++++++++++++++++++++++++-----------------
1 file changed, 45 insertions(+), 25 deletions(-)