mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-31 22:25:21 -04:00
swapchain, damage_ring: Drop buffer age
This commit is contained in:
parent
eebaca8dbf
commit
bfcaa4bc44
12 changed files with 13 additions and 119 deletions
|
|
@ -241,8 +241,7 @@ static struct wlr_buffer *render_cursor_buffer(struct wlr_output_cursor *cursor)
|
|||
}
|
||||
}
|
||||
|
||||
struct wlr_buffer *buffer =
|
||||
wlr_swapchain_acquire(output->cursor_swapchain, NULL);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->cursor_swapchain);
|
||||
if (buffer == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -271,11 +271,6 @@ static void output_apply_state(struct wlr_output *output,
|
|||
}
|
||||
}
|
||||
|
||||
if ((state->committed & WLR_OUTPUT_STATE_BUFFER) &&
|
||||
output->swapchain != NULL) {
|
||||
wlr_swapchain_set_buffer_submitted(output->swapchain, state->buffer);
|
||||
}
|
||||
|
||||
bool mode_updated = false;
|
||||
if (state->committed & WLR_OUTPUT_STATE_MODE) {
|
||||
int width = 0, height = 0, refresh = 0;
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ static struct wlr_buffer *output_acquire_empty_buffer(struct wlr_output *output,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain, NULL);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain);
|
||||
if (buffer == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -204,7 +204,7 @@ struct wlr_render_pass *wlr_output_begin_render_pass(struct wlr_output *output,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain, NULL);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain);
|
||||
if (buffer == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ static struct wlr_swapchain *create_swapchain(struct wlr_output *output,
|
|||
|
||||
static bool test_swapchain(struct wlr_output *output,
|
||||
struct wlr_swapchain *swapchain, const struct wlr_output_state *state) {
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(swapchain, NULL);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(swapchain);
|
||||
if (buffer == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2089,7 +2089,7 @@ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output,
|
|||
swapchain = output->swapchain;
|
||||
}
|
||||
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(swapchain, NULL);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(swapchain);
|
||||
if (buffer == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,10 +15,6 @@ void wlr_damage_ring_init(struct wlr_damage_ring *ring) {
|
|||
};
|
||||
|
||||
pixman_region32_init(&ring->current);
|
||||
for (size_t i = 0; i < WLR_DAMAGE_RING_PREVIOUS_LEN; ++i) {
|
||||
pixman_region32_init(&ring->previous[i]);
|
||||
}
|
||||
|
||||
wl_list_init(&ring->buffers);
|
||||
}
|
||||
|
||||
|
|
@ -31,9 +27,6 @@ static void buffer_destroy(struct wlr_damage_ring_buffer *entry) {
|
|||
|
||||
void wlr_damage_ring_finish(struct wlr_damage_ring *ring) {
|
||||
pixman_region32_fini(&ring->current);
|
||||
for (size_t i = 0; i < WLR_DAMAGE_RING_PREVIOUS_LEN; ++i) {
|
||||
pixman_region32_fini(&ring->previous[i]);
|
||||
}
|
||||
struct wlr_damage_ring_buffer *entry, *tmp_entry;
|
||||
wl_list_for_each_safe(entry, tmp_entry, &ring->buffers, link) {
|
||||
buffer_destroy(entry);
|
||||
|
|
@ -92,43 +85,6 @@ void wlr_damage_ring_add_whole(struct wlr_damage_ring *ring) {
|
|||
&ring->current, 0, 0, ring->width, ring->height);
|
||||
}
|
||||
|
||||
void wlr_damage_ring_rotate(struct wlr_damage_ring *ring) {
|
||||
// modular decrement
|
||||
ring->previous_idx = ring->previous_idx +
|
||||
WLR_DAMAGE_RING_PREVIOUS_LEN - 1;
|
||||
ring->previous_idx %= WLR_DAMAGE_RING_PREVIOUS_LEN;
|
||||
|
||||
pixman_region32_copy(&ring->previous[ring->previous_idx], &ring->current);
|
||||
pixman_region32_clear(&ring->current);
|
||||
}
|
||||
|
||||
void wlr_damage_ring_get_buffer_damage(struct wlr_damage_ring *ring,
|
||||
int buffer_age, pixman_region32_t *damage) {
|
||||
if (buffer_age <= 0 || buffer_age - 1 > WLR_DAMAGE_RING_PREVIOUS_LEN) {
|
||||
pixman_region32_clear(damage);
|
||||
pixman_region32_union_rect(damage, damage,
|
||||
0, 0, ring->width, ring->height);
|
||||
} else {
|
||||
pixman_region32_copy(damage, &ring->current);
|
||||
|
||||
// Accumulate damage from old buffers
|
||||
for (int i = 0; i < buffer_age - 1; ++i) {
|
||||
int j = (ring->previous_idx + i) % WLR_DAMAGE_RING_PREVIOUS_LEN;
|
||||
pixman_region32_union(damage, damage, &ring->previous[j]);
|
||||
}
|
||||
|
||||
// Check the number of rectangles
|
||||
int n_rects = pixman_region32_n_rects(damage);
|
||||
if (n_rects > WLR_DAMAGE_RING_MAX_RECTS) {
|
||||
pixman_box32_t *extents = pixman_region32_extents(damage);
|
||||
pixman_region32_union_rect(damage, damage,
|
||||
extents->x1, extents->y1,
|
||||
extents->x2 - extents->x1,
|
||||
extents->y2 - extents->y1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void entry_squash_damage(struct wlr_damage_ring_buffer *entry) {
|
||||
pixman_region32_t *prev;
|
||||
if (entry->link.prev == &entry->ring->buffers) {
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ static bool manager_output_prepare(struct wlr_output_swapchain_manager_output *m
|
|||
return false;
|
||||
}
|
||||
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(swapchain, NULL);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(swapchain);
|
||||
if (buffer == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -542,8 +542,7 @@ static void capture_output(struct wl_client *wl_client,
|
|||
goto error;
|
||||
}
|
||||
|
||||
int buffer_age;
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain, &buffer_age);
|
||||
struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain);
|
||||
if (buffer == NULL) {
|
||||
goto error;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue