This patch has been tested on Android on the iMX6. Tested-by: Robert Foss <robert.f...@collabora.com>
On Thu, 2017-06-08 at 20:56 +0200, Lucas Stach wrote: > This implements a way to import FDs with modifiers on plain GBM > devices, > without the need to go through EGL. This is mostly to the benefit of > gbm_gralloc, which can keep its dependencies low. > > Signed-off-by: Lucas Stach <l.st...@pengutronix.de> > --- > src/gbm/backends/dri/gbm_dri.c | 54 > ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 54 insertions(+) > > diff --git a/src/gbm/backends/dri/gbm_dri.c > b/src/gbm/backends/dri/gbm_dri.c > index 7fb569078b27..19be440d48e3 100644 > --- a/src/gbm/backends/dri/gbm_dri.c > +++ b/src/gbm/backends/dri/gbm_dri.c > @@ -932,6 +932,60 @@ gbm_dri_bo_import(struct gbm_device *gbm, > break; > } > > + case GBM_BO_IMPORT_FD_MODIFIER: > + { > + struct gbm_import_fd_modifier_data *fd_data = buffer; > + unsigned int error; > + int fourcc; > + > + /* Import with modifier requires createImageFromDmaBufs2 */ > + if (dri->image == NULL || dri->image->base.version < 15 || > + dri->image->createImageFromDmaBufs2 == NULL) { > + errno = ENOSYS; > + return NULL; > + } > + > + switch(fd_data->format) { > + case GBM_FORMAT_RGB565: > + fourcc = __DRI_IMAGE_FOURCC_RGB565; > + break; > + case GBM_FORMAT_ARGB8888: > + case GBM_BO_FORMAT_ARGB8888: > + fourcc = __DRI_IMAGE_FOURCC_ARGB8888; > + break; > + case GBM_FORMAT_XRGB8888: > + case GBM_BO_FORMAT_XRGB8888: > + fourcc = __DRI_IMAGE_FOURCC_XRGB8888; > + break; > + case GBM_FORMAT_ABGR8888: > + fourcc = __DRI_IMAGE_FOURCC_ABGR8888; > + break; > + case GBM_FORMAT_XBGR8888: > + fourcc = __DRI_IMAGE_FOURCC_XBGR8888; > + break; > + default: > + errno = EINVAL; > + return NULL; > + } > + > + image = dri->image->createImageFromDmaBufs2(dri->screen, > fd_data->width, > + fd_data->height, > fourcc, > + fd_data->modifier, > + fd_data->fds, > + fd_data->num_fds, > + fd_data->strides, > + fd_data->offsets, > + 0, 0, 0, 0, > + &error, NULL); > + if (image == NULL) { > + errno = ENOSYS; > + return NULL; > + } > + > + gbm_format = fd_data->format; > + break; > + } > + > default: > errno = ENOSYS; > return NULL; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev