implement endDataPtr to unmap gbm buffer

This commit is contained in:
UjinT34 2024-07-12 15:03:13 +03:00
parent 8857545311
commit 301d2bd2e0
2 changed files with 12 additions and 1 deletions

View File

@ -21,6 +21,7 @@ namespace Aquamarine {
virtual bool good();
virtual SDMABUFAttrs dmabuf();
virtual std::tuple<uint8_t*, uint32_t, size_t> beginDataPtr(uint32_t flags);
virtual void endDataPtr();
private:
CGBMBuffer(const SAllocatorBufferParams& params, Hyprutils::Memory::CWeakPointer<CGBMAllocator> allocator_, Hyprutils::Memory::CSharedPointer<CSwapchain> swapchain);

View File

@ -194,12 +194,22 @@ SDMABUFAttrs Aquamarine::CGBMBuffer::dmabuf() {
std::tuple<uint8_t*, uint32_t, size_t> Aquamarine::CGBMBuffer::beginDataPtr(uint32_t flags) {
uint32_t dst_stride = 0;
if (!boBuffer)
if (boBuffer)
allocator->backend->log(AQ_LOG_ERROR, "beginDataPtr is called a second time without calling endDataPtr first. Returning old mapping");
else
boBuffer = gbm_bo_map(bo, 0, 0, attrs.size.x, attrs.size.y, flags, &dst_stride, &gboMapping);
// FIXME: assumes a 32-bit pixel format
return {(uint8_t*)boBuffer, attrs.format, attrs.size.x * attrs.size.y * 4};
}
void Aquamarine::CGBMBuffer::endDataPtr() {
if (gboMapping) {
gbm_bo_unmap(bo, gboMapping);
gboMapping = nullptr;
boBuffer = nullptr;
}
}
CGBMAllocator::~CGBMAllocator() {
if (gbmDevice)
gbm_device_destroy(gbmDevice);