bool VulkanContext::createBuffer()

in RenderScriptMigrationSample/app/src/main/cpp/VulkanContext.cpp [251:280]


bool VulkanContext::createBuffer(size_t size, VkFlags bufferUsage, VkFlags memoryProperties,
                                 VkBuffer* buffer, VkDeviceMemory* memory) const {
    if (buffer == nullptr || memory == nullptr) return false;

    // Create VkBuffer
    const VkBufferCreateInfo bufferCreateInfo = {
            .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
            .size = size,
            .usage = bufferUsage,
            .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
    };
    CALL_VK(vkCreateBuffer, mDevice.handle(), &bufferCreateInfo, nullptr, buffer);

    // Allocate memory for the buffer
    VkMemoryRequirements memoryRequirements;
    vkGetBufferMemoryRequirements(mDevice.handle(), *buffer, &memoryRequirements);
    const auto memoryTypeIndex =
            findMemoryType(memoryRequirements.memoryTypeBits, memoryProperties);
    RET_CHECK(memoryTypeIndex.has_value());
    const VkMemoryAllocateInfo allocateInfo = {
            .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
            .pNext = nullptr,
            .allocationSize = memoryRequirements.size,
            .memoryTypeIndex = memoryTypeIndex.value(),
    };
    CALL_VK(vkAllocateMemory, mDevice.handle(), &allocateInfo, nullptr, memory);

    vkBindBufferMemory(mDevice.handle(), *buffer, *memory, 0);
    return true;
}