wgpu_core/track/
query_set.rs1use crate::{
2 resource::{QuerySet, Trackable},
3 track::metadata::ResourceMetadata,
4};
5use alloc::sync::Arc;
6
7#[derive(Debug)]
11pub(crate) struct QuerySetTracker {
12 metadata: ResourceMetadata<Arc<QuerySet>>,
13 size: usize,
14}
15
16impl QuerySetTracker {
17 pub fn new() -> Self {
18 Self {
19 metadata: ResourceMetadata::new(),
20 size: 0,
21 }
22 }
23
24 pub fn insert_single(&mut self, resource: Arc<QuerySet>) -> &Arc<QuerySet> {
29 let index = resource.tracker_index().as_usize();
30 self.allow_index(index);
31
32 unsafe {
33 self.metadata.insert(index, resource)
36 }
37 }
38
39 pub fn set_size(&mut self, size: usize) {
44 self.size = size;
45 self.metadata.set_size(size)
46 }
47
48 fn allow_index(&mut self, index: usize) {
50 if index >= self.size {
51 self.set_size(index + 1);
52 }
53 }
54
55 pub fn contains(&self, query_set: &QuerySet) -> bool {
57 self.metadata.contains(query_set.tracker_index().as_usize())
58 }
59
60 pub fn used_resources(&self) -> impl Iterator<Item = &Arc<QuerySet>> {
61 self.metadata.owned_resources()
62 }
63}