| 385 | } |
| 386 | |
| 387 | void VulkanBaseApp::createInstance() |
| 388 | { |
| 389 | if (m_enableValidation && !supportsValidationLayers()) { |
| 390 | throw std::runtime_error("Validation requested, but not supported!"); |
| 391 | } |
| 392 | |
| 393 | VkApplicationInfo appInfo = {}; |
| 394 | appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
| 395 | appInfo.pApplicationName = m_appName.c_str(); |
| 396 | appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); |
| 397 | appInfo.pEngineName = "No Engine"; |
| 398 | appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); |
| 399 | appInfo.apiVersion = VK_API_VERSION_1_2; |
| 400 | |
| 401 | VkInstanceCreateInfo createInfo = {}; |
| 402 | createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; |
| 403 | createInfo.pApplicationInfo = &appInfo; |
| 404 | |
| 405 | std::vector<const char *> exts = getRequiredExtensions(); |
| 406 | |
| 407 | { |
| 408 | uint32_t glfwExtensionCount = 0; |
| 409 | const char **glfwExtensions; |
| 410 | |
| 411 | glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); |
| 412 | |
| 413 | exts.insert(exts.begin(), glfwExtensions, glfwExtensions + glfwExtensionCount); |
| 414 | |
| 415 | if (m_enableValidation) { |
| 416 | exts.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); |
| 417 | } |
| 418 | } |
| 419 | |
| 420 | createInfo.enabledExtensionCount = static_cast<uint32_t>(exts.size()); |
| 421 | createInfo.ppEnabledExtensionNames = exts.data(); |
| 422 | VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {}; |
| 423 | if (m_enableValidation) { |
| 424 | createInfo.enabledLayerCount = static_cast<uint32_t>(countof(validationLayers)); |
| 425 | createInfo.ppEnabledLayerNames = validationLayers; |
| 426 | |
| 427 | debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; |
| 428 | debugCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |
| 429 | | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
| 430 | | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; |
| 431 | debugCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
| 432 | | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
| 433 | | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; |
| 434 | debugCreateInfo.pfnUserCallback = debugCallback; |
| 435 | |
| 436 | createInfo.pNext = &debugCreateInfo; |
| 437 | } |
| 438 | else { |
| 439 | createInfo.enabledLayerCount = 0; |
| 440 | createInfo.pNext = nullptr; |
| 441 | } |
| 442 | |
| 443 | if (vkCreateInstance(&createInfo, nullptr, &m_instance) != VK_SUCCESS) { |
| 444 | throw std::runtime_error("Failed to create Vulkan instance!"); |
nothing calls this directly
no test coverage detected