gltf_viewer crashes: Unable to allocate image memory
Describe the bug
$ gltf_viewer
WARNING: Using soft CircularBuffer (12288 KiB)
FEngine (64 bits) created at 0x82aa5a000 (threading is enabled)
FEngine resolved backend: Vulkan
Vulkan device driver: NVIDIA 510.60.02
Selected physical device 'NVIDIA GeForce RTX 2060' from 2 physical devices. (vendor 0x10de, device 0x1f08, driver 0x7f8f0080, api 1.3)
FEngine feature level: 1
vkCreateSwapchain: 1024x640, 44, 0, 3, 1
vkCreateSwapchain: 3840x2089, 44, 0, 3, 1
N5utils18PostconditionPanicE
in VulkanTexture:165
reason: Unable to allocate image memory.
#0 gltf_viewer 0x10bbb90 _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 8433833
#1 gltf_viewer 0x106d940 _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 8113753
#2 gltf_viewer 0x104c673 _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 7977868
#3 gltf_viewer 0x103733b _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 7891028
#4 gltf_viewer 0x1037bb0 _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 7893193
#5 gltf_viewer 0x10370da _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 7890419
#6 gltf_viewer 0xfef830 _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 7597385
#7 gltf_viewer 0xfed090 _ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 7587241
Abort trap
**To Reproduce**
Start gltf_viewer, maximize its window, and try to rotate the 3-D model that is displayed to the right.
**Desktop (please complete the following information):**
- OS: FreeBSD 13.1
- GPU: NVidia RTX 2060
- Backend: Vulkan
Screen resolution: 3840x2160
I actually don't know what makes it to use Vulkan (or to print Vulkan). The binaries aren't linked with Vulkan.
How to switch to OpenGL?
You can use -a opengl when launching gltf_viewer
Ok, thanks. This doesn't happen with the OpenGL backend.
Is this a bug in Vulkan itself, or in filament?
Similar on Intel iGPU under X11 (Xwayland): Vulkan crashes but OpenGL works. Elsewhere (mpv, veloren, ppsspp, rpcs3, yuzu, gamescope) Vulkan works fine.
v1.31.0 tag crash
$ gltf_viewer
WARNING: Using soft CircularBuffer (12288 KiB)
FEngine (64 bits) created at 0x82aa8c000 (threading is enabled)
FEngine resolved backend: Vulkan
Validation layer not available; did you install the Vulkan SDK?
Please ensure that VK_LAYER_PATH is set correctly.
Vulkan device driver: Intel open-source Mesa driver Mesa 22.3.2
Selected physical device 'Intel(R) HD Graphics 530 (SKL GT2)' from 2 physical devices. (vendor 0x8086, device 0x1912, driver 0x5803002, api 1.3)
FEngine feature level: 1
Requested linear format but KTX contains a sRGB format.
Requested linear format but KTX contains a sRGB format.
Texture Decoder has 6 background threads.
vkCreateSwapchain: 1024x640, VK_FORMAT_B8G8R8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, 4, 1
Uninitialized texture bound to 'materialParams_baseColorMap' in material 'Material_MR' at binding point 9
Uninitialized texture bound to 'materialParams_metallicRoughnessMap' in material 'Material_MR' at binding point 10
Uninitialized texture bound to 'materialParams_normalMap' in material 'Material_MR' at binding point 11
Uninitialized texture bound to 'materialParams_occlusionMap' in material 'Material_MR' at binding point 12
Uninitialized texture bound to 'materialParams_emissiveMap' in material 'Material_MR' at binding point 13
Segmentation fault
* thread #8, name = 'gltf_viewer', stop reason = signal SIGSEGV: invalid address (fault address: 0xfffffff8)
frame #0: 0x0000000865807ca7 libvulkan_intel.so`vk_common_CmdBeginDebugUtilsLabelEXT(_commandBuffer=0x000000086d173000, pLabelInfo=<unavailable>) at vk_debug_utils.c:200:4
197 if (!command_buffer->region_begin)
198 (void)util_dynarray_pop(&command_buffer->labels, VkDebugUtilsLabelEXT);
199
-> 200 util_dynarray_append(&command_buffer->labels, VkDebugUtilsLabelEXT,
201 *pLabelInfo);
202 command_buffer->region_begin = true;
203 }
(lldb) bt
* thread #8, name = 'gltf_viewer', stop reason = signal SIGSEGV: invalid address (fault address: 0xfffffff8)
* frame #0: 0x0000000865807ca7 libvulkan_intel.so`vk_common_CmdBeginDebugUtilsLabelEXT(_commandBuffer=0x000000086d173000, pLabelInfo=<unavailable>) at vk_debug_utils.c:200:4
frame #1: 0x0000000849be398f libvulkan.so.1`terminator_CmdBeginDebugUtilsLabelEXT(commandBuffer=0x000000086d173000, pLabelInfo=0x00000008418ad970) at vk_loader_extensions.c:4718:9
frame #2: 0x0000000849be390e libvulkan.so.1`CmdBeginDebugUtilsLabelEXT(commandBuffer=0x000000086d173000, pLabelInfo=0x00000008418ad970) at vk_loader_extensions.c:4704:9
frame #3: 0x000000000250af96 gltf_viewer`filament::backend::VulkanDriver::pushGroupMarker(this=0x00000008431fb000, string="Finish Color Passes", len=0) at VulkanDriver.cpp:1523:9
frame #4: 0x000000000252fce1 gltf_viewer`decltype(m=e0 ae 50 02 00 00 00 00 00 00 00 00 00 00 00 00, d=0x00000008431fb000, args=0x0000000839cc6128, args=0x0000000839cc6130) filament::backend::invoke<filament::backend::VulkanDriver, void (char const*, unsigned int), filament::backend::VulkanDriver&, char const*, unsigned int>(void (filament::backend::VulkanDriver::*)(char const*, unsigned int), filament::backend::VulkanDriver&, char const*&&, unsigned int&&) at CommandStream.h:91:12
frame #5: 0x000000000252fc27 gltf_viewer`decltype(m=0x00000008418adb40, d=0x00000008431fb000, t=0x0000000839cc6128, (null)=std::__1::index_sequence<0UL, 1UL> @ 0x00000008418ada98) filament::backend::trampoline<void (filament::backend::VulkanDriver::*)(char const*, unsigned int), filament::backend::VulkanDriver&, std::__1::tuple<char const*, unsigned int>, 0ul, 1ul>(void (filament::backend::VulkanDriver::*&&)(char const*, unsigned int), filament::backend::VulkanDriver&, std::__1::tuple<char const*, unsigned int>&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul>) at CommandStream.h:96:12
frame #6: 0x000000000252fb87 gltf_viewer`decltype(m=0x00000008418adb40, d=0x00000008431fb000, t=0x0000000839cc6128) filament::backend::apply<void (filament::backend::VulkanDriver::*)(char const*, unsigned int), filament::backend::VulkanDriver&, std::__1::tuple<char const*, unsigned int> >(void (filament::backend::VulkanDriver::*&&)(char const*, unsigned int), filament::backend::VulkanDriver&, std::__1::tuple<char const*, unsigned int>&&) at CommandStream.h:101:12
frame #7: 0x000000000250aecb gltf_viewer`void filament::backend::CommandType<void (filament::backend::Driver::*)(char const*, unsigned int)>::Command<&(method=0x00000008418adb40, driver=0x00000008431fb000, base=0x0000000839cc6120, next=0x00000008418adb88))>::execute<void (filament::backend::VulkanDriver::*)(char const*, unsigned int), filament::backend::VulkanDriver&>(void (filament::backend::VulkanDriver::*&&)(char const*, unsigned int), filament::backend::VulkanDriver&, filament::backend::CommandBase*, long*) at CommandStream.h:141:13
frame #8: 0x0000000002505564 gltf_viewer`filament::backend::ConcreteDispatcher<filament::backend::VulkanDriver>::pushGroupMarker(driver=0x00000008431fb000, base=0x0000000839cc6120, next=0x00000008418adb88) at DriverAPI.inc:431:1
frame #9: 0x000000000249b9d5 gltf_viewer`filament::backend::CommandBase::execute(this=0x0000000839cc6120, driver=0x00000008431fb000) at CommandStream.h:75:9
frame #10: 0x000000000249b8c8 gltf_viewer`filament::backend::CommandStream::execute(this=0x00000008418adda8)::$_0::operator()() const at CommandStream.cpp:93:26
frame #11: 0x000000000249b865 gltf_viewer`decltype(__f=0x00000008418adda8)::$_0&>(fp)()) std::__1::__invoke<filament::backend::CommandStream::execute(void*)::$_0&>(filament::backend::CommandStream::execute(void*)::$_0&) at type_traits:3918:1
frame #12: 0x000000000249b81d gltf_viewer`void std::__1::__invoke_void_return_wrapper<void, true>::__call<filament::backend::CommandStream::execute(__args=0x00000008418adda8)::$_0&>(filament::backend::CommandStream::execute(void*)::$_0&) at invoke.h:61:9
frame #13: 0x000000000249b7ed gltf_viewer`std::__1::__function::__alloc_func<filament::backend::CommandStream::execute(void*)::$_0, std::__1::allocator<filament::backend::CommandStream::execute(void*)::$_0>, void ()>::operator(this=0x00000008418adda8)() at function.h:171:16
frame #14: 0x000000000249a909 gltf_viewer`std::__1::__function::__func<filament::backend::CommandStream::execute(void*)::$_0, std::__1::allocator<filament::backend::CommandStream::execute(void*)::$_0>, void ()>::operator(this=0x00000008418adda0)() at function.h:345:12
frame #15: 0x00000000021f88d2 gltf_viewer`std::__1::__function::__value_func<void ()>::operator(this=0x00000008418adda0)() const at function.h:498:16
frame #16: 0x00000000021f4ea5 gltf_viewer`std::__1::function<void ()>::operator(this= Lambda in File CommandStream.cpp at Line 89)() const at function.h:1175:12
frame #17: 0x000000000249c4e9 gltf_viewer`filament::backend::Driver::execute(this=0x00000008431fb000, fn= Lambda in File CommandStream.cpp at Line 89)> const&) at Driver.cpp:204:5
frame #18: 0x000000000249a22a gltf_viewer`filament::backend::CommandStream::execute(this=0x000000082df05a40, buffer=0x0000000839cc5f80) at CommandStream.cpp:89:13
frame #19: 0x00000000023c7d4b gltf_viewer`filament::FEngine::execute(this=0x000000082df05000) at Engine.cpp:1049:28
frame #20: 0x00000000023c4bcd gltf_viewer`filament::FEngine::loop(this=0x000000082df05000) at Engine.cpp:645:14
frame #21: 0x00000000023ce559 gltf_viewer`decltype(__f=0x000000082dfb9a68, __a0=0x000000082dfb9a78)).*fp()) std::__1::__invoke<int (filament::FEngine::*)(), filament::FEngine*, void>(int (filament::FEngine::*&&)(), filament::FEngine*&&) at type_traits:3859:1
frame #22: 0x00000000023ce49e gltf_viewer`void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, int (filament::FEngine::*)(), filament::FEngine*, 2ul>(__t=0x000000082dfb9a60, (null)=__tuple_indices<2> @ 0x00000008418adf78)(), filament::FEngine*>&, std::__1::__tuple_indices<2ul>) at thread:280:5
frame #23: 0x00000000023cde42 gltf_viewer`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, int (filament::FEngine::*)(), filament::FEngine*> >(__vp=0x000000082dfb9a60) at thread:291:5
frame #24: 0x00000008296c783a libthr.so.3`___lldb_unnamed_symbol556 + 314
(lldb) f 3
frame #3: 0x000000000250af96 gltf_viewer`filament::backend::VulkanDriver::pushGroupMarker(this=0x00000008431fb000, string="Finish Color Passes", len=0) at VulkanDriver.cpp:1523:9
1520 .pLabelName = string,
1521 .color = {0, 1, 0, 1},
1522 };
-> 1523 vkCmdBeginDebugUtilsLabelEXT(cmdbuffer, &labelInfo);
1524 mContext.currentDebugMarker = string;
1525 } else if (mContext.debugMarkersSupported) {
1526 VkDebugMarkerMarkerInfoEXT markerInfo = {};
main branch (ce407ba84487) crash
$ gltf_viewer
WARNING: Using soft CircularBuffer (12288 KiB)
FEngine (64 bits) created at 0x82e6f6000 (threading is enabled)
FEngine resolved backend: Vulkan
utils::PostconditionPanic
in utils::FixedCapacityVector<OutType> filament::backend::enumerate(VkResult (*)(uint32_t *, OutType *)) [OutType = VkLayerProperties]:93
in file filament/work/filament-ce407ba84/filament/backend/src/vulkan/VulkanUtility.h
reason: enumerate size error
#0 gltf_viewer 0x3273aed typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 26536278
#1 gltf_viewer 0x3286dab typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 26614804
#2 gltf_viewer 0x3286b6f typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 26614232
#3 gltf_viewer 0x3286a3a typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 26613923
#4 gltf_viewer 0x25674dc typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12854085
#5 gltf_viewer 0x256676a typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12850643
#6 gltf_viewer 0x2564933 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12842908
#7 gltf_viewer 0x25646f4 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12842333
#8 gltf_viewer 0x253ad46 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12671919
#9 gltf_viewer 0x252e9a7 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12621840
#10 gltf_viewer 0x252e8db typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12621636
#11 gltf_viewer 0x252e4d7 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 12620608
#12 gltf_viewer 0x23f23f2 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 11326043
#13 gltf_viewer 0x23fbdd9 typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 11365442
#14 gltf_viewer 0x23fbd1e typeinfo name for std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > + 11365255
Abort trap
* thread #8, name = 'gltf_viewer', stop reason = signal SIGABRT
frame #0: 0x0000000828d6833a libc.so.7`__sys_thr_kill + 10
libc.so.7`__sys_thr_kill:
-> 0x828d6833a <+10>: jb 0x828d66498
0x828d68340 <+16>: retq
0x828d68341: int3
0x828d68342: int3
(lldb) bt
* thread #8, name = 'gltf_viewer', stop reason = signal SIGABRT
* frame #0: 0x0000000828d6833a libc.so.7`__sys_thr_kill + 10
frame #1: 0x0000000828ce0c74 libc.so.7`__raise + 52
frame #2: 0x0000000828d92109 libc.so.7`abort + 73
frame #3: 0x00000000021d878b gltf_viewer`__clang_call_terminate + 11
frame #4: 0x000000000253ae4e gltf_viewer`filament::backend::VulkanDriver::VulkanDriver(this=0x0000000841d21000, platform=0x0000000841d20000, ppRequiredExtensions=0x0000000840515e60, requiredExtensionCount=2, driverConfig=0x0000000840515de0) at VulkanDriver.cpp:77:1
frame #5: 0x000000000252e9a7 gltf_viewer`filament::backend::VulkanDriver::create(platform=0x0000000841d20000, ppEnabledExtensions=0x0000000840515e60, enabledExtensionCount=2, driverConfig=0x0000000840515ed0) at VulkanDriver.cpp:88:16
frame #6: 0x000000000252e8db gltf_viewer`filament::backend::VulkanDriverFactory::create(platform=0x0000000841d20000, ppRequiredExtensions=0x0000000840515e60, requiredExtensionCount=2, driverConfig=0x0000000840515ed0) at VulkanDriver.cpp:50:12
frame #7: 0x000000000252e4d7 gltf_viewer`filament::backend::PlatformVkLinuxX11::createDriver(this=0x0000000841d20000, sharedContext=0x0000000000000000, driverConfig=0x0000000840515ed0) at PlatformVkLinuxX11.cpp:63:12
frame #8: 0x00000000023f23f2 gltf_viewer`filament::FEngine::loop(this=0x000000082c80b000) at Engine.cpp:627:26
frame #9: 0x00000000023fbdd9 gltf_viewer`decltype(__f=0x000000082c8bfa68, __a0=0x000000082c8bfa78)).*fp()) std::__1::__invoke<int (filament::FEngine::*)(), filament::FEngine*, void>(int (filament::FEngine::*&&)(), filament::FEngine*&&) at type_traits:3859:1
frame #10: 0x00000000023fbd1e gltf_viewer`void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, int (filament::FEngine::*)(), filament::FEngine*, 2ul>(__t=0x000000082c8bfa60, (null)=__tuple_indices<2> @ 0x0000000840515f78)(), filament::FEngine*>&, std::__1::__tuple_indices<2ul>) at thread:280:5
frame #11: 0x00000000023fb6c2 gltf_viewer`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, int (filament::FEngine::*)(), filament::FEngine*> >(__vp=0x000000082c8bfa60) at thread:291:5
frame #12: 0x00000008280fe83a libthr.so.3`___lldb_unnamed_symbol556 + 314
The crash in @jbeich 's comment seems to be different then the OP issue. I opened another issue (#6449) to track this.