aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2024-07-01 09:21:53 +0200
committerSimon Ser <contact@emersion.fr>2024-07-01 09:21:53 +0200
commit1e0031781fc9283db7096aba34deca5503c2ab91 (patch)
tree4b15586c9fbd8cd8e0808a2e7a1d91b55fa97271
parent5d237679f5d433b6a6c3b489298c42d40f217db4 (diff)
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.
-rw-r--r--sway/desktop/output.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index 6bf77d17..4c9d0b63 100644
--- 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;
}