On Wed, 20 Dec 2017 12:26:42 +0000 Daniel Stone <dani...@collabora.com> wrote:
> Use the same codepath, which has the added advantage of being able to > import dmabufs. > > Signed-off-by: Daniel Stone <dani...@collabora.com> > --- > libweston/compositor-drm.c | 48 > +++++++++------------------------------------- > 1 file changed, 9 insertions(+), 39 deletions(-) > > diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c > index 195eef725..09318c98c 100644 > --- a/libweston/compositor-drm.c > +++ b/libweston/compositor-drm.c > @@ -1683,24 +1683,19 @@ drm_output_prepare_scanout_view(struct > drm_output_state *output_state, > struct weston_view *ev) > { > struct drm_output *output = output_state->output; > - struct drm_backend *b = to_drm_backend(output->base.compositor); > struct drm_plane *scanout_plane = output->scanout_plane; > struct drm_plane_state *state; > - struct weston_buffer *buffer = ev->surface->buffer_ref.buffer; > - struct gbm_bo *bo; > - > - /* Don't import buffers which span multiple outputs. */ > - if (ev->output_mask != (1u << output->base.id)) > - return NULL; > + struct drm_fb *fb; > > - /* We use GBM to import buffers. */ > - if (b->gbm == NULL) > + fb = drm_fb_get_from_view(output_state, ev); > + if (!fb) > return NULL; > > - if (buffer == NULL) > - return NULL; > - if (wl_shm_buffer_get(buffer->resource)) > + /* Can't change formats with just a pageflip */ > + if (fb->format->format != output->gbm_format) { > + drm_fb_unref(fb); > return NULL; > + } > > state = drm_output_state_get_plane(output_state, scanout_plane); > if (state->fb) { > @@ -1708,9 +1703,11 @@ drm_output_prepare_scanout_view(struct > drm_output_state *output_state, > * a client view has already been placed on the scanout > * view. In that case, do not free or put back the state, > * but just leave it in place and quietly exit. */ > + drm_fb_unref(fb); > return NULL; > } > > + state->fb = fb; > state->output = output; > drm_plane_state_coords_for_view(state, ev); > > @@ -1723,33 +1720,6 @@ drm_output_prepare_scanout_view(struct > drm_output_state *output_state, > state->dest_h != (unsigned) output->base.current_mode->height) > goto err; > > - if (ev->alpha != 1.0f) > - goto err; > - > - bo = gbm_bo_import(b->gbm, GBM_BO_IMPORT_WL_BUFFER, > - buffer->resource, GBM_BO_USE_SCANOUT); > - > - /* Unable to use the buffer for scanout */ > - if (!bo) > - goto err; > - > - state->fb = drm_fb_get_from_bo(bo, b, drm_view_is_opaque(ev), > - BUFFER_CLIENT); > - if (!state->fb) { > - /* We need to explicitly destroy the BO. */ > - gbm_bo_destroy(bo); > - goto err; > - } > - > - /* Can't change formats with just a pageflip */ > - if (state->fb->format->format != output->gbm_format) { > - /* No need to destroy the GBM BO here, as it's now owned > - * by the FB. */ > - goto err; > - } > - > - drm_fb_set_buffer(state->fb, buffer); > - > return &scanout_plane->base; > > err: Nice. Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Thanks, pq
pgpft1vLdZ30b.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel