Выделение памяти под буфер
This commit is contained in:
parent
1095fc2006
commit
6a3f091190
34
src/vk.cpp
34
src/vk.cpp
|
@ -733,4 +733,38 @@ void Vulkan::createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryP
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Unable to create buffer");
|
throw std::runtime_error("Unable to create buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Требования к памяти
|
||||||
|
VkMemoryRequirements memRequirements;
|
||||||
|
vkGetBufferMemoryRequirements(logicalDevice, buffer, &memRequirements);
|
||||||
|
|
||||||
|
// Поиск индекса типа подходящей памяти
|
||||||
|
uint32_t index_memory;
|
||||||
|
for (index_memory = 0; index_memory < physicalDevice.memory.memoryTypeCount; index_memory++)
|
||||||
|
{
|
||||||
|
if ((memRequirements.memoryTypeBits & (1 << index_memory))
|
||||||
|
&& (physicalDevice.memory.memoryTypes[index_memory].propertyFlags & properties) == properties)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Если индекс равен размеру массива - поиск не удался и нужно выдать исключение
|
||||||
|
if (index_memory == physicalDevice.memory.memoryTypeCount)
|
||||||
|
throw std::runtime_error("Unable to find suitable memory type");
|
||||||
|
|
||||||
|
// Информация о выделяемой памяти
|
||||||
|
VkMemoryAllocateInfo allocInfo{};
|
||||||
|
allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||||
|
allocInfo.allocationSize = memRequirements.size;
|
||||||
|
allocInfo.memoryTypeIndex = index_memory;
|
||||||
|
|
||||||
|
// Выделение памяти
|
||||||
|
if (vkAllocateMemory(logicalDevice, &allocInfo, nullptr, &bufferMemory) != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Unable to allocate buffer memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Привязка выделенной памяти к буферу
|
||||||
|
vkBindBufferMemory(logicalDevice, buffer, bufferMemory, 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue