From 1c4ff097fc4ba8d9e39b9d2252ece05340d43403 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 360ed64..fabcba0 100644 --- a/drv.c +++ b/drv.c @@ -663,6 +663,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->handles[plane].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 9fa84a5..7b31d32 100644 --- a/drv_priv.h +++ b/drv_priv.h @@ -94,6 +94,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);