wlr_scene: Decide when to commit output damage with buffers in damage ring

We will soon support custom swapchains. In order to track output damage
we should instead use the damage_ring which will hold all the buffers
we are currently tracking anyway across an arbitrary amount of swapchains.
This commit is contained in:
Alexander Orzechowski 2024-03-12 11:25:37 -04:00
parent 8220184a72
commit 239354d644
1 changed files with 10 additions and 1 deletions

View File

@ -1294,7 +1294,16 @@ static void scene_output_handle_commit(struct wl_listener *listener, void *data)
// will be acknowledged by the backend so we don't need to keep track of it
// anymore
if (state->committed & WLR_OUTPUT_STATE_DAMAGE) {
if (wlr_swapchain_has_buffer(scene_output->output->swapchain, state->buffer)) {
bool tracking_buffer = false;
struct wlr_damage_ring_buffer *buffer;
wl_list_for_each(buffer, &scene_output->damage_ring.buffers, link) {
if (buffer->buffer == state->buffer) {
tracking_buffer = true;
break;
}
}
if (tracking_buffer) {
pixman_region32_subtract(&scene_output->pending_commit_damage,
&scene_output->pending_commit_damage, &state->damage);
} else {