Создание логического устройства
This commit is contained in:
parent
f53f481f78
commit
4e2c94a600
|
@ -14,6 +14,8 @@ class Vulkan
|
||||||
private:
|
private:
|
||||||
VkInstance instance; // Экземпляр Vulkan
|
VkInstance instance; // Экземпляр Vulkan
|
||||||
PhysicalDevice physicalDevice; // Физическое устройство
|
PhysicalDevice physicalDevice; // Физическое устройство
|
||||||
|
VkDevice logicalDevice; // логическое устройство
|
||||||
|
VkQueue graphicalQueue; // очередь для работы с графикой
|
||||||
// Структура для хранения флагов
|
// Структура для хранения флагов
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -23,6 +25,7 @@ class Vulkan
|
||||||
|
|
||||||
void createInstance(); // Создание экземпяра Vulkan
|
void createInstance(); // Создание экземпяра Vulkan
|
||||||
void selectPhysicalDevice(); // Выбор физического устройства
|
void selectPhysicalDevice(); // Выбор физического устройства
|
||||||
|
void createLogicalDevice(); // Создание логического устройства
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VK_H
|
#endif // VK_H
|
33
src/vk.cpp
33
src/vk.cpp
|
@ -9,11 +9,13 @@ void Vulkan::init()
|
||||||
{
|
{
|
||||||
createInstance(); // Создание экземпяра
|
createInstance(); // Создание экземпяра
|
||||||
selectPhysicalDevice(); // Выбор физического устройства
|
selectPhysicalDevice(); // Выбор физического устройства
|
||||||
|
createLogicalDevice(); // Создание физического устройства
|
||||||
}
|
}
|
||||||
|
|
||||||
// завершение работы
|
// завершение работы
|
||||||
void Vulkan::destroy()
|
void Vulkan::destroy()
|
||||||
{
|
{
|
||||||
|
vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства
|
||||||
vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan
|
vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,3 +175,34 @@ void Vulkan::selectPhysicalDevice()
|
||||||
throw std::runtime_error("failed to find a suitable GPU!");
|
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