From: Michael Olbrich Date: Tue, 14 Jul 2020 09:18:54 +0000 (+0200) Subject: backend-drm: reorder plane checks to avoid unnecessary rendering X-Git-Tag: upstream/9.0.0~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3097acc702465e54fea64dfd0eedfe522e38a212;p=platform%2Fupstream%2Fweston.git backend-drm: reorder plane checks to avoid unnecessary rendering If a surface is not visible, then is does not matter if the view is on multiple outputs. It will be skipped anyways when the output is rendered. So check first if the surface is acually visible on the output before doing any checks that might force rendering. This avoids unnecessary rendering. Signed-off-by: Michael Olbrich --- diff --git a/libweston/backend-drm/state-propose.c b/libweston/backend-drm/state-propose.c index 767c34f4..b403e304 100644 --- a/libweston/backend-drm/state-propose.c +++ b/libweston/backend-drm/state-propose.c @@ -862,20 +862,6 @@ drm_output_propose_state(struct weston_output *output_base, continue; } - /* We only assign planes to views which are exclusively present - * on our output. */ - if (ev->output_mask != (1u << output->base.id)) { - drm_debug(b, "\t\t\t\t[view] not assigning view %p to plane " - "(on multiple outputs)\n", ev); - force_renderer = true; - } - - if (!weston_view_has_valid_buffer(ev)) { - drm_debug(b, "\t\t\t\t[view] not assigning view %p to plane " - "(no buffer available)\n", ev); - force_renderer = true; - } - /* Ignore views we know to be totally occluded. */ pixman_region32_init(&clipped_view); pixman_region32_intersect(&clipped_view, @@ -897,6 +883,20 @@ drm_output_propose_state(struct weston_output *output_base, continue; } + /* We only assign planes to views which are exclusively present + * on our output. */ + if (ev->output_mask != (1u << output->base.id)) { + drm_debug(b, "\t\t\t\t[view] not assigning view %p to plane " + "(on multiple outputs)\n", ev); + force_renderer = true; + } + + if (!weston_view_has_valid_buffer(ev)) { + drm_debug(b, "\t\t\t\t[view] not assigning view %p to plane " + "(no buffer available)\n", ev); + force_renderer = true; + } + /* Since we process views from top to bottom, we know that if * the view intersects the calculated renderer region, it must * be part of, or occluded by, it, and cannot go on a plane. */