aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/x11/output.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/backend/x11/output.c b/backend/x11/output.c
index 0e124f9a..f109757d 100644
--- a/backend/x11/output.c
+++ b/backend/x11/output.c
@@ -113,6 +113,17 @@ static bool output_test(struct wlr_output *wlr_output,
return false;
}
+ // All we can do to influence adaptive sync on the X11 backend is set the
+ // _VARIABLE_REFRESH window property like mesa automatically does. We don't
+ // have any control beyond that, so we set the state to enabled on creating
+ // the output and never allow changing it (just like the Wayland backend).
+ assert(wlr_output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED);
+ if (state->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED) {
+ if (!state->adaptive_sync_enabled) {
+ return false;
+ }
+ }
+
if (state->committed & WLR_OUTPUT_STATE_MODE) {
assert(state->mode_type == WLR_OUTPUT_STATE_MODE_CUSTOM);
}
@@ -335,21 +346,6 @@ static bool output_commit(struct wlr_output *wlr_output,
}
}
- if (state->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED &&
- x11->atoms.variable_refresh != XCB_ATOM_NONE) {
- if (state->adaptive_sync_enabled) {
- uint32_t enabled = 1;
- xcb_change_property(x11->xcb, XCB_PROP_MODE_REPLACE, output->win,
- x11->atoms.variable_refresh, XCB_ATOM_CARDINAL, 32, 1,
- &enabled);
- wlr_output->adaptive_sync_status = WLR_OUTPUT_ADAPTIVE_SYNC_UNKNOWN;
- } else {
- xcb_delete_property(x11->xcb, output->win,
- x11->atoms.variable_refresh);
- wlr_output->adaptive_sync_status = WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED;
- }
- }
-
if (state->committed & WLR_OUTPUT_STATE_BUFFER) {
if (!output_commit_buffer(output, state)) {
return false;
@@ -574,6 +570,12 @@ struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend) {
x11->atoms.wm_protocols, XCB_ATOM_ATOM, 32, 1,
&x11->atoms.wm_delete_window);
+ uint32_t enabled = 1;
+ xcb_change_property(x11->xcb, XCB_PROP_MODE_REPLACE, output->win,
+ x11->atoms.variable_refresh, XCB_ATOM_CARDINAL, 32, 1,
+ &enabled);
+ wlr_output->adaptive_sync_status = WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED;
+
wlr_x11_output_set_title(wlr_output, NULL);
xcb_map_window(x11->xcb, output->win);