mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
[core] Include SnatchLock in lock rankings.
This commit is contained in:
parent
43f2315753
commit
d089b86c59
@ -273,7 +273,7 @@ impl<A: HalApi> Device<A> {
|
||||
command_allocator,
|
||||
active_submission_index: AtomicU64::new(0),
|
||||
fence: RwLock::new(Some(fence)),
|
||||
snatchable_lock: unsafe { SnatchLock::new() },
|
||||
snatchable_lock: unsafe { SnatchLock::new(rank::DEVICE_SNATCHABLE_LOCK) },
|
||||
valid: AtomicBool::new(true),
|
||||
trackers: Mutex::new(rank::DEVICE_TRACKERS, Tracker::new()),
|
||||
tracker_indices: TrackerIndexAllocators::new(),
|
||||
|
||||
@ -87,7 +87,13 @@ macro_rules! define_lock_ranks {
|
||||
}
|
||||
|
||||
define_lock_ranks! {
|
||||
rank DEVICE_TEMP_SUSPECTED "Device::temp_suspected" followed by {
|
||||
SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
|
||||
COMMAND_BUFFER_DATA,
|
||||
DEVICE_TRACKERS,
|
||||
}
|
||||
rank COMMAND_BUFFER_DATA "CommandBuffer::data" followed by {
|
||||
DEVICE_SNATCHABLE_LOCK,
|
||||
DEVICE_USAGE_SCOPES,
|
||||
SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
|
||||
BUFFER_BIND_GROUP_STATE_BUFFERS,
|
||||
@ -95,42 +101,53 @@ define_lock_ranks! {
|
||||
BUFFER_MAP_STATE,
|
||||
STATELESS_BIND_GROUP_STATE_RESOURCES,
|
||||
}
|
||||
rank STAGING_BUFFER_RAW "StagingBuffer::raw" followed by { }
|
||||
rank COMMAND_ALLOCATOR_FREE_ENCODERS "CommandAllocator::free_encoders" followed by {
|
||||
rank DEVICE_SNATCHABLE_LOCK "Device::snatchable_lock" followed by {
|
||||
SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
|
||||
}
|
||||
rank DEVICE_TRACKERS "Device::trackers" followed by { }
|
||||
rank DEVICE_LIFE_TRACKER "Device::life_tracker" followed by {
|
||||
COMMAND_ALLOCATOR_FREE_ENCODERS,
|
||||
DEVICE_TRACE,
|
||||
BUFFER_MAP_STATE,
|
||||
BUFFER_BIND_GROUP_STATE_BUFFERS,
|
||||
TEXTURE_BIND_GROUP_STATE_TEXTURES,
|
||||
STATELESS_BIND_GROUP_STATE_RESOURCES,
|
||||
// Uncomment this to see an interesting cycle.
|
||||
// DEVICE_TEMP_SUSPECTED,
|
||||
// COMMAND_BUFFER_DATA,
|
||||
}
|
||||
rank DEVICE_TEMP_SUSPECTED "Device::temp_suspected" followed by {
|
||||
rank BUFFER_MAP_STATE "Buffer::map_state" followed by {
|
||||
DEVICE_PENDING_WRITES,
|
||||
SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
|
||||
COMMAND_BUFFER_DATA,
|
||||
DEVICE_TRACKERS,
|
||||
DEVICE_TRACE,
|
||||
}
|
||||
rank DEVICE_PENDING_WRITES "Device::pending_writes" followed by {
|
||||
COMMAND_ALLOCATOR_FREE_ENCODERS,
|
||||
SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
|
||||
DEVICE_LIFE_TRACKER,
|
||||
}
|
||||
rank DEVICE_LIFE_TRACKER "Device::life_tracker" followed by {
|
||||
COMMAND_ALLOCATOR_FREE_ENCODERS,
|
||||
// Uncomment this to see an interesting cycle.
|
||||
// DEVICE_TEMP_SUSPECTED,
|
||||
DEVICE_TRACE,
|
||||
}
|
||||
rank COMMAND_ALLOCATOR_FREE_ENCODERS "CommandAllocator::free_encoders" followed by {
|
||||
SHARED_TRACKER_INDEX_ALLOCATOR_INNER,
|
||||
}
|
||||
|
||||
rank BUFFER_BIND_GROUPS "Buffer::bind_groups" followed by { }
|
||||
rank BUFFER_BIND_GROUP_STATE_BUFFERS "BufferBindGroupState::buffers" followed by { }
|
||||
rank BUFFER_SYNC_MAPPED_WRITES "Buffer::sync_mapped_writes" followed by { }
|
||||
rank DEVICE_DEFERRED_DESTROY "Device::deferred_destroy" followed by { }
|
||||
#[allow(dead_code)]
|
||||
rank DEVICE_TRACE "Device::trace" followed by { }
|
||||
rank DEVICE_TRACKERS "Device::trackers" followed by { }
|
||||
rank DEVICE_USAGE_SCOPES "Device::usage_scopes" followed by { }
|
||||
rank BUFFER_SYNC_MAPPED_WRITES "Buffer::sync_mapped_writes" followed by { }
|
||||
rank BUFFER_MAP_STATE "Buffer::map_state" followed by { DEVICE_PENDING_WRITES }
|
||||
rank BUFFER_BIND_GROUPS "Buffer::bind_groups" followed by { }
|
||||
rank TEXTURE_VIEWS "Texture::views" followed by { }
|
||||
rank TEXTURE_BIND_GROUPS "Texture::bind_groups" followed by { }
|
||||
rank IDENTITY_MANAGER_VALUES "IdentityManager::values" followed by { }
|
||||
rank RESOURCE_POOL_INNER "ResourcePool::inner" followed by { }
|
||||
rank BUFFER_BIND_GROUP_STATE_BUFFERS "BufferBindGroupState::buffers" followed by { }
|
||||
rank STATELESS_BIND_GROUP_STATE_RESOURCES "StatelessBindGroupState::resources" followed by { }
|
||||
rank TEXTURE_BIND_GROUP_STATE_TEXTURES "TextureBindGroupState::textures" followed by { }
|
||||
rank SHARED_TRACKER_INDEX_ALLOCATOR_INNER "SharedTrackerIndexAllocator::inner" followed by { }
|
||||
rank STAGING_BUFFER_RAW "StagingBuffer::raw" followed by { }
|
||||
rank STATELESS_BIND_GROUP_STATE_RESOURCES "StatelessBindGroupState::resources" followed by { }
|
||||
rank SURFACE_PRESENTATION "Surface::presentation" followed by { }
|
||||
rank TEXTURE_BIND_GROUPS "Texture::bind_groups" followed by { }
|
||||
rank TEXTURE_BIND_GROUP_STATE_TEXTURES "TextureBindGroupState::textures" followed by { }
|
||||
rank TEXTURE_VIEWS "Texture::views" followed by { }
|
||||
|
||||
#[cfg(test)]
|
||||
rank PAWN "pawn" followed by { ROOK, BISHOP }
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#![allow(unused)]
|
||||
|
||||
use parking_lot::{RwLock, RwLockReadGuard, RwLockWriteGuard};
|
||||
use crate::lock::{RwLock, RwLockReadGuard, RwLockWriteGuard};
|
||||
use std::{
|
||||
backtrace::Backtrace,
|
||||
cell::{Cell, RefCell, UnsafeCell},
|
||||
@ -8,6 +8,8 @@ use std::{
|
||||
thread,
|
||||
};
|
||||
|
||||
use crate::lock::rank;
|
||||
|
||||
/// A guard that provides read access to snatchable data.
|
||||
pub struct SnatchGuard<'a>(RwLockReadGuard<'a, ()>);
|
||||
/// A guard that allows snatching the snatchable data.
|
||||
@ -128,9 +130,9 @@ impl SnatchLock {
|
||||
/// right SnatchLock (the one associated to the same device). This method is unsafe
|
||||
/// to force force sers to think twice about creating a SnatchLock. The only place this
|
||||
/// method should be called is when creating the device.
|
||||
pub unsafe fn new() -> Self {
|
||||
pub unsafe fn new(rank: rank::LockRank) -> Self {
|
||||
SnatchLock {
|
||||
lock: RwLock::new(()),
|
||||
lock: RwLock::new(rank, ()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user