filament icon indicating copy to clipboard operation
filament copied to clipboard

gltf_viewer crashes: Unable to allocate image memory

Open yurivict opened this issue 2 years ago • 5 comments

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

yurivict avatar Jan 11 '23 23:01 yurivict

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?

yurivict avatar Jan 11 '23 23:01 yurivict

You can use -a opengl when launching gltf_viewer

romainguy avatar Jan 11 '23 23:01 romainguy

Ok, thanks. This doesn't happen with the OpenGL backend.

Is this a bug in Vulkan itself, or in filament?

yurivict avatar Jan 12 '23 00:01 yurivict

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

jbeich avatar Jan 12 '23 08:01 jbeich

The crash in @jbeich 's comment seems to be different then the OP issue. I opened another issue (#6449) to track this.

poweifeng avatar Jan 12 '23 15:01 poweifeng