| 460 | } |
| 461 | |
| 462 | void |
| 463 | Tensor::allocateBindMemory(std::shared_ptr<vk::Buffer> buffer, |
| 464 | std::shared_ptr<vk::DeviceMemory> memory, |
| 465 | vk::MemoryPropertyFlags memoryPropertyFlags) |
| 466 | { |
| 467 | |
| 468 | KP_LOG_DEBUG("Kompute Tensor allocating and binding memory"); |
| 469 | |
| 470 | vk::PhysicalDeviceMemoryProperties memoryProperties = |
| 471 | this->mPhysicalDevice->getMemoryProperties(); |
| 472 | |
| 473 | vk::MemoryRequirements memoryRequirements = |
| 474 | this->mDevice->getBufferMemoryRequirements(*buffer); |
| 475 | |
| 476 | uint32_t memoryTypeIndex = -1; |
| 477 | bool memoryTypeIndexFound = false; |
| 478 | for (uint32_t i = 0; i < memoryProperties.memoryTypeCount; i++) { |
| 479 | if (memoryRequirements.memoryTypeBits & (1 << i)) { |
| 480 | if (((memoryProperties.memoryTypes[i]).propertyFlags & |
| 481 | memoryPropertyFlags) == memoryPropertyFlags) { |
| 482 | memoryTypeIndex = i; |
| 483 | memoryTypeIndexFound = true; |
| 484 | break; |
| 485 | } |
| 486 | } |
| 487 | } |
| 488 | if (!memoryTypeIndexFound) { |
| 489 | throw std::runtime_error( |
| 490 | "Memory type index for buffer creation not found"); |
| 491 | } |
| 492 | |
| 493 | KP_LOG_DEBUG( |
| 494 | "Kompute Tensor allocating memory index: {}, size {}, flags: {}", |
| 495 | memoryTypeIndex, |
| 496 | memoryRequirements.size, |
| 497 | vk::to_string(memoryPropertyFlags)); |
| 498 | |
| 499 | vk::MemoryAllocateInfo memoryAllocateInfo(memoryRequirements.size, |
| 500 | memoryTypeIndex); |
| 501 | |
| 502 | this->mDevice->allocateMemory(&memoryAllocateInfo, nullptr, memory.get()); |
| 503 | |
| 504 | this->mDevice->bindBufferMemory(*buffer, *memory, 0); |
| 505 | } |
| 506 | |
| 507 | void |
| 508 | Tensor::destroy() |
no outgoing calls
no test coverage detected