Documentation for <wlr/backend/drm.h>

Back to index

Table of contents


bool wlr_backend_is_drm(​struct wlr_backend *backend);

struct wlr_drm_backend

struct wlr_drm_backend;


struct wlr_backend *wlr_drm_backend_create(​struct wl_display *display, struct wlr_session *session, struct wlr_device *dev, struct wlr_backend *parent);

Creates a DRM backend using the specified GPU file descriptor (typically from a device node in /dev/dri).

To slave this to another DRM backend, pass it as the parent (which _must_ be a DRM backend, other kinds of backends raise SIGABRT).


int wlr_drm_backend_get_non_master_fd(​struct wlr_backend *backend);

Tries to open non-master DRM FD. The compositor must not call drmSetMaster() on the returned FD.

Returns a valid opened DRM FD, or -1 on error.


struct wlr_output_mode *wlr_drm_connector_add_mode(​struct wlr_output *output, const drmModeModeInfo *mode);


uint32_t wlr_drm_connector_get_id(​struct wlr_output *output);

Get the KMS connector object ID.


enum wl_output_transform wlr_drm_connector_get_panel_orientation(​struct wlr_output *output);

Get the connector's panel orientation.

On some devices the panel is mounted in the casing in such a way that the top side of the panel does not match with the top side of the device. This function returns the output transform which needs to be applied to compensate for this.


struct wlr_drm_lease *wlr_drm_create_lease(​struct wlr_output **outputs, size_t n_outputs, int *lease_fd);

Leases the given outputs to the caller. The outputs must be from the associated DRM backend.

Returns NULL on error.

struct wlr_drm_lease

struct wlr_drm_lease {
	int fd;
	uint32_t lessee_id;
	struct wlr_drm_backend *backend;
	struct {
		struct wl_signal destroy;
	} events;
	void *data;


void wlr_drm_lease_terminate(​struct wlr_drm_lease *lease);

Terminates and destroys a given lease.

The outputs will be owned again by the backend.


bool wlr_output_is_drm(​struct wlr_output *output);