| 74 | } // namespace |
| 75 | |
| 76 | VulkanContextFactory::VulkanContextFactory(uint32_t appVersionCode, int sdkVersion, bool isCustomROM) |
| 77 | { |
| 78 | if (InitVulkan() == 0) |
| 79 | { |
| 80 | LOG_ERROR_VK("Could not initialize Vulkan library."); |
| 81 | return; |
| 82 | } |
| 83 | |
| 84 | VkApplicationInfo appInfo = {}; |
| 85 | appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
| 86 | appInfo.pNext = nullptr; |
| 87 | appInfo.apiVersion = VK_MAKE_VERSION(1, 0, 0); |
| 88 | appInfo.applicationVersion = appVersionCode; |
| 89 | appInfo.engineVersion = appVersionCode; |
| 90 | appInfo.pApplicationName = "CoMaps"; |
| 91 | appInfo.pEngineName = "Drape Engine"; |
| 92 | |
| 93 | bool enableDiagnostics = false; |
| 94 | #ifdef ENABLE_VULKAN_DIAGNOSTICS |
| 95 | enableDiagnostics = true; |
| 96 | #endif |
| 97 | m_layers = make_unique_dp<dp::vulkan::Layers>(enableDiagnostics); |
| 98 | |
| 99 | VkInstanceCreateInfo instanceCreateInfo = {}; |
| 100 | instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; |
| 101 | instanceCreateInfo.pNext = nullptr; |
| 102 | instanceCreateInfo.pApplicationInfo = &appInfo; |
| 103 | instanceCreateInfo.enabledExtensionCount = m_layers->GetInstanceExtensionsCount(); |
| 104 | instanceCreateInfo.ppEnabledExtensionNames = m_layers->GetInstanceExtensions(); |
| 105 | instanceCreateInfo.enabledLayerCount = m_layers->GetInstanceLayersCount(); |
| 106 | instanceCreateInfo.ppEnabledLayerNames = m_layers->GetInstanceLayers(); |
| 107 | #if defined(OMIM_OS_MAC) |
| 108 | instanceCreateInfo.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; |
| 109 | #endif |
| 110 | |
| 111 | // Enable extra validation features. |
| 112 | VkValidationFeaturesEXT validationFeatures = {}; |
| 113 | VkValidationFeatureEnableEXT const validationFeaturesEnabled[] = { |
| 114 | VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT}; |
| 115 | if (m_layers->IsValidationFeaturesEnabled()) |
| 116 | { |
| 117 | validationFeatures.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT; |
| 118 | validationFeatures.pNext = nullptr; |
| 119 | validationFeatures.enabledValidationFeatureCount = ARRAY_SIZE(validationFeaturesEnabled), |
| 120 | validationFeatures.pEnabledValidationFeatures = validationFeaturesEnabled; |
| 121 | |
| 122 | instanceCreateInfo.pNext = &validationFeatures; |
| 123 | } |
| 124 | |
| 125 | VkResult statusCode; |
| 126 | statusCode = vkCreateInstance(&instanceCreateInfo, nullptr, &m_vulkanInstance); |
| 127 | if (statusCode != VK_SUCCESS) |
| 128 | { |
| 129 | LOG_ERROR_VK_CALL(vkCreateInstance, statusCode); |
| 130 | return; |
| 131 | } |
| 132 | |
| 133 | uint32_t gpuCount = 0; |
nothing calls this directly
no test coverage detected