2019-04-17 10:49:11 +08:00
|
|
|
//
|
|
|
|
// VulkanBuffer.hpp
|
|
|
|
// MNN
|
|
|
|
//
|
|
|
|
// Created by MNN on 2019/01/31.
|
|
|
|
// Copyright © 2018, Alibaba Group Holding Limited
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef VulkanBuffer_hpp
|
|
|
|
#define VulkanBuffer_hpp
|
2019-12-27 22:16:57 +08:00
|
|
|
#include "backend/vulkan/component/VulkanMemoryPool.hpp"
|
2019-04-17 10:49:11 +08:00
|
|
|
namespace MNN {
|
|
|
|
class VulkanBuffer : public NonCopyable {
|
|
|
|
public:
|
|
|
|
VulkanBuffer(const VulkanMemoryPool& pool, bool seperate, size_t size, const void* hostData = nullptr,
|
|
|
|
VkBufferUsageFlags usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
|
|
|
|
VkSharingMode shared = VK_SHARING_MODE_EXCLUSIVE,
|
|
|
|
VkFlags requirements_mask = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
|
|
|
|
|
|
|
|
virtual ~VulkanBuffer();
|
|
|
|
|
|
|
|
VkBuffer buffer() const {
|
|
|
|
return mBuffer;
|
|
|
|
}
|
|
|
|
size_t size() const {
|
|
|
|
return mSize;
|
|
|
|
}
|
|
|
|
void* map(int start = 0, int size = -1) const;
|
|
|
|
void unmap() const;
|
|
|
|
|
|
|
|
void flush(bool write, int start, int size) const;
|
|
|
|
|
|
|
|
void release();
|
|
|
|
|
|
|
|
private:
|
|
|
|
const VulkanMemoryPool& mPool;
|
|
|
|
const VulkanMemory* mMemory;
|
|
|
|
VkBuffer mBuffer;
|
|
|
|
size_t mSize;
|
|
|
|
bool mReleased = false;
|
|
|
|
};
|
|
|
|
} // namespace MNN
|
|
|
|
|
|
|
|
#endif /* VulkanBuffer_hpp */
|