commit 1e0031781fc9283db7096aba34deca5503c2ab91
parent 5d237679f5d433b6a6c3b489298c42d40f217db4
Author: Simon Ser <contact@emersion.fr>
Date: Mon, 1 Jul 2024 09:21:53 +0200
desktop/output: unify page-flip codepath
Instead of having a special codepath for applying gamma LUTs, have
a single codepath for regular page-flips and gamma LUT updates.
Should make it easier to add more logic on top e.g. for tearing
page-flips.
Diffstat:
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
@@ -247,13 +247,13 @@ static int output_repaint_timer_handler(void *data) {
.color_transform = output->color_transform,
};
- if (output->gamma_lut_changed) {
- struct wlr_output_state pending;
- wlr_output_state_init(&pending);
- if (!wlr_scene_output_build_state(output->scene_output, &pending, &opts)) {
- return 0;
- }
+ struct wlr_output_state pending;
+ wlr_output_state_init(&pending);
+ if (!wlr_scene_output_build_state(output->scene_output, &pending, &opts)) {
+ return 0;
+ }
+ if (output->gamma_lut_changed) {
output->gamma_lut_changed = false;
struct wlr_gamma_control_v1 *gamma_control =
wlr_gamma_control_manager_v1_get_control(
@@ -263,17 +263,16 @@ static int output_repaint_timer_handler(void *data) {
return 0;
}
- if (!wlr_output_commit_state(output->wlr_output, &pending)) {
+ if (!wlr_output_test_state(output->wlr_output, &pending)) {
wlr_gamma_control_v1_send_failed_and_destroy(gamma_control);
- wlr_output_state_finish(&pending);
- return 0;
+ wlr_output_state_set_gamma_lut(&pending, 0, NULL, NULL, NULL);
}
-
- wlr_output_state_finish(&pending);
- return 0;
}
- wlr_scene_output_commit(output->scene_output, &opts);
+ if (!wlr_output_commit_state(output->wlr_output, &pending)) {
+ sway_log(SWAY_ERROR, "Page-flip failed on output %s", output->wlr_output->name);
+ }
+ wlr_output_state_finish(&pending);
return 0;
}