mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-26 06:35:58 +01:00
backend/x11: add support for adaptive_sync_enabled
This sets the _VARIABLE_REFRESH window property [1].
[1]: 0616b7ac90/src/vulkan/wsi/wsi_common_x11.c (L1374)
This commit is contained in:
parent
7017fa95b8
commit
9be1af3afb
3 changed files with 17 additions and 0 deletions
|
@ -203,6 +203,7 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display,
|
||||||
{ .name = "WM_DELETE_WINDOW", .atom = &x11->atoms.wm_delete_window },
|
{ .name = "WM_DELETE_WINDOW", .atom = &x11->atoms.wm_delete_window },
|
||||||
{ .name = "_NET_WM_NAME", .atom = &x11->atoms.net_wm_name },
|
{ .name = "_NET_WM_NAME", .atom = &x11->atoms.net_wm_name },
|
||||||
{ .name = "UTF8_STRING", .atom = &x11->atoms.utf8_string },
|
{ .name = "UTF8_STRING", .atom = &x11->atoms.utf8_string },
|
||||||
|
{ .name = "_VARIABLE_REFRESH", .atom = &x11->atoms.variable_refresh },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (size_t i = 0; i < sizeof(atom) / sizeof(atom[0]); ++i) {
|
for (size_t i = 0; i < sizeof(atom) / sizeof(atom[0]); ++i) {
|
||||||
|
|
|
@ -118,6 +118,21 @@ static bool output_commit(struct wlr_output *wlr_output) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wlr_output->pending.committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED &&
|
||||||
|
x11->atoms.variable_refresh != XCB_ATOM_NONE) {
|
||||||
|
if (wlr_output->pending.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 (wlr_output->pending.committed & WLR_OUTPUT_STATE_BUFFER) {
|
if (wlr_output->pending.committed & WLR_OUTPUT_STATE_BUFFER) {
|
||||||
pixman_region32_t *damage = NULL;
|
pixman_region32_t *damage = NULL;
|
||||||
if (wlr_output->pending.committed & WLR_OUTPUT_STATE_DAMAGE) {
|
if (wlr_output->pending.committed & WLR_OUTPUT_STATE_DAMAGE) {
|
||||||
|
|
|
@ -72,6 +72,7 @@ struct wlr_x11_backend {
|
||||||
xcb_atom_t wm_delete_window;
|
xcb_atom_t wm_delete_window;
|
||||||
xcb_atom_t net_wm_name;
|
xcb_atom_t net_wm_name;
|
||||||
xcb_atom_t utf8_string;
|
xcb_atom_t utf8_string;
|
||||||
|
xcb_atom_t variable_refresh;
|
||||||
} atoms;
|
} atoms;
|
||||||
|
|
||||||
// The time we last received an event
|
// The time we last received an event
|
||||||
|
|
Loading…
Reference in a new issue