MCPcopy Create free account
hub / github.com/alibaba/MNN / VulkanBuffer

Method VulkanBuffer

source/backend/vulkan/component/VulkanBuffer.cpp:13–35  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11namespace MNN {
12
13VulkanBuffer::VulkanBuffer(const VulkanMemoryPool& pool, bool separate, size_t size, const void* hostData,
14 VkBufferUsageFlags usage, VkSharingMode shared, VkFlags requirements_mask)
15 : mPool(pool) {
16 MNN_ASSERT(size > 0);
17 mSize = size;
18 mShared = shared;
19 mBuffer = const_cast<VulkanMemoryPool&>(mPool).allocBuffer(size, usage, shared);
20 mUsage = usage;
21
22 VkMemoryRequirements memReq;
23 mPool.device().getBufferMemoryRequirements(mBuffer, memReq);
24 mMemory = const_cast<VulkanMemoryPool&>(mPool).allocMemory(memReq, requirements_mask, separate);
25 // FUNC_PRINT(mMemory->type());
26 auto realMem = (VulkanMemory*)mMemory.first;
27
28 if (nullptr != hostData) {
29 void* data = nullptr;
30 CALL_VK(mPool.device().mapMemory(realMem->get(), mMemory.second, size, 0 /*flag, not used*/, &data));
31 ::memcpy(data, hostData, size);
32 mPool.device().unmapMemory(realMem->get());
33 }
34 CALL_VK(mPool.device().bindBufferMemory(mBuffer, realMem->get(), mMemory.second));
35}
36
37VulkanBuffer::~VulkanBuffer() {
38 const_cast<VulkanMemoryPool&>(mPool).returnBuffer(mBuffer, mSize, mUsage, mShared);

Callers

nothing calls this directly

Calls 7

mapMemoryMethod · 0.80
unmapMemoryMethod · 0.80
bindBufferMemoryMethod · 0.80
allocBufferMethod · 0.45
allocMemoryMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected