backend/drm: implement drm lease function

This commit is contained in:
Simon Zeni 2021-07-15 09:48:29 -04:00 committed by Simon Ser
parent 42dba9dc90
commit e5a949a955
6 changed files with 128 additions and 0 deletions

View file

@ -37,6 +37,7 @@ struct wlr_drm_plane {
struct wlr_drm_crtc {
uint32_t id;
uint32_t lessee_id;
// Atomic modesetting only
uint32_t mode_id;
@ -119,6 +120,7 @@ struct wlr_drm_connector {
enum wlr_drm_connector_status status;
bool desired_enabled;
uint32_t id;
uint32_t lessee_id;
struct wlr_drm_crtc *crtc;
uint32_t possible_crtcs;

View file

@ -18,6 +18,7 @@ union wlr_drm_connector_props {
uint32_t path;
uint32_t vrr_capable; // not guaranteed to exist
uint32_t subconnector; // not guaranteed to exist
uint32_t non_desktop;
// atomic-modesetting only

View file

@ -33,6 +33,20 @@ bool wlr_output_is_drm(struct wlr_output *output);
*/
uint32_t wlr_drm_connector_get_id(struct wlr_output *output);
/**
* Leases a given output to the caller. The output must be from the associated
* DRM backend.
* Returns a valid opened DRM FD or -1 on error.
*/
int wlr_drm_create_lease(struct wlr_output **outputs, size_t n_outputs,
uint32_t *lessee_id);
/**
* Terminates a given lease. The output will be owned again by the backend
*/
bool wlr_drm_backend_terminate_lease(struct wlr_backend *backend,
uint32_t lessee_id);
/**
* Add mode to the list of available modes
*/

View file

@ -141,6 +141,9 @@ struct wlr_output {
bool frame_pending;
float transform_matrix[9];
// true for example with VR headsets
bool non_desktop;
struct wlr_output_state pending;
// Commit sequence number. Incremented on each commit, may overflow.