Currently we accumulate damage in a list and call wl_surface_damage() for every rectangle in the accumulated regions in xwl_screen_post_damage(). If the window size changes we might end up with a damage region that exceeds the window bounds causing compositors like mutter to call glTexSubImage2D with an area that exceeds the buffer dimensions causing GL_INVALID_VALUE.
So intersect the damage region with the window's shape region in xwl_screen_post_damage(). Signed-off-by: Adel Gadllah <[email protected]> --- hw/xwayland/xwayland.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c index c2c6481..7f810aa 100644 --- a/hw/xwayland/xwayland.c +++ b/hw/xwayland/xwayland.c @@ -325,7 +325,7 @@ static void xwl_screen_post_damage(struct xwl_screen *xwl_screen) { struct xwl_window *xwl_window; - RegionPtr region; + RegionPtr region, shape_region; BoxPtr box; int count, i; struct wl_buffer *buffer; @@ -334,6 +334,9 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen) xorg_list_for_each_entry(xwl_window, &xwl_screen->damage_window_list, link_damage) { region = DamageRegion(xwl_window->damage); + shape_region = wBoundingShape(xwl_window->window); + if (shape_region) + RegionIntersect(region, region, shape_region); count = RegionNumRects(region); pixmap = (*xwl_screen->screen->GetWindowPixmap) (xwl_window->window); -- 1.9.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
