On Wed, 11 Jul 2018 11:41:31 +0100 Daniel Stone <dani...@collabora.com> wrote:
> Add a new mode, which attempts to construct a scene exclusively using > planes. This is a building block for incrementally testing and > constructing state: in the plane-only mode, we test the state exactly > once, when we have constructed a full set of planes and want to know if > it works or not. > > When using the renderer, we need to incrementally test views one by one > to see if they will work on planes, falling back to the renderer if not. > This test is different, since the scanout plane will be occupied by the > renderer's buffer. Testing using the renderer or client buffers may have > completely different characteristics, so we need two passes: first, > constructing a state with only planes and testing if that succeeds, > falling back later to a mixed renderer/plane mode which tests > incrementally. > > This implements the first mode, and preferentially attempts to use it. > > Signed-off-by: Daniel Stone <dani...@collabora.com> > --- > libweston/compositor-drm.c | 26 ++++++++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-) > > diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c > index c7ca6ef79..d4555da78 100644 > --- a/libweston/compositor-drm.c > +++ b/libweston/compositor-drm.c > @@ -1944,6 +1944,7 @@ drm_output_assign_state(struct drm_output_state *state, > enum drm_output_propose_state_mode { > DRM_OUTPUT_PROPOSE_STATE_MIXED, /**< mix renderer & planes */ > DRM_OUTPUT_PROPOSE_STATE_RENDERER_ONLY, /**< only assign to renderer & > cursor */ > + DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY, /**< no renderer use, only planes > */ > }; > > static struct drm_plane_state * > @@ -3309,6 +3310,7 @@ drm_output_propose_state(struct weston_output > *output_base, > struct weston_view *ev; > pixman_region32_t surface_overlap, renderer_region, occluded_region; > bool planes_ok = (mode != DRM_OUTPUT_PROPOSE_STATE_RENDERER_ONLY); > + bool renderer_ok = (mode != DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY); > int ret; > > assert(!output->state_last); > @@ -3400,6 +3402,11 @@ drm_output_propose_state(struct weston_output > *output_base, > if (!ps && !drm_view_is_opaque(ev)) > force_renderer = true; > > + if (force_renderer && !renderer_ok) { > + pixman_region32_fini(&clipped_view); > + goto err_region; > + } This early exit seems completely redundant with the other !renderer_ok check and doesn't shortcut much anyway. Remove it maybe? I didn't see it getting more use in later patches either. Anyway: Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Thanks, pq > + > if (!ps && !force_renderer) > ps = drm_output_prepare_scanout_view(state, ev); > if (!ps && !force_renderer) > @@ -3422,6 +3429,14 @@ drm_output_propose_state(struct weston_output > *output_base, > 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) { > + pixman_region32_fini(&clipped_view); > + goto err_region; > + } > + > pixman_region32_union(&renderer_region, > &renderer_region, > &clipped_view); > @@ -3437,6 +3452,9 @@ drm_output_propose_state(struct weston_output > *output_base, > > return state; > > +err_region: > + pixman_region32_fini(&renderer_region); > + pixman_region32_fini(&occluded_region); > err: > drm_output_state_free(state); > return NULL; > @@ -3453,9 +3471,13 @@ drm_assign_planes(struct weston_output *output_base, > void *repaint_data) > struct weston_view *ev; > struct weston_plane *primary = &output_base->compositor->primary_plane; > > - if (!b->sprites_are_broken) > + if (!b->sprites_are_broken) { > state = drm_output_propose_state(output_base, pending_state, > - > DRM_OUTPUT_PROPOSE_STATE_MIXED); > + > DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY); > + if (!state) > + state = drm_output_propose_state(output_base, > pending_state, > + > DRM_OUTPUT_PROPOSE_STATE_MIXED); > + } > > if (!state) > state = drm_output_propose_state(output_base, pending_state,
pgppkXaaTS5V6.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel