drm/state-propose: Flatten and clarify control flow

Try to make drm_output_state_propose a little more clear by reducing
divergence between plane and renderer modes towards the end, removing
a possibly-surprising conditional continue.

Signed-off-by: Daniel Stone <daniels@collabora.com>
dev
Daniel Stone 4 years ago
parent 71e6ba5c06
commit ebcf4f35b4
  1. 35
      libweston/backend-drm/state-propose.c

@ -917,6 +917,7 @@ drm_output_propose_state(struct weston_output *output_base,
force_renderer = true; force_renderer = true;
} }
/* Now try to place it on a plane if we can. */
if (!force_renderer) { if (!force_renderer) {
drm_debug(b, "\t\t\t[plane] started with zpos %"PRIu64"\n", drm_debug(b, "\t\t\t[plane] started with zpos %"PRIu64"\n",
current_lowest_zpos); current_lowest_zpos);
@ -929,38 +930,23 @@ drm_output_propose_state(struct weston_output *output_base,
current_lowest_zpos = ps->zpos; current_lowest_zpos = ps->zpos;
drm_debug(b, "\t\t\t[plane] next zpos to use %"PRIu64"\n", drm_debug(b, "\t\t\t[plane] next zpos to use %"PRIu64"\n",
current_lowest_zpos); current_lowest_zpos);
} else if (!ps && !renderer_ok) {
if (!weston_view_is_opaque(ev, &clipped_view))
pixman_region32_intersect(&clipped_view,
&clipped_view,
&ev->transform.opaque);
/* the visible-and-opaque region of this view
* will occlude views underneath it */
pixman_region32_union(&occluded_region,
&occluded_region,
&clipped_view);
pixman_region32_fini(&clipped_view);
continue;
}
/* We have been assigned to the primary (renderer) plane:
* check if this is OK, and add ourselves to the renderer
* region if so. */
if (!renderer_ok) {
drm_debug(b, "\t\t[view] failing state generation: " drm_debug(b, "\t\t[view] failing state generation: "
"placing view %p to renderer not allowed\n", "placing view %p to renderer not allowed\n",
ev); ev);
pixman_region32_fini(&clipped_view); pixman_region32_fini(&clipped_view);
goto err_region; goto err_region;
} } else if (!ps) {
/* clipped_view contains the area that's going to be
/* clipped_view contains the area that's going to be visible * visible on screen; add this to the renderer region */
* on screen; add this to the renderer region */
pixman_region32_union(&renderer_region, pixman_region32_union(&renderer_region,
&renderer_region, &renderer_region,
&clipped_view); &clipped_view);
drm_debug(b, "\t\t\t\t[view] view %p will be placed "
"on the renderer\n", ev);
}
/* Opaque areas of our clipped view occlude areas behind it; /* Opaque areas of our clipped view occlude areas behind it;
* however, anything not in the opaque region (which is the * however, anything not in the opaque region (which is the
* entire clipped area if the whole view is known to be * entire clipped area if the whole view is known to be
@ -975,9 +961,6 @@ drm_output_propose_state(struct weston_output *output_base,
&clipped_view); &clipped_view);
pixman_region32_fini(&clipped_view); pixman_region32_fini(&clipped_view);
drm_debug(b, "\t\t\t\t[view] view %p will be placed "
"on the renderer\n", ev);
} }
pixman_region32_fini(&renderer_region); pixman_region32_fini(&renderer_region);

Loading…
Cancel
Save