| 389 | } |
| 390 | |
| 391 | VkResult createDevice2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 deviceFeatures2, uint32_t graphicsFamily, VkDevice* device) |
| 392 | { |
| 393 | const std::vector<const char*> extensions = |
| 394 | { |
| 395 | VK_KHR_SWAPCHAIN_EXTENSION_NAME, |
| 396 | VK_KHR_MAINTENANCE3_EXTENSION_NAME, |
| 397 | VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, |
| 398 | // for legacy drivers Vulkan 1.1 |
| 399 | VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME |
| 400 | }; |
| 401 | |
| 402 | const float queuePriority = 1.0f; |
| 403 | |
| 404 | const VkDeviceQueueCreateInfo qci = |
| 405 | { |
| 406 | .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, |
| 407 | .pNext = nullptr, |
| 408 | .flags = 0, |
| 409 | .queueFamilyIndex = graphicsFamily, |
| 410 | .queueCount = 1, |
| 411 | .pQueuePriorities = &queuePriority |
| 412 | }; |
| 413 | |
| 414 | const VkDeviceCreateInfo ci = |
| 415 | { |
| 416 | .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, |
| 417 | .pNext = &deviceFeatures2, |
| 418 | .flags = 0, |
| 419 | .queueCreateInfoCount = 1, |
| 420 | .pQueueCreateInfos = &qci, |
| 421 | .enabledLayerCount = 0, |
| 422 | .ppEnabledLayerNames = nullptr, |
| 423 | .enabledExtensionCount = static_cast<uint32_t>(extensions.size()), |
| 424 | .ppEnabledExtensionNames = extensions.data(), |
| 425 | .pEnabledFeatures = nullptr |
| 426 | }; |
| 427 | |
| 428 | return vkCreateDevice(physicalDevice, &ci, nullptr, device); |
| 429 | } |
| 430 | |
| 431 | VkResult createDevice2WithCompute(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 deviceFeatures2, uint32_t graphicsFamily, uint32_t computeFamily, VkDevice* device) |
| 432 | { |
no outgoing calls
no test coverage detected