| 251 | } |
| 252 | |
| 253 | void vkRenderer::createLogicalDevice() { |
| 254 | QueueFamilyIndices indices = findQueueFamilies(physicalDevice); |
| 255 | |
| 256 | std::vector<VkDeviceQueueCreateInfo> queueCreateInfos; |
| 257 | std::set<int> uniqueQueueFamilies = {indices.graphicsFamily, indices.presentFamily}; |
| 258 | |
| 259 | float queuePriority = 1.0f; |
| 260 | for (int queueFamily : uniqueQueueFamilies) { |
| 261 | VkDeviceQueueCreateInfo queueCreateInfo = {}; |
| 262 | queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; |
| 263 | queueCreateInfo.queueFamilyIndex = queueFamily; |
| 264 | queueCreateInfo.queueCount = 1; |
| 265 | queueCreateInfo.pQueuePriorities = &queuePriority; |
| 266 | queueCreateInfos.push_back(queueCreateInfo); |
| 267 | } |
| 268 | |
| 269 | VkPhysicalDeviceFeatures deviceFeatures = {}; |
| 270 | |
| 271 | VkDeviceCreateInfo createInfo = {}; |
| 272 | createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; |
| 273 | |
| 274 | createInfo.queueCreateInfoCount = static_cast<uint32_t>(queueCreateInfos.size()); |
| 275 | createInfo.pQueueCreateInfos = queueCreateInfos.data(); |
| 276 | |
| 277 | createInfo.pEnabledFeatures = &deviceFeatures; |
| 278 | |
| 279 | createInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size()); |
| 280 | createInfo.ppEnabledExtensionNames = deviceExtensions.data(); |
| 281 | |
| 282 | if (enableValidationLayers) { |
| 283 | createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); |
| 284 | createInfo.ppEnabledLayerNames = validationLayers.data(); |
| 285 | } else { |
| 286 | createInfo.enabledLayerCount = 0; |
| 287 | } |
| 288 | |
| 289 | if (vkCreateDevice(physicalDevice, &createInfo, nullptr, &device) != VK_SUCCESS) { |
| 290 | throw std::runtime_error("failed to create logical device!"); |
| 291 | } |
| 292 | |
| 293 | vkGetDeviceQueue(device, indices.graphicsFamily, 0, &graphicsQueue); |
| 294 | vkGetDeviceQueue(device, indices.presentFamily, 0, &presentQueue); |
| 295 | } |
| 296 | |
| 297 | void vkRenderer::createSwapChain() { |
| 298 | SwapChainSupportDetails swapChainSupport = querySwapChainSupport(physicalDevice); |
nothing calls this directly
no outgoing calls
no test coverage detected