Skip to main content

dynamis_abi/
counter.rs

1pub mod device {
2    use crate::wgsl::declare_constants;
3
4    declare_constants! {
5        pub const COUNTER_ENTRIES: usize = 0;
6        pub const COUNTER_PAIRS: usize = 1;
7        pub const COUNTER_GRID_LEVELS: usize = 2;
8        pub const COUNTER_CONTACTS: usize = 3;
9        pub const COUNTER_ARCHIVED: usize = 4;
10        pub const COUNTER_JOINTS: usize = 5;
11        pub const COUNTER_EVENTS: usize = 6;
12        pub const COUNTER_SPILLOVER_PAIRS: usize = 7;
13        pub const COUNTER_SPILLOVER_EVENTS: usize = 8;
14        pub const COUNTER_SPILLOVER_ENTRIES: usize = 9;
15        pub const COUNTER_RESTING: usize = 10;
16        pub const COUNTER_SPILLOVER_RESTING: usize = 11;
17        pub const COUNTER_SLEPT: usize = 12;
18        pub const COUNTER_WOKE: usize = 13;
19        pub const COUNTER_ACTIVE: usize = 14;
20        pub const COUNTER_WOKE_DEFERRED: usize = 15;
21        pub const COUNTER_RESTING_GATHER: usize = 16;
22        pub const COUNTER_RESTING_INDEX: usize = 17;
23        pub const COUNTER_RESTING_PENDING: usize = 18;
24        pub const COUNTER_BLOCKS: usize = 19;
25        pub const COUNTER_COARSE_ACTIVE: usize = 20;
26        pub const COUNTER_GRID_SCALE: usize = 21;
27        pub const COUNTER_GRID_EXTENT: usize = 22;
28        pub const COUNTER_BREAKS: usize = 23;
29        pub const COUNTER_PARTICLE_REACH: usize = 24;
30        pub const COUNTER_SPILLOVER_NEIGHBOURS: usize = 25;
31        pub const COUNTER_LIVE: usize = 26;
32        pub const COUNTER_SPILLOVER_LIVE: usize = 27;
33        pub const COUNTER_SOFT_ACTIVE: usize = 28;
34        pub const COUNTER_SOFT_SLEPT: usize = 29;
35        pub const COUNTER_SOFT_WOKE: usize = 30;
36        pub const COUNTER_DEVICE_COUNT: usize = 31;
37    }
38}
39
40pub mod host {
41    use super::device::COUNTER_DEVICE_COUNT;
42
43    pub const COUNT: usize = 7;
44
45    pub const COUNTER_BODIES: usize = COUNTER_DEVICE_COUNT;
46    pub const COUNTER_COLLIDERS: usize = COUNTER_DEVICE_COUNT + 1;
47    pub const COUNTER_CONSTRAINTS: usize = COUNTER_DEVICE_COUNT + 2;
48    pub const COUNTER_BODY_EDITS: usize = COUNTER_DEVICE_COUNT + 3;
49    pub const COUNTER_BODY_MOVES: usize = COUNTER_DEVICE_COUNT + 4;
50    pub const COUNTER_CONSTRAINT_COMMANDS: usize = COUNTER_DEVICE_COUNT + 5;
51    pub const COUNTER_CONSTRAINT_MOVES: usize = COUNTER_DEVICE_COUNT + 6;
52}
53
54pub use device::COUNTER_DEVICE_COUNT;
55
56pub const COUNTER_COUNT: usize = COUNTER_DEVICE_COUNT + host::COUNT;
57
58pub const COUNTER_STRIDE: u64 = 256;
59
60pub type Counters = [u32; COUNTER_COUNT];
61
62#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
63pub struct DeclaredCounters {
64    pub bodies: u32,
65    pub colliders: u32,
66    pub constraints: u32,
67    pub body_edits: u32,
68    pub body_moves: u32,
69    pub constraint_commands: u32,
70    pub constraint_moves: u32,
71}
72
73impl DeclaredCounters {
74    pub fn write_into(&self, counters: &mut Counters) {
75        counters[host::COUNTER_BODIES] = self.bodies;
76        counters[host::COUNTER_COLLIDERS] = self.colliders;
77        counters[host::COUNTER_CONSTRAINTS] = self.constraints;
78        counters[host::COUNTER_BODY_EDITS] = self.body_edits;
79        counters[host::COUNTER_BODY_MOVES] = self.body_moves;
80        counters[host::COUNTER_CONSTRAINT_COMMANDS] = self.constraint_commands;
81        counters[host::COUNTER_CONSTRAINT_MOVES] = self.constraint_moves;
82    }
83}