MCPcopy Create free account
hub / github.com/KomputeProject/kompute / allocateBindMemory

Method allocateBindMemory

src/Tensor.cpp:462–505  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

460}
461
462void
463Tensor::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
507void
508Tensor::destroy()

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected