summaryrefslogtreecommitdiffstats
path: root/third_party/rust/wgpu-core/src/track/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/wgpu-core/src/track/mod.rs')
-rw-r--r--third_party/rust/wgpu-core/src/track/mod.rs45
1 files changed, 34 insertions, 11 deletions
diff --git a/third_party/rust/wgpu-core/src/track/mod.rs b/third_party/rust/wgpu-core/src/track/mod.rs
index 374dfe7493..cc20b2a01c 100644
--- a/third_party/rust/wgpu-core/src/track/mod.rs
+++ b/third_party/rust/wgpu-core/src/track/mod.rs
@@ -102,10 +102,14 @@ mod stateless;
mod texture;
use crate::{
- binding_model, command, conv, hal_api::HalApi, id, pipeline, resource, snatch::SnatchGuard,
+ binding_model, command, conv,
+ hal_api::HalApi,
+ id,
+ lock::{rank, Mutex, RwLock},
+ pipeline, resource,
+ snatch::SnatchGuard,
};
-use parking_lot::{Mutex, RwLock};
use std::{fmt, ops, sync::Arc};
use thiserror::Error;
@@ -136,7 +140,8 @@ impl TrackerIndex {
/// of a certain type. This index is separate from the resource ID for various reasons:
/// - There can be multiple resource IDs pointing the the same resource.
/// - IDs of dead handles can be recycled while resources are internally held alive (and tracked).
-/// - The plan is to remove IDs in the long run (https://github.com/gfx-rs/wgpu/issues/5121).
+/// - The plan is to remove IDs in the long run
+/// ([#5121](https://github.com/gfx-rs/wgpu/issues/5121)).
/// In order to produce these tracker indices, there is a shared TrackerIndexAllocator
/// per resource type. Indices have the same lifetime as the internal resource they
/// are associated to (alloc happens when creating the resource and free is called when
@@ -190,7 +195,10 @@ pub(crate) struct SharedTrackerIndexAllocator {
impl SharedTrackerIndexAllocator {
pub fn new() -> Self {
SharedTrackerIndexAllocator {
- inner: Mutex::new(TrackerIndexAllocator::new()),
+ inner: Mutex::new(
+ rank::SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
+ TrackerIndexAllocator::new(),
+ ),
}
}
@@ -480,11 +488,26 @@ impl<A: HalApi> RenderBundleScope<A> {
/// Create the render bundle scope and pull the maximum IDs from the hubs.
pub fn new() -> Self {
Self {
- buffers: RwLock::new(BufferUsageScope::default()),
- textures: RwLock::new(TextureUsageScope::default()),
- bind_groups: RwLock::new(StatelessTracker::new()),
- render_pipelines: RwLock::new(StatelessTracker::new()),
- query_sets: RwLock::new(StatelessTracker::new()),
+ buffers: RwLock::new(
+ rank::RENDER_BUNDLE_SCOPE_BUFFERS,
+ BufferUsageScope::default(),
+ ),
+ textures: RwLock::new(
+ rank::RENDER_BUNDLE_SCOPE_TEXTURES,
+ TextureUsageScope::default(),
+ ),
+ bind_groups: RwLock::new(
+ rank::RENDER_BUNDLE_SCOPE_BIND_GROUPS,
+ StatelessTracker::new(),
+ ),
+ render_pipelines: RwLock::new(
+ rank::RENDER_BUNDLE_SCOPE_RENDER_PIPELINES,
+ StatelessTracker::new(),
+ ),
+ query_sets: RwLock::new(
+ rank::RENDER_BUNDLE_SCOPE_QUERY_SETS,
+ StatelessTracker::new(),
+ ),
}
}
@@ -639,8 +662,8 @@ impl<A: HalApi> Tracker<A> {
///
/// If a transition is needed to get the resources into the needed
/// state, those transitions are stored within the tracker. A
- /// subsequent call to [`BufferTracker::drain`] or
- /// [`TextureTracker::drain`] is needed to get those transitions.
+ /// subsequent call to [`BufferTracker::drain_transitions`] or
+ /// [`TextureTracker::drain_transitions`] is needed to get those transitions.
///
/// This is a really funky method used by Compute Passes to generate
/// barriers after a call to dispatch without needing to iterate