11#include <promeki/config.h>
12#if PROMEKI_ENABLE_DMABUF
20PROMEKI_NAMESPACE_BEGIN
31enum class DmabufFdOwnership {
108class DmabufBufferImpl :
public BufferImpl {
110 PROMEKI_SHARED_DERIVED(DmabufBufferImpl)
128 DmabufBufferImpl(
const MemSpace &ms,
int fd,
size_t bytes,
size_t align, DmabufFdOwnership ownership);
131 ~DmabufBufferImpl()
override;
133 MemSpace memSpace()
const override {
return _memSpace; }
134 size_t allocSize()
const override {
return _allocSize; }
135 size_t align()
const override {
return _align; }
145 int dmabufFd()
const {
return _fd; }
148 void *mappedHostData()
const override {
return _hostMap; }
150 BufferRequest mapAcquire(MemDomain domain, MapFlags flags)
override;
151 BufferRequest mapRelease(MemDomain domain)
override;
154 Error fill(
char value,
size_t offset,
size_t bytes)
override;
157 Error copyFromHost(
const void *src,
size_t bytes,
size_t offset)
override;
160 bool canClone()
const override {
return false; }
169 void dmabufSync(uint64_t syncFlags)
const;
172 size_t _allocSize = 0;
178 mutable Mutex _hostMutex;
179 void *_hostMap =
nullptr;
180 uint64_t _hostSyncFlags = 0;