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
|
Bool
|
||||||
xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
||||||
PixmapPtr pixmap, RegionPtr region)
|
PixmapPtr pixmap)
|
||||||
{
|
{
|
||||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
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)
|
if (xwl_screen->egl_backend->post_damage)
|
||||||
return xwl_screen->egl_backend->post_damage(xwl_window, pixmap, region);
|
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,
|
Bool xwl_glamor_has_wl_interfaces(struct xwl_screen *xwl_screen,
|
||||||
struct xwl_egl_backend *xwl_egl_backend);
|
struct xwl_egl_backend *xwl_egl_backend);
|
||||||
Bool xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
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);
|
Bool xwl_glamor_allow_commits(struct xwl_window *xwl_window);
|
||||||
void xwl_glamor_egl_make_current(struct xwl_screen *xwl_screen);
|
void xwl_glamor_egl_make_current(struct xwl_screen *xwl_screen);
|
||||||
Bool xwl_glamor_needs_buffer_flush(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
|
static void
|
||||||
xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window,
|
xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window)
|
||||||
RegionPtr damage_region)
|
|
||||||
{
|
{
|
||||||
|
RegionPtr region = xwl_window_get_damage_region(xwl_window);
|
||||||
struct xwl_window_buffer *xwl_window_buffer;
|
struct xwl_window_buffer *xwl_window_buffer;
|
||||||
|
|
||||||
/* Add damage region to all buffers */
|
/* Add damage region to all buffers */
|
||||||
|
@ -125,14 +125,14 @@ xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window,
|
||||||
link_buffer) {
|
link_buffer) {
|
||||||
RegionUnion(xwl_window_buffer->damage_region,
|
RegionUnion(xwl_window_buffer->damage_region,
|
||||||
xwl_window_buffer->damage_region,
|
xwl_window_buffer->damage_region,
|
||||||
damage_region);
|
region);
|
||||||
}
|
}
|
||||||
xorg_list_for_each_entry(xwl_window_buffer,
|
xorg_list_for_each_entry(xwl_window_buffer,
|
||||||
&xwl_window->window_buffers_unavailable,
|
&xwl_window->window_buffers_unavailable,
|
||||||
link_buffer) {
|
link_buffer) {
|
||||||
RegionUnion(xwl_window_buffer->damage_region,
|
RegionUnion(xwl_window_buffer->damage_region,
|
||||||
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
|
PixmapPtr
|
||||||
xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window,
|
xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window)
|
||||||
RegionPtr damage_region)
|
|
||||||
{
|
{
|
||||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
||||||
struct xwl_window_buffer *xwl_window_buffer;
|
struct xwl_window_buffer *xwl_window_buffer;
|
||||||
|
@ -346,7 +345,7 @@ xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window,
|
||||||
return window_pixmap;
|
return window_pixmap;
|
||||||
#endif /* XWL_HAS_GLAMOR */
|
#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);
|
xwl_window_buffer = xwl_window_buffer_get_available(xwl_window);
|
||||||
if (xwl_window_buffer) {
|
if (xwl_window_buffer) {
|
||||||
|
|
|
@ -30,12 +30,10 @@
|
||||||
#include <xwayland-config.h>
|
#include <xwayland-config.h>
|
||||||
|
|
||||||
#include "xwayland-types.h"
|
#include "xwayland-types.h"
|
||||||
#include "regionstr.h"
|
|
||||||
|
|
||||||
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);
|
||||||
void xwl_window_recycle_pixmap(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,
|
PixmapPtr xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window);
|
||||||
RegionPtr damage_region);
|
|
||||||
|
|
||||||
#endif /* XWAYLAND_WINDOW_BUFFERS_H */
|
#endif /* XWAYLAND_WINDOW_BUFFERS_H */
|
||||||
|
|
|
@ -77,6 +77,12 @@ window_get_damage(WindowPtr window)
|
||||||
return dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key);
|
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 *
|
struct xwl_window *
|
||||||
xwl_window_from_window(WindowPtr window)
|
xwl_window_from_window(WindowPtr window)
|
||||||
{
|
{
|
||||||
|
@ -1380,8 +1386,7 @@ xwl_window_attach_buffer(struct xwl_window *xwl_window)
|
||||||
PixmapPtr pixmap;
|
PixmapPtr pixmap;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
region = DamageRegion(window_get_damage(xwl_window->window));
|
pixmap = xwl_window_buffers_get_pixmap(xwl_window);
|
||||||
pixmap = xwl_window_buffers_get_pixmap(xwl_window, region);
|
|
||||||
buffer = xwl_pixmap_get_wl_buffer(pixmap);
|
buffer = xwl_pixmap_get_wl_buffer(pixmap);
|
||||||
|
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
|
@ -1391,7 +1396,7 @@ xwl_window_attach_buffer(struct xwl_window *xwl_window)
|
||||||
|
|
||||||
#ifdef XWL_HAS_GLAMOR
|
#ifdef XWL_HAS_GLAMOR
|
||||||
if (xwl_screen->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");
|
ErrorF("glamor: Failed to post damage\n");
|
||||||
return FALSE;
|
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
|
* connection. If we flood it too much anyway, this could
|
||||||
* abort in libwayland-client.
|
* abort in libwayland-client.
|
||||||
*/
|
*/
|
||||||
|
region = xwl_window_get_damage_region(xwl_window);
|
||||||
if (RegionNumRects(region) > 256) {
|
if (RegionNumRects(region) > 256) {
|
||||||
box = RegionExtents(region);
|
box = RegionExtents(region);
|
||||||
xwl_surface_damage(xwl_screen, xwl_window->surface,
|
xwl_surface_damage(xwl_screen, xwl_window->surface,
|
||||||
|
|
|
@ -123,6 +123,7 @@ struct xwl_window {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct xwl_window *xwl_window_get(WindowPtr 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);
|
struct xwl_window *xwl_window_from_window(WindowPtr window);
|
||||||
|
|
||||||
Bool is_surface_from_xwl_window(struct wl_surface *surface);
|
Bool is_surface_from_xwl_window(struct wl_surface *surface);
|
||||||
|
|
Loading…
Reference in New Issue