From d6e250b389b8ea07af1c801b10ecf0b55f758413 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 25 Apr 2019 19:35:40 +0300 Subject: [PATCH] render/egl: fix swapping with no damage According to the spec: > If is 0 then is ignored and the entire > surface is implicitly damaged and the behaviour is equivalent > to calling eglSwapBuffers. When we want to swap with an empty damage region, set the damage to a single empty rectangle. --- render/egl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/render/egl.c b/render/egl.c index 4785dc9c..22859b16 100644 --- a/render/egl.c +++ b/render/egl.c @@ -377,6 +377,14 @@ bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface, pixman_region32_fini(&flipped_damage); + if (nrects == 0) { + // Swapping with no rects is the same as swapping with the entire + // surface damaged. To swap with no damage, we set the damage region + // to a single empty rectangle. + nrects = 1; + memset(egl_damage, 0, sizeof(egl_damage)); + } + if (egl->exts.swap_buffers_with_damage_ext) { ret = eglSwapBuffersWithDamageEXT(egl->display, surface, egl_damage, nrects);