| 216 | } |
| 217 | |
| 218 | Backend::MemObj* VulkanBackend::onAcquire(const Tensor* tensor, StorageType storageType) { |
| 219 | MNN_ASSERT(tensor->getType().code == halide_type_float || tensor->getType().code == halide_type_int); |
| 220 | //FUNC_PRINT_ALL(tensor, p); |
| 221 | auto alignSize = getTensorSize(tensor); |
| 222 | auto MTensor = const_cast<Tensor*>(tensor); |
| 223 | auto des = TensorUtils::getDescribeOrigin(tensor); |
| 224 | if (Backend::STATIC == storageType) { |
| 225 | auto newBuffer = mRuntime->mBufferPool->alloc(alignSize); |
| 226 | auto mem = new VulkanMemRelease(mRuntime->mBufferPool.get(), newBuffer, alignSize); |
| 227 | MTensor->buffer().device = (uint64_t)(newBuffer.first); |
| 228 | des->offset = newBuffer.second; |
| 229 | return mem; |
| 230 | } |
| 231 | bool seperate = storageType == Backend::DYNAMIC_SEPERATE; |
| 232 | auto newBuffer = mCurrentDynamicBufferPool->alloc(alignSize, seperate); |
| 233 | auto mem = new VulkanMemRelease(mCurrentDynamicBufferPool, newBuffer, alignSize); |
| 234 | MTensor->buffer().device = (uint64_t)(newBuffer.first); |
| 235 | des->offset = newBuffer.second; |
| 236 | return mem; |
| 237 | } |
| 238 | bool VulkanBackend::onSelectDynamicAllocator(int index, int maxIndex) { |
| 239 | if (maxIndex > 2 || index >= 2 || index < 0) { |
| 240 | return false; |