Создание логического устройства
This commit is contained in:
parent
f53f481f78
commit
4e2c94a600
|
@ -14,6 +14,8 @@ class Vulkan
|
|||
private:
|
||||
VkInstance instance; // Экземпляр Vulkan
|
||||
PhysicalDevice physicalDevice; // Физическое устройство
|
||||
VkDevice logicalDevice; // логическое устройство
|
||||
VkQueue graphicalQueue; // очередь для работы с графикой
|
||||
// Структура для хранения флагов
|
||||
struct
|
||||
{
|
||||
|
@ -23,6 +25,7 @@ class Vulkan
|
|||
|
||||
void createInstance(); // Создание экземпяра Vulkan
|
||||
void selectPhysicalDevice(); // Выбор физического устройства
|
||||
void createLogicalDevice(); // Создание логического устройства
|
||||
};
|
||||
|
||||
#endif // VK_H
|
33
src/vk.cpp
33
src/vk.cpp
|
@ -9,11 +9,13 @@ void Vulkan::init()
|
|||
{
|
||||
createInstance(); // Создание экземпяра
|
||||
selectPhysicalDevice(); // Выбор физического устройства
|
||||
createLogicalDevice(); // Создание физического устройства
|
||||
}
|
||||
|
||||
// завершение работы
|
||||
void Vulkan::destroy()
|
||||
{
|
||||
vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства
|
||||
vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan
|
||||
}
|
||||
|
||||
|
@ -173,3 +175,34 @@ void Vulkan::selectPhysicalDevice()
|
|||
throw std::runtime_error("failed to find a suitable GPU!");
|
||||
}
|
||||
}
|
||||
|
||||
void Vulkan::createLogicalDevice()
|
||||
{
|
||||
// Приоритеты очередей
|
||||
float priority[1] = {1};
|
||||
// Данные о необходимых очередях
|
||||
VkDeviceQueueCreateInfo queueCreateInfo{};
|
||||
queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
queueCreateInfo.queueFamilyIndex = physicalDevice.pickQueueFamily(VK_QUEUE_GRAPHICS_BIT);
|
||||
queueCreateInfo.queueCount = 1;
|
||||
queueCreateInfo.pQueuePriorities = priority;
|
||||
|
||||
// Данные о создаваемом логическом устройстве
|
||||
VkDeviceCreateInfo createInfo{};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
createInfo.pQueueCreateInfos = &queueCreateInfo;
|
||||
createInfo.queueCreateInfoCount = 1;
|
||||
createInfo.enabledExtensionCount = 0;
|
||||
createInfo.enabledLayerCount = 0;
|
||||
createInfo.pEnabledFeatures = nullptr;//&physicalDevice.features;
|
||||
|
||||
// Создание логического устройства
|
||||
if (vkCreateDevice(physicalDevice.device, &createInfo, nullptr, &logicalDevice) != VK_SUCCESS)
|
||||
{
|
||||
// Отправим исключение в случае ошибок создания лог. устройства
|
||||
throw std::runtime_error("failed to create logical device!");
|
||||
}
|
||||
|
||||
// Получим дескриптор очереди логического устройства
|
||||
vkGetDeviceQueue(logicalDevice, queueCreateInfo.queueFamilyIndex, 0, &graphicalQueue);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue