output: introduce wlr_output_configure_primary_swapchain()

The goal is to simplify wlr_output by moving all of its rendering
API into separate helpers. Here is a first step to sunset
wlr_output_attach_render(). Instead, compositors call
wlr_output_configure_primary_swapchain(), wlr_swapchain_acquire(),
wlr_renderer_begin_with_buffer() and wlr_output_attach_buffer().

Note that compositors can supply a base struct wlr_output_state.
This is useful to allocate a buffer suitable for submission with
a modeset, for instance.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3079
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3197
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3984
This commit is contained in:
Simon Ser 2023-02-21 18:12:05 +01:00 committed by Isaac Freund
parent 59acc69737
commit fef8ab22e3
3 changed files with 124 additions and 0 deletions

View file

@ -563,6 +563,20 @@ void wlr_output_state_set_buffer(struct wlr_output_state *state,
struct wlr_buffer *buffer);
/**
* Re-configure the swapchain as required for the output's primary buffer.
*
* If a NULL swapchain is passed in, a new swapchain is allocated. If the
* swapchain is already suitable for the output's primary buffer, this function
* is a no-op.
*
* The state describes the output changes the swapchain's buffers will be
* committed with. A NULL state indicates no change.
*/
bool wlr_output_configure_primary_swapchain(struct wlr_output *output,
const struct wlr_output_state *state, struct wlr_swapchain **swapchain);
/**
* Returns the transform that, when composed with `tr`, gives
* `WL_OUTPUT_TRANSFORM_NORMAL`.