This series, Acked-by: Sinclair Yeh <[email protected]>
On Wed, Sep 05, 2018 at 05:18:15PM -0700, Deepak Rawat wrote: > Not all drivers support fb2 modifiers so read the capability before > using drmModeAddFB2WithModifiers. > > Signed-off-by: Deepak Rawat <[email protected]> > --- > libweston/compositor-drm.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c > index 38911763..6a87a296 100644 > --- a/libweston/compositor-drm.c > +++ b/libweston/compositor-drm.c > @@ -302,6 +302,8 @@ struct drm_backend { > bool shutting_down; > > bool aspect_ratio_supported; > + > + bool fb_modifiers; > }; > > struct drm_mode { > @@ -903,7 +905,7 @@ drm_fb_destroy_gbm(struct gbm_bo *bo, void *data) > } > > static int > -drm_fb_addfb(struct drm_fb *fb) > +drm_fb_addfb(struct drm_fb *fb, bool fb_modifiers) > { > int ret = -EINVAL; > #ifdef HAVE_DRM_ADDFB2_MODIFIERS > @@ -913,7 +915,7 @@ drm_fb_addfb(struct drm_fb *fb) > > /* If we have a modifier set, we must only use the WithModifiers > * entrypoint; we cannot import it through legacy ioctls. */ > - if (fb->modifier != DRM_FORMAT_MOD_INVALID) { > + if (fb_modifiers && fb->modifier != DRM_FORMAT_MOD_INVALID) { > /* KMS demands that if a modifier is set, it must be the same > * for all planes. */ > #ifdef HAVE_DRM_ADDFB2_MODIFIERS > @@ -996,7 +998,7 @@ drm_fb_create_dumb(struct drm_backend *b, int width, int > height, > fb->height = height; > fb->fd = b->drm.fd; > > - if (drm_fb_addfb(fb) != 0) { > + if (drm_fb_addfb(fb, b->fb_modifiers) != 0) { > weston_log("failed to create kms fb: %m\n"); > goto err_bo; > } > @@ -1168,7 +1170,7 @@ drm_fb_get_from_dmabuf(struct linux_dmabuf_buffer > *dmabuf, > goto err_free; > } > > - if (drm_fb_addfb(fb) != 0) > + if (drm_fb_addfb(fb, backend->fb_modifiers) != 0) > goto err_free; > > return fb; > @@ -1239,7 +1241,7 @@ drm_fb_get_from_bo(struct gbm_bo *bo, struct > drm_backend *backend, > goto err_free; > } > > - if (drm_fb_addfb(fb) != 0) { > + if (drm_fb_addfb(fb, backend->fb_modifiers) != 0) { > if (type == BUFFER_GBM_SURFACE) > weston_log("failed to create kms fb: %m\n"); > goto err_free; > @@ -3822,6 +3824,14 @@ init_kms_caps(struct drm_backend *b) > weston_log("DRM: %s atomic modesetting\n", > b->atomic_modeset ? "supports" : "does not support"); > > +#ifdef HAVE_DRM_ADDFB2_MODIFIERS > + ret = drmGetCap(b->drm.fd, DRM_CAP_ADDFB2_MODIFIERS, &cap); > + if (ret == 0) > + b->fb_modifiers = cap; > + else > +#endif > + b->fb_modifiers = 0; > + > /* > * KMS support for hardware planes cannot properly synchronize > * without nuclear page flip. Without nuclear/atomic, hw plane > -- > 2.17.1 > _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
