From 529b476a9e94079ac70c0b1bac9e94cae7c74712 Mon Sep 17 00:00:00 2001 From: Roman Stratiienko Date: Wed, 23 Jun 2021 17:11:10 +0300 Subject: [PATCH] minigbm: Add bo_get_plane_fd backend hook Non-DRM drivers shouldn't rely on handles and DRM API. Add hook to allow drivers create custom implementation. Signed-off-by: Roman Stratiienko Change-Id: I458dae38f80697184070019606b125992a9aa01d --- drv.c | 5 +++++ drv_priv.h | 1 + 2 files changed, 6 insertions(+) diff --git a/drv.c b/drv.c index 452c989..bf8cad1 100644 --- a/drv.c +++ b/drv.c @@ -692,6 +692,11 @@ int drv_bo_get_plane_fd(struct bo *bo, size_t plane) if (bo->is_test_buffer) return -EINVAL; + if (bo->drv->backend->bo_get_plane_fd) { + fd = bo->drv->backend->bo_get_plane_fd(bo, plane); + return fd; + } + ret = drmPrimeHandleToFD(bo->drv->fd, bo->handle.u32, DRM_CLOEXEC | DRM_RDWR, &fd); // Older DRM implementations blocked DRM_RDWR, but gave a read/write mapping anyways diff --git a/drv_priv.h b/drv_priv.h index 337b58e..31ccfde 100644 --- a/drv_priv.h +++ b/drv_priv.h @@ -97,6 +97,7 @@ struct backend { int (*bo_unmap)(struct bo *bo, struct vma *vma); int (*bo_invalidate)(struct bo *bo, struct mapping *mapping); int (*bo_flush)(struct bo *bo, struct mapping *mapping); + int (*bo_get_plane_fd)(struct bo *bo, size_t plane); void (*resolve_format_and_use_flags)(struct driver *drv, uint32_t format, uint64_t use_flags, uint32_t *out_format, uint64_t *out_use_flags);