From 91c7cffe0e4df5298f3b5b81a067653cf77fbfcc Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Mon, 10 Jul 2023 19:53:14 +0200 Subject: [PATCH] narcissus-gpu: Reset transient uniform buffers --- libs/narcissus-gpu/src/backend/vulkan/mod.rs | 30 +++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/libs/narcissus-gpu/src/backend/vulkan/mod.rs b/libs/narcissus-gpu/src/backend/vulkan/mod.rs index d70d4ab..84c5706 100644 --- a/libs/narcissus-gpu/src/backend/vulkan/mod.rs +++ b/libs/narcissus-gpu/src/backend/vulkan/mod.rs @@ -944,6 +944,11 @@ impl VulkanTransientAllocator { } } + fn reset(&mut self) { + self.current = None; + self.offset = 0; + } + fn alloc<'a>(&mut self, device: &VulkanDevice, size: u64, align: u64) -> TransientBuffer<'a> { assert!(size <= VULKAN_CONSTANTS.transient_buffer_size); assert!( @@ -3327,6 +3332,8 @@ impl Device for VulkanDevice { .extend(used_index_buffers.drain(..)) } + per_thread.transient_index_allocator.get_mut().reset(); + let used_storage_buffers = &mut per_thread .transient_storage_allocator .get_mut() @@ -3338,6 +3345,8 @@ impl Device for VulkanDevice { .extend(used_storage_buffers.drain(..)) } + per_thread.transient_storage_allocator.get_mut().reset(); + let used_uniform_buffers = &mut per_thread .transient_uniform_allocator .get_mut() @@ -3349,6 +3358,8 @@ impl Device for VulkanDevice { .extend(used_uniform_buffers.drain(..)) } + per_thread.transient_uniform_allocator.get_mut().reset(); + per_thread.arena.reset() } @@ -3980,26 +3991,31 @@ impl Drop for VulkanDevice { device_fn.destroy_command_pool(device, cmd_buffer_pool.command_pool, None) } - for &VulkanTransientBuffer { buffer, memory: _ } in - &per_thread.transient_index_allocator.get_mut().used_buffers + for VulkanTransientBuffer { buffer, memory: _ } in per_thread + .transient_index_allocator + .get_mut() + .used_buffers + .iter() { - unsafe { device_fn.destroy_buffer(device, buffer, None) } + unsafe { device_fn.destroy_buffer(device, *buffer, None) } } - for &VulkanTransientBuffer { buffer, memory: _ } in &per_thread + for VulkanTransientBuffer { buffer, memory: _ } in per_thread .transient_storage_allocator .get_mut() .used_buffers + .iter() { - unsafe { device_fn.destroy_buffer(device, buffer, None) } + unsafe { device_fn.destroy_buffer(device, *buffer, None) } } - for &VulkanTransientBuffer { buffer, memory: _ } in &per_thread + for VulkanTransientBuffer { buffer, memory: _ } in per_thread .transient_uniform_allocator .get_mut() .used_buffers + .iter() { - unsafe { device_fn.destroy_buffer(device, buffer, None) } + unsafe { device_fn.destroy_buffer(device, *buffer, None) } } } } -- 2.49.0