diff options
Diffstat (limited to 'source/blender/gpu/metal/mtl_backend.mm')
-rw-r--r-- | source/blender/gpu/metal/mtl_backend.mm | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/gpu/metal/mtl_backend.mm b/source/blender/gpu/metal/mtl_backend.mm index 81f8f279759..117b8352a0a 100644 --- a/source/blender/gpu/metal/mtl_backend.mm +++ b/source/blender/gpu/metal/mtl_backend.mm @@ -127,7 +127,21 @@ void MTLBackend::render_end() void MTLBackend::render_step() { - /* Placeholder */ + /* NOTE(Metal): Primarily called from main thread, but below datastructures + * and operations are thread-safe, and GPUContext rendering coordination + * is also thread-safe. */ + + /* Flush any MTLSafeFreeLists which have previously been released by any MTLContext. */ + MTLContext::get_global_memory_manager().update_memory_pools(); + + /* End existing MTLSafeFreeList and begin new list -- + * Buffers wont `free` until all associated in-flight command buffers have completed. + * Decrement final reference count for ensuring the previous list is certainly + * released. */ + MTLSafeFreeList *cmd_free_buffer_list = + MTLContext::get_global_memory_manager().get_current_safe_list(); + MTLContext::get_global_memory_manager().begin_new_safe_list(); + cmd_free_buffer_list->decrement_reference(); } bool MTLBackend::is_inside_render_boundary() |