xwayland: Do not plumb damage region through function parameters
Each function can get the damage region from the xwl_window instead. Add xwl_window_get_damage_region helper for this. v2: * Use xwl_window_get_damage_region in xwl_window_attach_buffer as well (Olivier Fourdan) Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1314>
This commit is contained in:
parent
913631071e
commit
c1c5bf382e
|
@ -874,9 +874,10 @@ xwl_glamor_pixmap_get_wl_buffer(PixmapPtr pixmap)
|
|||
|
||||
Bool
|
||||
xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
||||
PixmapPtr pixmap, RegionPtr region)
|
||||
PixmapPtr pixmap)
|
||||
{
|
||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
||||
RegionPtr region = xwl_window_get_damage_region(xwl_window);
|
||||
|
||||
if (xwl_screen->egl_backend->post_damage)
|
||||
return xwl_screen->egl_backend->post_damage(xwl_window, pixmap, region);
|
||||
|
|
|
@ -137,7 +137,7 @@ void xwl_glamor_init_wl_registry(struct xwl_screen *xwl_screen,
|
|||
Bool xwl_glamor_has_wl_interfaces(struct xwl_screen *xwl_screen,
|
||||
struct xwl_egl_backend *xwl_egl_backend);
|
||||
Bool xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
||||
PixmapPtr pixmap, RegionPtr region);
|
||||
PixmapPtr pixmap);
|
||||
Bool xwl_glamor_allow_commits(struct xwl_window *xwl_window);
|
||||
void xwl_glamor_egl_make_current(struct xwl_screen *xwl_screen);
|
||||
Bool xwl_glamor_needs_buffer_flush(struct xwl_screen *xwl_screen);
|
||||
|
|
|
@ -114,9 +114,9 @@ xwl_window_buffer_maybe_dispose(struct xwl_window_buffer *xwl_window_buffer)
|
|||
}
|
||||
|
||||
static void
|
||||
xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window,
|
||||
RegionPtr damage_region)
|
||||
xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window)
|
||||
{
|
||||
RegionPtr region = xwl_window_get_damage_region(xwl_window);
|
||||
struct xwl_window_buffer *xwl_window_buffer;
|
||||
|
||||
/* Add damage region to all buffers */
|
||||
|
@ -125,14 +125,14 @@ xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window,
|
|||
link_buffer) {
|
||||
RegionUnion(xwl_window_buffer->damage_region,
|
||||
xwl_window_buffer->damage_region,
|
||||
damage_region);
|
||||
region);
|
||||
}
|
||||
xorg_list_for_each_entry(xwl_window_buffer,
|
||||
&xwl_window->window_buffers_unavailable,
|
||||
link_buffer) {
|
||||
RegionUnion(xwl_window_buffer->damage_region,
|
||||
xwl_window_buffer->damage_region,
|
||||
damage_region);
|
||||
region);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -332,8 +332,7 @@ xwl_window_recycle_pixmap(struct xwl_window *xwl_window)
|
|||
}
|
||||
|
||||
PixmapPtr
|
||||
xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window,
|
||||
RegionPtr damage_region)
|
||||
xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window)
|
||||
{
|
||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
||||
struct xwl_window_buffer *xwl_window_buffer;
|
||||
|
@ -346,7 +345,7 @@ xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window,
|
|||
return window_pixmap;
|
||||
#endif /* XWL_HAS_GLAMOR */
|
||||
|
||||
xwl_window_buffer_add_damage_region(xwl_window, damage_region);
|
||||
xwl_window_buffer_add_damage_region(xwl_window);
|
||||
|
||||
xwl_window_buffer = xwl_window_buffer_get_available(xwl_window);
|
||||
if (xwl_window_buffer) {
|
||||
|
|
|
@ -30,12 +30,10 @@
|
|||
#include <xwayland-config.h>
|
||||
|
||||
#include "xwayland-types.h"
|
||||
#include "regionstr.h"
|
||||
|
||||
void xwl_window_buffers_init(struct xwl_window *xwl_window);
|
||||
void xwl_window_buffers_dispose(struct xwl_window *xwl_window);
|
||||
void xwl_window_recycle_pixmap(struct xwl_window *xwl_window);
|
||||
PixmapPtr xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window,
|
||||
RegionPtr damage_region);
|
||||
PixmapPtr xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window);
|
||||
|
||||
#endif /* XWAYLAND_WINDOW_BUFFERS_H */
|
||||
|
|
|
@ -77,6 +77,12 @@ window_get_damage(WindowPtr window)
|
|||
return dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key);
|
||||
}
|
||||
|
||||
RegionPtr
|
||||
xwl_window_get_damage_region(struct xwl_window *xwl_window)
|
||||
{
|
||||
return DamageRegion(window_get_damage(xwl_window->window));
|
||||
}
|
||||
|
||||
struct xwl_window *
|
||||
xwl_window_from_window(WindowPtr window)
|
||||
{
|
||||
|
@ -1380,8 +1386,7 @@ xwl_window_attach_buffer(struct xwl_window *xwl_window)
|
|||
PixmapPtr pixmap;
|
||||
int i;
|
||||
|
||||
region = DamageRegion(window_get_damage(xwl_window->window));
|
||||
pixmap = xwl_window_buffers_get_pixmap(xwl_window, region);
|
||||
pixmap = xwl_window_buffers_get_pixmap(xwl_window);
|
||||
buffer = xwl_pixmap_get_wl_buffer(pixmap);
|
||||
|
||||
if (!buffer) {
|
||||
|
@ -1391,7 +1396,7 @@ xwl_window_attach_buffer(struct xwl_window *xwl_window)
|
|||
|
||||
#ifdef XWL_HAS_GLAMOR
|
||||
if (xwl_screen->glamor) {
|
||||
if (!xwl_glamor_post_damage(xwl_window, pixmap, region)) {
|
||||
if (!xwl_glamor_post_damage(xwl_window, pixmap)) {
|
||||
ErrorF("glamor: Failed to post damage\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -1404,6 +1409,7 @@ xwl_window_attach_buffer(struct xwl_window *xwl_window)
|
|||
* connection. If we flood it too much anyway, this could
|
||||
* abort in libwayland-client.
|
||||
*/
|
||||
region = xwl_window_get_damage_region(xwl_window);
|
||||
if (RegionNumRects(region) > 256) {
|
||||
box = RegionExtents(region);
|
||||
xwl_surface_damage(xwl_screen, xwl_window->surface,
|
||||
|
|
|
@ -123,6 +123,7 @@ struct xwl_window {
|
|||
};
|
||||
|
||||
struct xwl_window *xwl_window_get(WindowPtr window);
|
||||
RegionPtr xwl_window_get_damage_region(struct xwl_window *xwl_window);
|
||||
struct xwl_window *xwl_window_from_window(WindowPtr window);
|
||||
|
||||
Bool is_surface_from_xwl_window(struct wl_surface *surface);
|
||||
|
|
Loading…
Reference in New Issue