aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/drm/drm.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 4e2b3b84..9558b0b0 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -1271,23 +1271,19 @@ static void realloc_crtcs(struct wlr_drm_backend *drm,
drm->num_crtcs, previous_match, new_match);
// Converts our crtc=>connector result into a connector=>crtc one.
- ssize_t connector_match[num_connectors];
+ struct wlr_drm_crtc *connector_match[num_connectors];
for (size_t i = 0 ; i < num_connectors; ++i) {
- connector_match[i] = -1;
+ connector_match[i] = NULL;
}
for (size_t i = 0; i < drm->num_crtcs; ++i) {
if (new_match[i] != UNMATCHED) {
- connector_match[new_match[i]] = i;
+ connector_match[new_match[i]] = &drm->crtcs[i];
}
}
for (size_t i = 0; i < num_connectors; ++i) {
struct wlr_drm_connector *conn = connectors[i];
-
- struct wlr_drm_crtc *new_crtc = NULL;
- if (connector_match[i] >= 0) {
- new_crtc = &drm->crtcs[connector_match[i]];
- }
+ struct wlr_drm_crtc *new_crtc = connector_match[i];
char old_crtc_str[16], new_crtc_str[16];
format_nullable_crtc(old_crtc_str, sizeof(old_crtc_str), conn->crtc);
@@ -1313,13 +1309,13 @@ static void realloc_crtcs(struct wlr_drm_backend *drm,
if (conn->status != DRM_MODE_CONNECTED || !conn->output.enabled) {
continue;
}
- if (connector_match[i] == -1) {
+ if (connector_match[i] == NULL) {
wlr_log(WLR_DEBUG, "Could not match a CRTC for previously connected output; "
"keeping old configuration");
return;
}
assert(conn->crtc != NULL);
- if (connector_match[i] != conn->crtc - drm->crtcs) {
+ if (connector_match[i] != conn->crtc) {
wlr_log(WLR_DEBUG, "Cannot switch CRTC for enabled output; "
"keeping old configuration");
return;
@@ -1330,14 +1326,14 @@ static void realloc_crtcs(struct wlr_drm_backend *drm,
for (size_t i = 0; i < num_connectors; ++i) {
struct wlr_drm_connector *conn = connectors[i];
- if (conn->crtc != NULL && connector_match[i] == conn->crtc - drm->crtcs) {
+ if (conn->crtc != NULL && connector_match[i]) {
// We don't need to change anything
continue;
}
dealloc_crtc(conn);
- if (connector_match[i] >= 0) {
- conn->crtc = &drm->crtcs[connector_match[i]];
+ if (connector_match[i] != NULL) {
+ conn->crtc = connector_match[i];
}
}
}