| 861 | // END DEVICE SUITABILITY |
| 862 | |
| 863 | void HelloVK::createLogicalDeviceAndQueue() { |
| 864 | QueueFamilyIndices indices = findQueueFamilies(physicalDevice); |
| 865 | std::vector<VkDeviceQueueCreateInfo> queueCreateInfos; |
| 866 | std::set<uint32_t> uniqueQueueFamilies = {indices.graphicsFamily.value(), |
| 867 | indices.presentFamily.value()}; |
| 868 | float queuePriority = 1.0f; |
| 869 | for (uint32_t queueFamily : uniqueQueueFamilies) { |
| 870 | VkDeviceQueueCreateInfo queueCreateInfo{}; |
| 871 | queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; |
| 872 | queueCreateInfo.queueFamilyIndex = queueFamily; |
| 873 | queueCreateInfo.queueCount = 1; |
| 874 | queueCreateInfo.pQueuePriorities = &queuePriority; |
| 875 | queueCreateInfos.push_back(queueCreateInfo); |
| 876 | } |
| 877 | |
| 878 | VkPhysicalDeviceFeatures deviceFeatures{}; |
| 879 | |
| 880 | VkDeviceCreateInfo createInfo{}; |
| 881 | createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; |
| 882 | createInfo.queueCreateInfoCount = |
| 883 | static_cast<uint32_t>(queueCreateInfos.size()); |
| 884 | createInfo.pQueueCreateInfos = queueCreateInfos.data(); |
| 885 | createInfo.pEnabledFeatures = &deviceFeatures; |
| 886 | createInfo.enabledExtensionCount = |
| 887 | static_cast<uint32_t>(deviceExtensions.size()); |
| 888 | createInfo.ppEnabledExtensionNames = deviceExtensions.data(); |
| 889 | if (enableValidationLayers) { |
| 890 | createInfo.enabledLayerCount = |
| 891 | static_cast<uint32_t>(validationLayers.size()); |
| 892 | createInfo.ppEnabledLayerNames = validationLayers.data(); |
| 893 | } else { |
| 894 | createInfo.enabledLayerCount = 0; |
| 895 | } |
| 896 | |
| 897 | VK_CHECK(vkCreateDevice(physicalDevice, &createInfo, nullptr, &device)); |
| 898 | |
| 899 | vkGetDeviceQueue(device, indices.graphicsFamily.value(), 0, &graphicsQueue); |
| 900 | vkGetDeviceQueue(device, indices.presentFamily.value(), 0, &presentQueue); |
| 901 | } |
| 902 | |
| 903 | VkExtent2D HelloVK::chooseSwapExtent( |
| 904 | const VkSurfaceCapabilitiesKHR& capabilities) { |