backend/drm: add support for SIZE_HINTS property

This property allows the driver to advertise support for multiple
cursor sizes. On Intel, using a smaller buffer size reduces power
consumption.

References: https://lore.kernel.org/dri-devel/20240227193523.5601-2-ville.syrjala@linux.intel.com/
This commit is contained in:
Simon Ser 2024-03-20 14:16:47 +01:00
parent 6f63f55ace
commit a35b4f059d
7 changed files with 106 additions and 17 deletions

View file

@ -29,6 +29,9 @@ struct wlr_drm_plane {
struct wlr_drm_format_set formats;
struct wlr_output_cursor_size *cursor_sizes;
size_t cursor_sizes_len;
struct wlr_drm_plane_props props;
uint32_t initial_crtc_id;

View file

@ -44,6 +44,7 @@ struct wlr_drm_plane_props {
uint32_t type;
uint32_t rotation; // Not guaranteed to exist
uint32_t in_formats; // Not guaranteed to exist
uint32_t size_hints; // Not guaranteed to exist
// atomic-modesetting only

View file

@ -25,6 +25,10 @@
WLR_OUTPUT_STATE_SUBPIXEL | \
WLR_OUTPUT_STATE_LAYERS)
struct wlr_output_cursor_size {
int width, height;
};
/**
* A backend implementation of struct wlr_output.
*
@ -82,10 +86,11 @@ struct wlr_output_impl {
const struct wlr_drm_format_set *(*get_cursor_formats)(
struct wlr_output *output, uint32_t buffer_caps);
/**
* Get the size suitable for the cursor buffer. Attempts to use a different
* size for the cursor may fail.
* Get the list of sizes suitable for the cursor buffer. Attempts to use a
* different size for the cursor may fail.
*/
void (*get_cursor_size)(struct wlr_output *output, int *width, int *height);
const struct wlr_output_cursor_size *(*get_cursor_sizes)(struct wlr_output *output,
size_t *len);
/**
* Get the list of DRM formats suitable for the primary buffer,
* assuming a buffer with the specified capabilities.