| 183 | } |
| 184 | |
| 185 | VkResult CreateInstance(VkInstance* vkInstanceOut, |
| 186 | uint32_t api_version, |
| 187 | const char** extensionNames, uint16_t extensionNameCount, |
| 188 | const char** validationLayers, uint16_t validationLayerCount, |
| 189 | const char** validationLayerExtensions, uint16_t validationLayerExtensionCount) |
| 190 | { |
| 191 | VkApplicationInfo vk_application_info = {}; |
| 192 | VkInstanceCreateInfo vk_instance_create_info = {}; |
| 193 | dmArray<const char*> vk_required_extensions; |
| 194 | |
| 195 | vk_application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
| 196 | vk_application_info.pApplicationName = "Defold"; |
| 197 | vk_application_info.pEngineName = "Defold Engine"; |
| 198 | vk_application_info.applicationVersion = api_version; |
| 199 | vk_application_info.engineVersion = api_version; |
| 200 | vk_application_info.apiVersion = api_version; |
| 201 | |
| 202 | vk_required_extensions.SetCapacity(extensionNameCount + validationLayerExtensionCount); |
| 203 | |
| 204 | for (uint16_t i = 0; i < extensionNameCount; ++i) |
| 205 | { |
| 206 | vk_required_extensions.Push(extensionNames[i]); |
| 207 | } |
| 208 | |
| 209 | int32_t enabled_layer_count = 0; |
| 210 | dmArray<VkExtensionProperties> extensions; |
| 211 | GetExtensions(extensions); |
| 212 | |
| 213 | AddIfSupported(extensions, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, vk_required_extensions); |
| 214 | AddIfSupported(extensions, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, vk_required_extensions); // VK_EXT_fragment_shader_interlock |
| 215 | |
| 216 | #ifdef __MACH__ |
| 217 | static const char* VK_EXT_metal_objects_str = "VK_EXT_metal_objects"; |
| 218 | AddIfSupported(extensions, VK_EXT_metal_objects_str, vk_required_extensions); |
| 219 | #else |
| 220 | static const char* VK_KHR_portability_enumeration_str = "VK_KHR_portability_enumeration"; |
| 221 | AddIfSupported(extensions, VK_KHR_portability_enumeration_str, vk_required_extensions); |
| 222 | #endif |
| 223 | |
| 224 | if (validationLayerCount > 0) |
| 225 | { |
| 226 | if (GetValidationSupport(validationLayers, validationLayerCount)) |
| 227 | { |
| 228 | enabled_layer_count = validationLayerCount; |
| 229 | |
| 230 | for (uint16_t i=0; i < validationLayerExtensionCount; ++i) |
| 231 | { |
| 232 | AddIfSupported(extensions, validationLayerExtensions[i], vk_required_extensions); |
| 233 | } |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | if (!ValidateRequiredExtensions(extensions, vk_required_extensions)) |
| 238 | { |
| 239 | return VK_ERROR_EXTENSION_NOT_PRESENT; |
| 240 | } |
| 241 | |
| 242 | vk_instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; |
no test coverage detected