1
0

Selecting logical devices en queues

This commit is contained in:
2021-11-24 17:06:41 +01:00
parent 54227af8b9
commit 85346d98c7
4 changed files with 52 additions and 6 deletions

View File

@@ -1,7 +1,6 @@
/*
Following the vulkan tutorial on :
https://vulkan-tutorial.com/en/Drawing_a_triangle/Setup/Instance
https://vulkan-tutorial.com/en/Drawing_a_triangle/Presentation/Window_surface
*/
#define GLFW_INCLUDE_VULKAN
@@ -12,8 +11,7 @@
#include <vector>
#include <cstring>
#include <optional>
const uint32_t WIDTH = 800;
const uint32_t HEIGHT = 600;
@@ -45,6 +43,9 @@ class HelloTriangleApplication{
VkInstance instance;
VkDebugUtilsMessengerEXT debugMessenger;
VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
VkDevice device;
VkQueue graphicsQueue;
void initWindow(){
glfwInit();
@@ -59,8 +60,49 @@ class HelloTriangleApplication{
createInstance();
setupDebugMessenger();
pickPhysicalDevice();
createLogicalDevice();
}
void createLogicalDevice(){
QueueFamilyIndices indices = findQueueFamilies(physicalDevice);
VkDeviceQueueCreateInfo queueCreateInfo {};
queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queueCreateInfo.queueFamilyIndex = indices.graphicsFamily.value();
queueCreateInfo.queueCount = 1;
float queuePriority = 1.0f;
queueCreateInfo.pQueuePriorities = &queuePriority;
VkPhysicalDeviceFeatures deviceFeatures{};
VkDeviceCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
createInfo.queueCreateInfoCount = 1;
createInfo.pEnabledFeatures = &deviceFeatures;
createInfo.enabledExtensionCount = 0;
if(enableValidationLayers){
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
createInfo.ppEnabledLayerNames = validationLayers.data();
} else{
createInfo.enabledLayerCount = 0 ;
}
if (vkCreateDevice(physicalDevice, &createInfo, nullptr, &device) != VK_SUCCESS){
throw std::runtime_error("failed to create logical device");
}
vkGetDeviceQueue(device, indices.graphicsFamily.value(), 0 , &graphicsQueue);
}
void pickPhysicalDevice(){
uint32_t deviceCount = 0;
vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr);
@@ -255,6 +297,7 @@ class HelloTriangleApplication{
}
void cleanup(){
vkDestroyDevice(device, nullptr);
if(enableValidationLayers){
DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr);
}