Metal: Ensure pending MTLSafeFreeList is released on shutdown

Ensure that on closing of the application, all pending
SafeFreeLists are released. A new change to ensure
release of SafeFreeLists was always deferred until
full completion of GPU buffers meant that a pending
MTLSafeFreeList container may not be released on
shutdown.

This change ensures that the container is fully
destructed on final shutdown.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/114532
This commit is contained in:
Jason Fielder
2023-11-07 07:53:20 +01:00
committed by Jeroen Bakker
parent 967e36cf68
commit bbb71f0859

View File

@@ -70,10 +70,17 @@ void MTLBufferPool::free()
delete completed_safelist_queue_[safe_pool_free_index];
}
completed_safelist_queue_.clear();
safelist_lock_.lock();
if (current_free_list_ != nullptr) {
delete current_free_list_;
current_free_list_ = nullptr;
}
if (prev_free_buffer_list_ != nullptr) {
delete prev_free_buffer_list_;
prev_free_buffer_list_ = nullptr;
}
safelist_lock_.unlock();
/* Clear and release memory pools. */
for (std::multiset<blender::gpu::MTLBufferHandle, blender::gpu::CompareMTLBuffer> *buffer_pool :