compositor-drm: Turn vblank_pending from bool to refcount

vblank_pending is currently a bool, which is reset on every vblank
requests (i.e. sprite pageflip). This can occur more than once per
frame, so turn it into a callback, so we only fire frame-done when we've
collected all the events.

This fixes unexpected behaviour when multiple views per output have been
promoted to DRM planes.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 732b35c..8878237 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -937,7 +937,7 @@
 		s->fb_last = s->fb_current;
 		s->fb_current = s->fb_pending;
 		s->fb_pending = NULL;
-		output->vblank_pending = 1;
+		output->vblank_pending++;
 	}
 
 	return 0;
@@ -1048,13 +1048,14 @@
 			 WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
 
 	drm_output_update_msc(output, frame);
-	output->vblank_pending = 0;
+	output->vblank_pending--;
+	assert(output->vblank_pending >= 0);
 
 	assert(s->fb_last || s->fb_current);
 	drm_fb_unref(s->fb_last);
 	s->fb_last = NULL;
 
-	if (!output->page_flip_pending) {
+	if (!output->page_flip_pending && !output->vblank_pending) {
 		/* Stop the pageflip timer instead of rearming it here */
 		if (output->pageflip_timer)
 			wl_event_source_timer_update(output->pageflip_timer, 0);