aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/backend.c
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-04-06 16:57:42 +0200
committerKenny Levinsen <kl@kl.wtf>2021-04-29 19:51:57 +0200
commitc9c2d7539c69c8bf349a5b633ab61ce2d7c20e8a (patch)
treec9900cb5a75719edbec31277e1db22b76223121e /backend/drm/backend.c
parent1a9701cd7c5bc20055b0efef3b84c923d2735beb (diff)
backend/drm: fill scratch wlr_output_state for set_mode
Populate the wlr_output_state when setting a mode. This will allow drm_connector_set_mode to stop relying on ephemeral fields in wlr_drm_crtc. Also drm_connector_set_mode will be able to apply both a new buffer and a new mode atomically.
Diffstat (limited to 'backend/drm/backend.c')
-rw-r--r--backend/drm/backend.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/backend/drm/backend.c b/backend/drm/backend.c
index 53178b2d..5ec709a5 100644
--- a/backend/drm/backend.c
+++ b/backend/drm/backend.c
@@ -118,12 +118,17 @@ static void handle_session_active(struct wl_listener *listener, void *data) {
struct wlr_drm_connector *conn;
wl_list_for_each(conn, &drm->outputs, link) {
- struct wlr_output_state state = {0};
+ struct wlr_output_mode *mode = NULL;
if (conn->output.enabled && conn->output.current_mode != NULL) {
- drm_connector_set_mode(conn, &state, conn->output.current_mode);
- } else {
- drm_connector_set_mode(conn, &state, NULL);
+ mode = conn->output.current_mode;
}
+ struct wlr_output_state state = {
+ .committed = WLR_OUTPUT_STATE_MODE | WLR_OUTPUT_STATE_ENABLED,
+ .enabled = mode != NULL,
+ .mode_type = WLR_OUTPUT_STATE_MODE_FIXED,
+ .mode = mode,
+ };
+ drm_connector_set_mode(conn, &state, mode);
}
} else {
wlr_log(WLR_INFO, "DRM fd paused");