Создание пула команд

This commit is contained in:
parent 6a3f091190
commit b7fceb5433
2 changed files with 25 additions and 3 deletions

View File

@ -25,6 +25,7 @@ class Vulkan
VkRenderPass renderPass; // Проходы рендера VkRenderPass renderPass; // Проходы рендера
VkPipelineLayout pipelineLayout; // Раскладка конвейера VkPipelineLayout pipelineLayout; // Раскладка конвейера
VkPipeline graphicsPipeline; // Графический конвейер VkPipeline graphicsPipeline; // Графический конвейер
VkCommandPool commandPool; // Пул команд
// Структура для хранения флагов // Структура для хранения флагов
struct struct
@ -43,6 +44,7 @@ class Vulkan
VkShaderModule createShaderModule(const char * filename); // Создание шейдерного модуля VkShaderModule createShaderModule(const char * filename); // Создание шейдерного модуля
void createGraphicPipeline(); // Создание графического конвеера void createGraphicPipeline(); // Создание графического конвеера
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory); // Создание произвольного буфера данных void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory); // Создание произвольного буфера данных
void createCommandPool(); // Создание пула команд
}; };
#endif // VK_H #endif // VK_H

View File

@ -19,14 +19,17 @@ void Vulkan::init(GLFWwindow* window)
createSwapchain(window); // Создание списка показа createSwapchain(window); // Создание списка показа
createRenderpass(); // Создание проходов рендера createRenderpass(); // Создание проходов рендера
createGraphicPipeline(); // Создание графического конвейера createGraphicPipeline(); // Создание графического конвейера
createCommandPool(); // Создание пула команд
} }
// завершение работы // завершение работы
void Vulkan::destroy() void Vulkan::destroy()
{ {
vkDestroyPipeline(logicalDevice, graphicsPipeline, nullptr); vkDestroyCommandPool(logicalDevice, commandPool, nullptr); // Уничтожение командного пула
vkDestroyPipelineLayout(logicalDevice, pipelineLayout, nullptr);
vkDestroyRenderPass(logicalDevice, renderPass, nullptr); vkDestroyPipeline(logicalDevice, graphicsPipeline, nullptr); // Уничтожение графического конвейера
vkDestroyPipelineLayout(logicalDevice, pipelineLayout, nullptr); // Уничтожение раскладки графического конвейера
vkDestroyRenderPass(logicalDevice, renderPass, nullptr); // Уничтожение проходов рендера
// Уничтожение информации о изображениях списка показа // Уничтожение информации о изображениях списка показа
for (auto & imageView : swapChainImageViews) for (auto & imageView : swapChainImageViews)
@ -768,3 +771,20 @@ void Vulkan::createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryP
// Привязка выделенной памяти к буферу // Привязка выделенной памяти к буферу
vkBindBufferMemory(logicalDevice, buffer, bufferMemory, 0); vkBindBufferMemory(logicalDevice, buffer, bufferMemory, 0);
} }
// Создание пула команд
void Vulkan::createCommandPool()
{
// Информация о создаваемом командном пуле
VkCommandPoolCreateInfo poolInfo{};
poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
poolInfo.queueFamilyIndex = queue.index;
// Создание командного пула
if (vkCreateCommandPool(logicalDevice, &poolInfo, nullptr, &commandPool) != VK_SUCCESS)
{
throw std::runtime_error("Unable to create graphics command pool");
}
}