On Tue, 26 Sep 2017 18:15:34 +0100 Daniel Stone <dani...@collabora.com> wrote:
> Currently this doesn't actually really do anything, but will be used in > the future to track the state for both modeset and repaint requests. > Completion of the request gives us a single request-completion path for > both pageflip and vblank events. > > This merges the timing paths for scanout and plane-but-but-atomic-plane > content. > > Signed-off-by: Daniel Stone <dani...@collabora.com> > --- > libweston/compositor-drm.c | 354 > ++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 300 insertions(+), 54 deletions(-) > Hi, two minor nits below. > @@ -1304,6 +1524,8 @@ static void > drm_output_start_repaint_loop(struct weston_output *output_base) > { > struct drm_output *output = to_drm_output(output_base); > + struct drm_pending_state *pending_state = NULL; > + struct drm_output_state *state; > struct drm_backend *backend = > to_drm_backend(output_base->compositor); > uint32_t fb_id; > @@ -1364,10 +1586,16 @@ drm_output_start_repaint_loop(struct weston_output > *output_base) > > assert(!output->page_flip_pending); > assert(!output->fb_last); > + assert(!output->state_last); > + > + pending_state = drm_pending_state_alloc(backend); > + state = drm_output_state_duplicate(output->state_cur, pending_state, > + DRM_OUTPUT_STATE_PRESERVE_PLANES); > > if (drmModePageFlip(backend->drm.fd, output->crtc_id, fb_id, > DRM_MODE_PAGE_FLIP_EVENT, output) < 0) { > weston_log("queueing pageflip failed: %m\n"); > + drm_pending_state_free(pending_state); Should not call this, because the finish_frame path also calls drm_pending_state_free(). > goto finish_frame; > } > > @@ -1378,9 +1606,15 @@ drm_output_start_repaint_loop(struct weston_output > *output_base) > output->fb_last = drm_fb_ref(output->fb_current); > output->page_flip_pending = 1; > > + drm_output_assign_state(state, DRM_OUTPUT_STATE_UPDATE_ASYNCHRONOUS); > + drm_pending_state_free(pending_state); > + > return; > > finish_frame: > + if (pending_state) > + drm_pending_state_free(pending_state); No need to check, drm_pending_state_free(NULL) is fine. > + > /* if we cannot page-flip, immediately finish frame */ > weston_output_finish_frame(output_base, NULL, > WP_PRESENTATION_FEEDBACK_INVALID); With those fixed: Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Thanks, pq
pgpSWrZ_forFn.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel