From 65e0ca998cb6c02559b8d2bb2357ee2a5248c2ca Mon Sep 17 00:00:00 2001 From: Wolfgang Müller Date: Sat, 15 Oct 2022 18:21:15 +0200 Subject: desktop-wayland: Patch gui-wm/hikari to use high refresh rates hikari by default does not pick the highest refresh rate for any given display, instead falling back to the first mode it finds. This patch adds rudimentary support for finding the highest supported refresh rate for the preferred resolution. --- ...est-refresh-rate-for-preferred-resolution.patch | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch (limited to 'desktop-wayland/patches/gui-wm') diff --git a/desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch b/desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch new file mode 100644 index 0000000..ab707ea --- /dev/null +++ b/desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch @@ -0,0 +1,45 @@ +From b15060d4191fde43e599e1fdf1beaf4a1d238075 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Wolfgang=20M=C3=BCller?= +Date: Sun, 15 May 2022 18:20:38 +0200 +Subject: [PATCH] Pick highest refresh rate for preferred resolution + +When configuring an output, hikari uses the first mode it finds. This +means that we may not end up with the highest refresh rate for a given +resolution. Since we usually want to make use of higher refresh rates, +find the monitor's preferred resolution and pick a corresponding mode +with the highest refresh rate. +--- + src/output.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/src/output.c b/src/output.c +index 5b0fd56..b2a7dc6 100644 +--- a/src/output.c ++++ b/src/output.c +@@ -254,10 +254,19 @@ hikari_output_init(struct hikari_output *output, struct wlr_output *wlr_output) + output->damage_destroy.notify = damage_destroy_handler; + wl_signal_add(&output->damage->events.destroy, &output->damage_destroy); + +- if (!wl_list_empty(&wlr_output->modes)) { +- struct wlr_output_mode *mode = +- wl_container_of(wlr_output->modes.next, mode, link); +- wlr_output_set_mode(wlr_output, mode); ++ struct wlr_output_mode *preferred = wlr_output_preferred_mode(wlr_output); ++ ++ if (preferred) { ++ struct wlr_output_mode *mode, *best = preferred; ++ ++ wl_list_for_each(mode, &wlr_output->modes, link) { ++ if (mode->width == preferred->width && ++ mode->height == preferred->height && ++ mode->refresh > best->refresh) ++ best = mode; ++ } ++ ++ wlr_output_set_mode(wlr_output, best); + } + + wl_list_init(&output->damage_frame.link); +-- +2.35.1 + -- cgit v1.2.3-2-gb3c3