diff --git a/wgpu-core/src/command/mod.rs b/wgpu-core/src/command/mod.rs index e5401e7f5d..9eaeabbdd4 100644 --- a/wgpu-core/src/command/mod.rs +++ b/wgpu-core/src/command/mod.rs @@ -327,7 +327,7 @@ impl> Global { at.attachment, view.life_guard.add_ref(), PhantomData, - ).is_some(); + ).is_ok(); let layouts = match view.inner { TextureViewInner::Native { ref source_id, .. } => { @@ -387,7 +387,7 @@ impl> Global { resolve_target, view.life_guard.add_ref(), PhantomData, - ).is_some(); + ).is_ok(); let layouts = match view.inner { TextureViewInner::Native { ref source_id, .. } => { diff --git a/wgpu-core/src/device/mod.rs b/wgpu-core/src/device/mod.rs index 40170c1f46..1115d9d2c4 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -474,7 +474,6 @@ impl> Global { let device = &device_guard[device_id]; let buffer = device.create_buffer(device_id, desc); let ref_count = buffer.life_guard.add_ref(); - let range = buffer.full_range; let id = hub.buffers.register_identity(id_in, buffer, &mut token); device @@ -484,7 +483,7 @@ impl> Global { .init( id, ref_count, - BufferState::from_selector(&range), + BufferState::with_usage(resource::BufferUsage::empty()), ) .unwrap(); id @@ -505,7 +504,6 @@ impl> Global { let device = &device_guard[device_id]; let mut buffer = device.create_buffer(device_id, &desc); let ref_count = buffer.life_guard.add_ref(); - let range = buffer.full_range; let pointer = match map_buffer(&device.raw, &mut buffer, 0 .. desc.size, HostMap::Write) { Ok(ptr) => ptr, @@ -521,10 +519,9 @@ impl> Global { .buffers.init( id, ref_count, - BufferState::from_selector(&range), + BufferState::with_usage(resource::BufferUsage::MAP_WRITE), ) - .unwrap() - .set((), resource::BufferUsage::MAP_WRITE); + .unwrap(); (id, pointer) } @@ -639,10 +636,9 @@ impl> Global { .textures.init( id, ref_count, - TextureState::from_selector(&range), + TextureState::with_range(&range), ) - .unwrap() - .set(range, resource::TextureUsage::UNINITIALIZED); + .unwrap(); id } diff --git a/wgpu-core/src/track/buffer.rs b/wgpu-core/src/track/buffer.rs index 83a9bb2ef8..cdec167ef8 100644 --- a/wgpu-core/src/track/buffer.rs +++ b/wgpu-core/src/track/buffer.rs @@ -31,8 +31,8 @@ impl Default for BufferState { } impl BufferState { - pub fn from_selector(_full_selector: &()) -> Self { - BufferState::default() + pub fn with_usage(usage: BufferUsage) -> Self { + Unit::new(usage) } } diff --git a/wgpu-core/src/track/mod.rs b/wgpu-core/src/track/mod.rs index cbec25aa20..01f973dd89 100644 --- a/wgpu-core/src/track/mod.rs +++ b/wgpu-core/src/track/mod.rs @@ -166,21 +166,6 @@ impl PendingTransition { } } -/// Helper initialization structure that allows setting the usage on -/// various sub-resources. -#[derive(Debug)] -pub struct Initializer<'a, S: ResourceState> { - id: S::Id, - state: &'a mut S, -} - -impl Initializer<'_, S> { - pub fn set(&mut self, selector: S::Selector, usage: S::Usage) -> bool { - self.state.change(self.id, selector, usage, None) - .is_ok() - } -} - /// A tracker for all resources of a given type. pub struct ResourceTracker { /// An association of known resource indices with their tracked states. @@ -267,28 +252,27 @@ impl ResourceTracker { /// Initialize a resource to be used. /// - /// Returns `false` if the resource is already tracked. + /// Returns false if the resource is already registered. pub fn init( &mut self, id: S::Id, ref_count: RefCount, state: S, - ) -> Option> { + ) -> Result<(), &S> { let (index, epoch, backend) = id.unzip(); debug_assert_eq!(backend, self.backend); match self.map.entry(index) { Entry::Vacant(e) => { - let res = e.insert(Resource { + e.insert(Resource { ref_count, state, epoch, }); - Some(Initializer { - id, - state: &mut res.state, - }) + Ok(()) + } + Entry::Occupied(e) => { + Err(&e.into_mut().state) } - Entry::Occupied(_) => None, } } diff --git a/wgpu-core/src/track/texture.rs b/wgpu-core/src/track/texture.rs index 1cc71bc8e9..d93997c733 100644 --- a/wgpu-core/src/track/texture.rs +++ b/wgpu-core/src/track/texture.rs @@ -34,17 +34,17 @@ impl PendingTransition { } impl TextureState { - pub fn from_selector(full_selector: &hal::image::SubresourceRange) -> Self { - debug_assert_eq!(full_selector.layers.start, 0); - debug_assert_eq!(full_selector.levels.start, 0); + pub fn with_range(range: &hal::image::SubresourceRange) -> Self { + debug_assert_eq!(range.layers.start, 0); + debug_assert_eq!(range.levels.start, 0); TextureState { mips: iter::repeat_with(|| { PlaneStates::from_range( - 0 .. full_selector.layers.end, + 0 .. range.layers.end, Unit::new(TextureUsage::UNINITIALIZED), ) }) - .take(full_selector.levels.end as usize) + .take(range.levels.end as usize) .collect(), full: true, }