backend/drm: introduce drm_connector_alloc_crtc
This function allocates a CRTC for a connector if necessary.
This commit is contained in:
parent
63f891e393
commit
b180d3482f
|
@ -727,6 +727,19 @@ static void attempt_enable_needs_modeset(struct wlr_drm_backend *drm) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool drm_connector_alloc_crtc(struct wlr_drm_connector *conn) {
|
||||||
|
if (conn->crtc != NULL) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool prev_desired_enabled = conn->desired_enabled;
|
||||||
|
conn->desired_enabled = true;
|
||||||
|
realloc_crtcs(conn->backend);
|
||||||
|
conn->desired_enabled = prev_desired_enabled;
|
||||||
|
|
||||||
|
return conn->crtc != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static bool drm_connector_set_mode(struct wlr_drm_connector *conn,
|
static bool drm_connector_set_mode(struct wlr_drm_connector *conn,
|
||||||
const struct wlr_output_state *state) {
|
const struct wlr_output_state *state) {
|
||||||
struct wlr_drm_backend *drm = conn->backend;
|
struct wlr_drm_backend *drm = conn->backend;
|
||||||
|
@ -763,11 +776,7 @@ static bool drm_connector_set_mode(struct wlr_drm_connector *conn,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->crtc == NULL) {
|
if (!drm_connector_alloc_crtc(conn)) {
|
||||||
// Maybe we can steal a CRTC from a disabled output
|
|
||||||
realloc_crtcs(drm);
|
|
||||||
}
|
|
||||||
if (conn->crtc == NULL) {
|
|
||||||
wlr_drm_conn_log(conn, WLR_ERROR,
|
wlr_drm_conn_log(conn, WLR_ERROR,
|
||||||
"Cannot perform modeset: no CRTC for this connector");
|
"Cannot perform modeset: no CRTC for this connector");
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue