diff options
| author | Simon Ser <contact@emersion.fr> | 2024-07-01 09:21:53 +0200 |
|---|---|---|
| committer | Simon Ser <contact@emersion.fr> | 2024-07-01 09:21:53 +0200 |
| commit | 1e0031781fc9283db7096aba34deca5503c2ab91 (patch) | |
| tree | 4b15586c9fbd8cd8e0808a2e7a1d91b55fa97271 | |
| parent | 5d237679f5d433b6a6c3b489298c42d40f217db4 (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.c | 25 |
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; } |
