diff options
Diffstat (limited to 'third_party/rust/wgpu-core/src/track/metadata.rs')
-rw-r--r-- | third_party/rust/wgpu-core/src/track/metadata.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/third_party/rust/wgpu-core/src/track/metadata.rs b/third_party/rust/wgpu-core/src/track/metadata.rs index 3e71e0e084..d6e8d6f906 100644 --- a/third_party/rust/wgpu-core/src/track/metadata.rs +++ b/third_party/rust/wgpu-core/src/track/metadata.rs @@ -87,16 +87,18 @@ impl<T: Resource> ResourceMetadata<T> { /// Add the resource with the given index, epoch, and reference count to the /// set. /// + /// Returns a reference to the newly inserted resource. + /// (This allows avoiding a clone/reference count increase in many cases.) + /// /// # Safety /// /// The given `index` must be in bounds for this `ResourceMetadata`'s /// existing tables. See `tracker_assert_in_bounds`. #[inline(always)] - pub(super) unsafe fn insert(&mut self, index: usize, resource: Arc<T>) { + pub(super) unsafe fn insert(&mut self, index: usize, resource: Arc<T>) -> &Arc<T> { self.owned.set(index, true); - unsafe { - *self.resources.get_unchecked_mut(index) = Some(resource); - } + let resource_dst = unsafe { self.resources.get_unchecked_mut(index) }; + resource_dst.insert(resource) } /// Get the resource with the given index. |