From 7b387007a89fc091c28a2d105d0bb097928c79d9 Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:17:39 +0200 Subject: [PATCH] make `Device.create_buffer` return an `Arc` --- wgpu-core/src/device/global.rs | 13 +++++++------ wgpu-core/src/device/resource.rs | 8 +++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/wgpu-core/src/device/global.rs b/wgpu-core/src/device/global.rs index b7d63f7eb..09bbef413 100644 --- a/wgpu-core/src/device/global.rs +++ b/wgpu-core/src/device/global.rs @@ -161,7 +161,7 @@ impl Global { let hub = A::hub(self); let fid = hub.buffers.prepare(id_in); - let mut to_destroy: ArrayVec, 2> = ArrayVec::new(); + let mut to_destroy: ArrayVec>, 2> = ArrayVec::new(); let error = 'error: { let device = match hub.devices.get(device_id) { Ok(device) => device, @@ -233,7 +233,7 @@ impl Global { mapped_at_creation: false, }; let stage = match device.create_buffer(&stage_desc, true) { - Ok(stage) => Arc::new(stage), + Ok(stage) => stage, Err(e) => { to_destroy.push(buffer); break 'error e; @@ -265,7 +265,7 @@ impl Global { hal::BufferUses::COPY_DST }; - let (id, resource) = fid.assign(Arc::new(buffer)); + let (id, resource) = fid.assign(buffer); api_log!( "Device::create_buffer({:?}{}) -> {id:?}", desc.label.as_deref().unwrap_or(""), @@ -288,10 +288,11 @@ impl Global { // Error path for buffer in to_destroy { - let device = Arc::clone(&buffer.device); - device + buffer + .device + .clone() .lock_life() - .schedule_resource_destruction(queue::TempResource::Buffer(Arc::new(buffer)), !0); + .schedule_resource_destruction(queue::TempResource::Buffer(buffer), !0); } let id = fid.assign_error(); diff --git a/wgpu-core/src/device/resource.rs b/wgpu-core/src/device/resource.rs index fc9c6a3f0..086ad86c2 100644 --- a/wgpu-core/src/device/resource.rs +++ b/wgpu-core/src/device/resource.rs @@ -559,7 +559,7 @@ impl Device { self: &Arc, desc: &resource::BufferDescriptor, transient: bool, - ) -> Result, resource::CreateBufferError> { + ) -> Result>, resource::CreateBufferError> { self.check_is_valid()?; if desc.size > self.limits.max_buffer_size { @@ -641,7 +641,7 @@ impl Device { }; let buffer = unsafe { self.raw().create_buffer(&hal_desc) }.map_err(DeviceError::from)?; - Ok(Buffer { + let buffer = Buffer { raw: Snatchable::new(buffer), device: self.clone(), usage: desc.usage, @@ -655,7 +655,9 @@ impl Device { label: desc.label.to_string(), tracking_data: TrackingData::new(self.tracker_indices.buffers.clone()), bind_groups: Mutex::new(rank::BUFFER_BIND_GROUPS, Vec::new()), - }) + }; + let buffer = Arc::new(buffer); + Ok(buffer) } pub(crate) fn create_texture_from_hal(