| 557 | struct _screen_window *window; |
| 558 | #endif |
| 559 | AppInstance() { |
| 560 | VkResult dllErr = load_vulkan_library(); |
| 561 | |
| 562 | if (dllErr != VK_SUCCESS) { |
| 563 | THROW_ERR("Failed to initialize: " API_NAME " loader is not installed, not found, or failed to load."); |
| 564 | } |
| 565 | |
| 566 | uint32_t instance_version = VK_API_VERSION_1_0; |
| 567 | if (vkEnumerateInstanceVersion) { |
| 568 | const VkResult err = vkEnumerateInstanceVersion(&instance_version); |
| 569 | if (err) THROW_VK_ERR("vkEnumerateInstanceVersion", err); |
| 570 | } |
| 571 | |
| 572 | api_version = APIVersion(instance_version); |
| 573 | // fallback to baked header version if loader returns 0 for the patch version |
| 574 | if (api_version.Patch() == 0) api_version.SetPatch(VK_HEADER_VERSION); |
| 575 | |
| 576 | AppGetInstanceExtensions(); |
| 577 | |
| 578 | const VkDebugReportCallbackCreateInfoEXT dbg_info = {VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, nullptr, |
| 579 | VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT, |
| 580 | DbgCallback}; |
| 581 | |
| 582 | const VkApplicationInfo app_info = { |
| 583 | VK_STRUCTURE_TYPE_APPLICATION_INFO, nullptr, APP_SHORT_NAME, 1, nullptr, 0, instance_version}; |
| 584 | |
| 585 | AppCompileInstanceExtensionsToEnable(); |
| 586 | |
| 587 | std::vector<const char *> inst_exts; |
| 588 | for (const auto &ext : inst_extensions) { |
| 589 | inst_exts.push_back(ext.c_str()); |
| 590 | } |
| 591 | |
| 592 | const VkInstanceCreateInfo inst_info = { |
| 593 | VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, |
| 594 | &dbg_info, |
| 595 | (CheckExtensionEnabled(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) |
| 596 | ? static_cast<VkInstanceCreateFlags>(VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR) |
| 597 | : 0), |
| 598 | &app_info, |
| 599 | 0, |
| 600 | nullptr, |
| 601 | static_cast<uint32_t>(inst_exts.size()), |
| 602 | inst_exts.data()}; |
| 603 | |
| 604 | VkResult err = vkCreateInstance(&inst_info, nullptr, &instance); |
| 605 | if (err == VK_ERROR_INCOMPATIBLE_DRIVER) { |
| 606 | std::cerr << "Cannot create " API_NAME " instance.\n"; |
| 607 | std::cerr << "This problem is often caused by a faulty installation of the " API_NAME |
| 608 | " driver or attempting to use a GPU " |
| 609 | "that does not support " API_NAME ".\n"; |
| 610 | THROW_VK_ERR("vkCreateInstance", err); |
| 611 | } else if (err) { |
| 612 | THROW_VK_ERR("vkCreateInstance", err); |
| 613 | } |
| 614 | |
| 615 | load_vulkan_instance_functions(instance); |
| 616 |
nothing calls this directly
no test coverage detected