From 914c96c3d2b72c1ebe62ca203858a3df8f6577b9 Mon Sep 17 00:00:00 2001 From: Leandro Ribeiro Date: Tue, 3 Dec 2019 12:22:11 -0300 Subject: [PATCH] Revert "move frame_signal emission to weston_output_repaint()" The emission of frame_signal has to happen before a flip, otherwise glReadPixels() could read an old frame or even worse an uninitialized buffer. So move frame_signal emission back to renderers. This reverts commit 2619bfe420c493b0adef57cf2f57b3b5fe7d7078. Signed-off-by: Leandro Ribeiro --- libweston/compositor.c | 1 - libweston/pixman-renderer.c | 1 + libweston/renderer-gl/gl-renderer.c | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libweston/compositor.c b/libweston/compositor.c index 2025039e..72a2905e 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -2723,7 +2723,6 @@ weston_output_repaint(struct weston_output *output, void *repaint_data) weston_output_update_matrix(output); r = output->repaint(output, &output_damage, repaint_data); - wl_signal_emit(&output->frame_signal, &output_damage); pixman_region32_fini(&output_damage); diff --git a/libweston/pixman-renderer.c b/libweston/pixman-renderer.c index f73be2d2..378845d0 100644 --- a/libweston/pixman-renderer.c +++ b/libweston/pixman-renderer.c @@ -580,6 +580,7 @@ pixman_renderer_repaint_output(struct weston_output *output, pixman_region32_fini(&hw_damage); pixman_region32_copy(&output->previous_damage, output_damage); + wl_signal_emit(&output->frame_signal, output); /* Actual flip should be done by caller */ } diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index d1089046..14c5f8b1 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -1474,6 +1474,7 @@ gl_renderer_repaint_output(struct weston_output *output, draw_output_borders(output, border_status); pixman_region32_copy(&output->previous_damage, output_damage); + wl_signal_emit(&output->frame_signal, output); go->end_render_sync = create_render_sync(gr);