xwayland/window-buffers: optionally force disposal
For cases (to come) where we would want to force the disposal of the window buffers, add a parameter to force the disposal by calling dispose() directly instead of maybe_dispose(). Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1589>
This commit is contained in:
parent
571cb13342
commit
fa04e15afc
|
@ -752,7 +752,7 @@ xwl_window_dmabuf_feedback_done(void *data,
|
||||||
/* If the linux-dmabuf v4 per-surface feedback changed, make sure the
|
/* If the linux-dmabuf v4 per-surface feedback changed, make sure the
|
||||||
* window buffers get re-created with appropriate parameters.
|
* window buffers get re-created with appropriate parameters.
|
||||||
*/
|
*/
|
||||||
xwl_window_buffers_dispose(xwl_window);
|
xwl_window_buffers_dispose(xwl_window, FALSE);
|
||||||
xwl_window_realloc_pixmap(xwl_window);
|
xwl_window_realloc_pixmap(xwl_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -244,8 +244,17 @@ xwl_window_buffers_init(struct xwl_window *xwl_window)
|
||||||
xorg_list_init(&xwl_window->window_buffers_unavailable);
|
xorg_list_init(&xwl_window->window_buffers_unavailable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xwl_window_buffer_disposal(struct xwl_window_buffer *xwl_window_buffer, Bool force)
|
||||||
|
{
|
||||||
|
if (force)
|
||||||
|
xwl_window_buffer_dispose(xwl_window_buffer);
|
||||||
|
else
|
||||||
|
xwl_window_buffer_maybe_dispose(xwl_window_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
xwl_window_buffers_dispose(struct xwl_window *xwl_window)
|
xwl_window_buffers_dispose(struct xwl_window *xwl_window, Bool force)
|
||||||
{
|
{
|
||||||
struct xwl_window_buffer *xwl_window_buffer, *tmp;
|
struct xwl_window_buffer *xwl_window_buffer, *tmp;
|
||||||
|
|
||||||
|
@ -257,14 +266,14 @@ xwl_window_buffers_dispose(struct xwl_window *xwl_window)
|
||||||
&xwl_window->window_buffers_available,
|
&xwl_window->window_buffers_available,
|
||||||
link_buffer) {
|
link_buffer) {
|
||||||
xorg_list_del(&xwl_window_buffer->link_buffer);
|
xorg_list_del(&xwl_window_buffer->link_buffer);
|
||||||
xwl_window_buffer_maybe_dispose(xwl_window_buffer);
|
xwl_window_buffer_disposal(xwl_window_buffer, force);
|
||||||
}
|
}
|
||||||
|
|
||||||
xorg_list_for_each_entry_safe(xwl_window_buffer, tmp,
|
xorg_list_for_each_entry_safe(xwl_window_buffer, tmp,
|
||||||
&xwl_window->window_buffers_unavailable,
|
&xwl_window->window_buffers_unavailable,
|
||||||
link_buffer) {
|
link_buffer) {
|
||||||
xorg_list_del(&xwl_window_buffer->link_buffer);
|
xorg_list_del(&xwl_window_buffer->link_buffer);
|
||||||
xwl_window_buffer_maybe_dispose(xwl_window_buffer);
|
xwl_window_buffer_disposal(xwl_window_buffer, force);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xwl_window->window_buffers_timer)
|
if (xwl_window->window_buffers_timer)
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
void xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window);
|
void xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window);
|
||||||
void xwl_window_buffer_release(struct xwl_window_buffer *xwl_window_buffer);
|
void xwl_window_buffer_release(struct xwl_window_buffer *xwl_window_buffer);
|
||||||
void xwl_window_buffers_init(struct xwl_window *xwl_window);
|
void xwl_window_buffers_init(struct xwl_window *xwl_window);
|
||||||
void xwl_window_buffers_dispose(struct xwl_window *xwl_window);
|
void xwl_window_buffers_dispose(struct xwl_window *xwl_window, Bool force);
|
||||||
void xwl_window_realloc_pixmap(struct xwl_window *xwl_window);
|
void xwl_window_realloc_pixmap(struct xwl_window *xwl_window);
|
||||||
PixmapPtr xwl_window_swap_pixmap(struct xwl_window *xwl_window, Bool handle_sync);
|
PixmapPtr xwl_window_swap_pixmap(struct xwl_window *xwl_window, Bool handle_sync);
|
||||||
|
|
||||||
|
|
|
@ -1407,7 +1407,7 @@ xwl_window_update_surface_window(struct xwl_window *xwl_window)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surface_window->drawable.depth != xwl_window->surface_window->drawable.depth)
|
if (surface_window->drawable.depth != xwl_window->surface_window->drawable.depth)
|
||||||
xwl_window_buffers_dispose(xwl_window);
|
xwl_window_buffers_dispose(xwl_window, FALSE);
|
||||||
|
|
||||||
xwl_window->surface_window = surface_window;
|
xwl_window->surface_window = surface_window;
|
||||||
register_damage(xwl_window);
|
register_damage(xwl_window);
|
||||||
|
@ -1691,7 +1691,7 @@ xwl_window_dispose(struct xwl_window *xwl_window)
|
||||||
xorg_list_del(&xwl_window->link_damage);
|
xorg_list_del(&xwl_window->link_damage);
|
||||||
xorg_list_del(&xwl_window->link_window);
|
xorg_list_del(&xwl_window->link_window);
|
||||||
|
|
||||||
xwl_window_buffers_dispose(xwl_window);
|
xwl_window_buffers_dispose(xwl_window, FALSE);
|
||||||
|
|
||||||
if (xwl_window->window_buffers_timer)
|
if (xwl_window->window_buffers_timer)
|
||||||
TimerFree(xwl_window->window_buffers_timer);
|
TimerFree(xwl_window->window_buffers_timer);
|
||||||
|
@ -1753,7 +1753,7 @@ xwl_window_set_window_pixmap(WindowPtr window,
|
||||||
old_pixmap->drawable.height == pixmap->drawable.height))
|
old_pixmap->drawable.height == pixmap->drawable.height))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xwl_window_buffers_dispose(xwl_window);
|
xwl_window_buffers_dispose(xwl_window, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
|
|
Loading…
Reference in New Issue