filament icon indicating copy to clipboard operation
filament copied to clipboard

Destroying an unused Engine crashes

Open mcooley opened this issue 1 year ago • 0 comments

Describe the bug With the Vulkan backend, creating and immediately destroying an Engine causes an access violation.

To Reproduce

Engine* engine = Engine::Builder()
        .backend(backend::Backend::VULKAN)
        .build();

Engine::destroy(&engine);

Logs Call stack:

test.dll!vmaDestroyBuffer(VmaAllocator_T * allocator, VkBuffer_T * buffer, VmaAllocation_T * allocation) Line 17234	C++
test.dll!filament::backend::deallocateResource(filament::backend::VulkanResourceAllocator * allocator, filament::backend::VulkanResourceType type, unsigned int id) Line 33	C++
[Inline Frame] test.dll!filament::backend::VulkanResourceManagerImpl<filament::backend::VulkanResourceBase,tsl::robin_set<filament::backend::VulkanResourceBase *,std::hash<filament::backend::VulkanResourceBase *>,std::equal_to<filament::backend::VulkanResourceBase *>,std::allocator<filament::backend::VulkanResourceBase *>,0,tsl::rh::power_of_two_growth_policy<2>>>::derefImpl(filament::backend::VulkanResourceBase * resource) Line 287	C++
test.dll!filament::backend::VulkanResourceManagerImpl<filament::backend::VulkanResourceBase,tsl::robin_set<filament::backend::VulkanResourceBase *,std::hash<filament::backend::VulkanResourceBase *>,std::equal_to<filament::backend::VulkanResourceBase *>,std::allocator<filament::backend::VulkanResourceBase *>,0,tsl::rh::power_of_two_growth_policy<2>>>::clear() Line 270	C++
[Inline Frame] test.dll!filament::backend::VulkanResourceManagerImpl<filament::backend::VulkanResourceBase,tsl::robin_set<filament::backend::VulkanResourceBase *,std::hash<filament::backend::VulkanResourceBase *>,std::equal_to<filament::backend::VulkanResourceBase *>,std::allocator<filament::backend::VulkanResourceBase *>,0,tsl::rh::power_of_two_growth_policy<2>>>::{dtor}() Line 216	C++
[Inline Frame] test.dll!std::default_delete<filament::backend::VulkanCommandBuffer>::operator()(filament::backend::VulkanCommandBuffer *) Line 3139	C++
[Inline Frame] test.dll!std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>::{dtor}() Line 3249	C++
[Inline Frame] test.dll!std::destroy_at(std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>> * const) Line 324	C++
[Inline Frame] test.dll!std::_Default_allocator_traits<std::allocator<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>>>::destroy(std::allocator<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>> &) Line 734	C++
[Inline Frame] test.dll!utils::FixedCapacityVector<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>,std::allocator<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>>,1>::destroy_non_trivial(std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>> * last, std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>> *) Line 362	C++
[Inline Frame] test.dll!utils::FixedCapacityVector<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>,std::allocator<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>>,1>::destroy(std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>> *) Line 354	C++
[Inline Frame] test.dll!utils::FixedCapacityVector<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>,std::allocator<std::unique_ptr<filament::backend::VulkanCommandBuffer,std::default_delete<filament::backend::VulkanCommandBuffer>>>,1>::{dtor}() Line 126	C++
test.dll!filament::backend::VulkanCommands::~VulkanCommands()	C++
test.dll!filament::backend::VulkanDriver::~VulkanDriver() Line 267	C++
test.dll!filament::backend::VulkanDriver::`scalar deleting destructor'(unsigned int)	C++
test.dll!filament::FEngine::~FEngine() Line 430	C++
test.dll!filament::FEngine::destroy(filament::FEngine * engine) Line 1221	C++
test.dll!filament::Engine::destroy(filament::Engine * * pEngine) Line 70	C++

Filament release: 1.51.8

Desktop:

  • OS: Windows 11
  • GPU: Intel Iris Xe, or SwiftShader
  • Backend: Vulkan

mcooley avatar May 17 '24 17:05 mcooley