godot: Vulkan Driver doesn't work on drivers that lack cubemap array support, such as iOS simulator and 1st-gen iPad Pro
Godot version
4.0 stable
System information
Mac OS Monterey (12.6), Vulkan API 1.2.231, iOS 16.2 Simulator (iPhone 14 Pro), Intel chip CPU
Issue description
When trying to export an empty game to run in the Xcode simulator, it gives an error:
USER ERROR: Condition "!_start_success" is true. Returning: false
USER ERROR: Unable to create DisplayServer, all display drivers failed.
USER ERROR: Failed to create Vulkan window.
Should that be normal? Since on my Desktop running the application it works normally
full log:
2023-03-02 08:15:14.046921-0300 EmptyProject40stableMobile[21879:415340] Metal GPU Frame Capture Enabled
2023-03-02 08:15:14.047283-0300 EmptyProject40stableMobile[21879:415340] Metal API Validation Enabled
*********** main.m
running app main
2023-03-02 08:15:14.164637-0300 EmptyProject40stableMobile[21879:415340] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)")
2023-03-02 08:15:14.164846-0300 EmptyProject40stableMobile[21879:415340] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)")
Path: /Users/gustavomaciel/Library/Developer/CoreSimulator/Devices/91040C82-2B49-40F9-8FB2-E8BEE67EE6B6/data/Containers/Bundle/Application/17A2E2CE-D93E-4B79-9907-8D6B2912F4BB/EmptyProject40stableMobile.app
godot_ios /Users/gustavomaciel/Library/Developer/CoreSimulator/Devices/91040C82-2B49-40F9-8FB2-E8BEE67EE6B6/data/Containers/Bundle/Application/17A2E2CE-D93E-4B79-9907-8D6B2912F4BB/EmptyProject40stableMobile.app/EmptyProject40stableMobile
cwd /Users/gustavomaciel/Library/Developer/CoreSimulator/Devices/91040C82-2B49-40F9-8FB2-E8BEE67EE6B6/data/Containers/Bundle/Application/17A2E2CE-D93E-4B79-9907-8D6B2912F4BB/EmptyProject40stableMobile.app
os created
setup 0
******** setting up keyboard input view
******** adding observer for keyboard show/hide
2023-03-02 08:15:14.336630-0300 EmptyProject40stableMobile[21879:415340] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x6000016581c0> F8BB1C28-BAE8-11D6-9C31-00039315CD46
start animation!
2023-03-02 08:15:14.398352-0300 EmptyProject40stableMobile[21879:415340] USER ERROR: AudioOutputUnitStart failed, code: -50
2023-03-02 08:15:14.398488-0300 EmptyProject40stableMobile[21879:415340] at: start (drivers/coreaudio/audio_driver_coreaudio.cpp:251)
USER ERROR: AudioOutputUnitStart failed, code: -50
at: start (drivers/coreaudio/audio_driver_coreaudio.cpp:251)
2023-03-02 08:15:14.403985-0300 EmptyProject40stableMobile[21879:415340] Godot Engine v4.0.stable.official.92bee43ad - https://godotengine.org
Godot Engine v4.0.stable.official.92bee43ad - https://godotengine.org
[mvk-info] MoltenVK version 1.2.0, supporting Vulkan version 1.2.231.
The following 82 Vulkan extensions are supported:
VK_KHR_16bit_storage v1
VK_KHR_8bit_storage v1
VK_KHR_bind_memory2 v1
VK_KHR_buffer_device_address v1
VK_KHR_create_renderpass2 v1
VK_KHR_dedicated_allocation v3
VK_KHR_depth_stencil_resolve v1
VK_KHR_descriptor_update_template v1
VK_KHR_device_group v4
VK_KHR_device_group_creation v1
VK_KHR_driver_properties v1
VK_KHR_dynamic_rendering v1
VK_KHR_external_fence v1
VK_KHR_external_fence_capabilities v1
VK_KHR_external_memory v1
VK_KHR_external_memory_capabilities v1
VK_KHR_external_semaphore v1
VK_KHR_external_semaphore_capabilities v1
VK_KHR_fragment_shader_barycentric v1
VK_KHR_get_memory_requirements2 v1
VK_KHR_get_physical_device_properties2 v2
VK_KHR_get_surface_capabilities2 v1
VK_KHR_imageless_framebuffer v1
VK_KHR_image_format_list v1
VK_KHR_maintenance1 v2
VK_KHR_maintenance2 v1
VK_KHR_maintenance3 v1
VK_KHR_multiview v1
VK_KHR_portability_subset v1
VK_KHR_push_descriptor v2
VK_KHR_relaxed_block_layout v1
VK_KHR_sampler_mirror_clamp_to_edge v3
VK_KHR_sampler_ycbcr_conversion v14
VK_KHR_separate_depth_stencil_layouts v1
VK_KHR_shader_draw_parameters v1
VK_KHR_shader_float_controls v4
VK_KHR_shader_float16_int8 v1
VK_KHR_shader_subgroup_extended_types v1
VK_KHR_spirv_1_4 v1
VK_KHR_storage_buffer_storage_class v1
VK_KHR_surface v25
VK_KHR_swapchain v70
VK_KHR_swapchain_mutable_format v1
VK_KHR_timeline_semaphore v2
VK_KHR_uniform_buffer_standard_layout v1
VK_KHR_variable_pointers v1
VK_EXT_buffer_device_address v2
VK_EXT_debug_marker v4
VK_EXT_debug_report v10
VK_EXT_debug_utils v2
VK_EXT_descriptor_indexing v2
VK_EXT_fragment_shader_interlock v1
VK_EXT_host_query_reset v1
VK_EXT_image_robustness v1
VK_EXT_inline_uniform_block v1
VK_EXT_memory_budget v1
VK_EXT_metal_objects v1
VK_EXT_metal_surface v1
VK_EXT_post_depth_coverage v1
VK_EXT_private_data v1
VK_EXT_robustness2 v1
VK_EXT_sample_locations v1
VK_EXT_scalar_block_layout v1
VK_EXT_separate_stencil_usage v1
VK_EXT_shader_stencil_export v1
VK_EXT_shader_viewport_index_layer v1
VK_EXT_subgroup_size_control v2
VK_EXT_swapchain_colorspace v4
VK_EXT_texel_buffer_alignment v1
VK_EXT_texture_compression_astc_hdr v1
VK_EXT_vertex_attribute_divisor v3
VK_AMD_gpu_shader_half_float v2
VK_AMD_negative_viewport_height v1
VK_AMD_shader_image_load_store_lod v1
VK_AMD_shader_trinary_minmax v1
VK_IMG_format_pvrtc v1
VK_INTEL_shader_integer_functions2 v1
VK_GOOGLE_display_timing v1
VK_MVK_ios_surface v3
VK_MVK_moltenvk v36
VK_NV_fragment_shader_barycentric v1
VK_NV_glsl_shader v1
[mvk-info] GPU device:
model: Apple iOS simulator GPU
type: Integrated
vendorID: 0x106b
deviceID: 0x100203ea
pipelineCacheUUID: 000027D8-1002-03EA-0000-000000000000
supports the following Metal Versions, GPU's and Feature Sets:
Metal Shading Language 3.0
GPU Family Apple 2
GPU Family Apple 1
GPU Family Common 1
iOS GPU Family 2 v5
iOS GPU Family 2 v4
iOS GPU Family 2 v3
iOS GPU Family 2 v2
iOS GPU Family 2 v1
iOS GPU Family 1 v5
iOS GPU Family 1 v4
iOS GPU Family 1 v3
iOS GPU Family 1 v2
iOS GPU Family 1 v1
[mvk-info] Created VkInstance for Vulkan version 1.2.0, as requested by app, with the following 3 Vulkan extensions enabled:
VK_KHR_get_physical_device_properties2 v2
VK_KHR_surface v25
VK_MVK_ios_surface v3
2023-03-02 08:15:14.659866-0300 EmptyProject40stableMobile[21879:415340] Vulkan API 1.2.231 - Forward Mobile - Using Vulkan Device #0: Apple - Apple iOS simulator GPU
Vulkan API 1.2.231 - Forward Mobile - Using Vulkan Device #0: Apple - Apple iOS simulator GPU
2023-03-02 08:15:14.660182-0300 EmptyProject40stableMobile[21879:415340] USER ERROR: Your GPU doesn't support image cube arrays which are required to use the Vulkan-based renderers in Godot.
2023-03-02 08:15:14.660330-0300 EmptyProject40stableMobile[21879:415340] at: _create_physical_device (drivers/vulkan/vulkan_context.cpp:1336)
USER ERROR: Your GPU doesn't support image cube arrays which are required to use the Vulkan-based renderers in Godot.
at: _create_physical_device (drivers/vulkan/vulkan_context.cpp:1336)
2023-03-02 08:15:14.660551-0300 EmptyProject40stableMobile[21879:415340] USER ERROR: Condition "err != OK" is true. Returning: ERR_CANT_CREATE
2023-03-02 08:15:14.660689-0300 EmptyProject40stableMobile[21879:415340] at: _window_create (drivers/vulkan/vulkan_context.cpp:1681)
USER ERROR: Condition "err != OK" is true. Returning: ERR_CANT_CREATE
at: _window_create (drivers/vulkan/vulkan_context.cpp:1681)
2023-03-02 08:15:14.661281-0300 EmptyProject40stableMobile[21879:415340] USER ERROR: Failed to create Vulkan window.
2023-03-02 08:15:14.661446-0300 EmptyProject40stableMobile[21879:415340] at: DisplayServerIOS (platform/ios/display_server_ios.mm:84)
USER ERROR: Failed to create Vulkan window.
at: DisplayServerIOS (platform/ios/display_server_ios.mm:84)
2023-03-02 08:15:14.661595-0300 EmptyProject40stableMobile[21879:415340] USER ERROR: Unable to create DisplayServer, all display drivers failed.
2023-03-02 08:15:14.661731-0300 EmptyProject40stableMobile[21879:415340] at: setup2 (main/main.cpp:2013)
USER ERROR: Unable to create DisplayServer, all display drivers failed.
at: setup2 (main/main.cpp:2013)
2023-03-02 08:15:14.665820-0300 EmptyProject40stableMobile[21879:415340] USER ERROR: Condition "!_start_success" is true. Returning: false
2023-03-02 08:15:14.665977-0300 EmptyProject40stableMobile[21879:415340] at: start (main/main.cpp:2381)
USER ERROR: Condition "!_start_success" is true. Returning: false
at: start (main/main.cpp:2381)
Steps to reproduce
Just create a Empty project as “Mobile” Render option and try to export
Minimal reproduction project
About this issue
- Original URL
- State: open
- Created a year ago
- Reactions: 2
- Comments: 30 (17 by maintainers)
We discussed this on chat a bit. It seems like we can improve the situation somewhat by only failing when cubemap arrays are actually used. This should not be too difficult but it will require a few changes:
RD::has_feature()
https://github.com/godotengine/godot/blob/8c729f0f34a92b92a1a8204e1d56b6ad05cfd27b/drivers/vulkan/rendering_device_vulkan.cpp#L9390Additionally, we need to add documentation about this requirement somewhere as it will likely catch devs by surprise when they ship their game
@cchipont Please surround large blocks of text with triple backticks like this:
``` text here ```
This prevents them from taking too much space and also makes sure issue references aren’t accidentally created. I edited your comment, but remember to do this next time 🙂
First-gen iPad Pro lacks full MoltenVK support, like the iOS simulator. Use the Compatibility rendering method when targeting old hardware in general.
We could disable the check for 2D projects, but lacking support for cubemap arrays will break any shaded 3D rendering (as cubemap arrays are used to store the radiance maps for PBR). If you want to try this on your own, remove the check in the source code then compile an iOS export template.
You can make the same change in the 4.1.3 source code and recompile the iOS export template in the same way. As per the release policy, a proper fix won’t be backported to 4.1.x as it implies feature development (adding a fallback for devices that don’t support the required Vulkan/MoltenVK features at a hardware level).
See https://github.com/godotengine/godot/pull/72461.
Use OpenGL3 with Godot 4.1.2 / Project settings / Renderer (all x3 to gl_compatibility) Then Export for iOS. Build for iPad Air A7 (first generation). iOS : 12.5.7 on Macbook M2 Pro. Works perfect !
Here’s a pixel shader fullscreen pass that converts a cubemap into a 2D DP map.
Btw in OgreNext we deal with this issue by converting all cubemap arrays into a 2D array of dual-paraboloid textures.
@lostminds Please see my comment above explaining the steps needed to resolve this issue https://github.com/godotengine/godot/issues/74227#issuecomment-1536567159
Ran into this today as I was testing out the new 4.2dev1 build, hoping to get support for the mobile renderer on some older iOS devices (iPad Air 2 and older iPhones) with https://github.com/godotengine/godot/issues/70013 marked as fixed with the new replacement for sampler arrays https://github.com/godotengine/godot/pull/77740 . However, even with this improvement it now fails due to the image cube arrays instead.
I’m not sure when these are used, but if it would be possible to support these devices by avoiding to use cubemaps it would be great. It would make it much easier to distribute games on iOS via the app store as it would not only allow for broader compatibility, but currently you can’t really guarantee that people who can buy your game on the app store can actually run it on their devices.