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}