rendy_chain/schedule/
submission.rs1use super::queue::QueueId;
2use crate::Id;
3use std::collections::HashMap;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
7pub struct SubmissionId {
8 pub queue: QueueId,
10
11 pub index: usize,
13}
14
15impl SubmissionId {
16 pub fn new(queue: QueueId, index: usize) -> Self {
18 SubmissionId { queue, index }
19 }
20
21 pub fn family(&self) -> rendy_core::hal::queue::QueueFamilyId {
23 self.queue.family()
24 }
25
26 pub fn queue(&self) -> QueueId {
28 self.queue
29 }
30
31 pub fn index(&self) -> usize {
33 self.index
34 }
35}
36
37#[derive(Clone, Debug)]
39pub struct Submission<S> {
40 node: usize,
41 id: SubmissionId,
42 buffer_links: HashMap<Id, usize>,
43 image_links: HashMap<Id, usize>,
44 wait_factor: usize,
45 submit_order: usize,
46 sync: S,
47}
48
49impl<S> Submission<S> {
50 pub fn node(&self) -> usize {
52 self.node
53 }
54
55 pub fn id(&self) -> SubmissionId {
57 self.id
58 }
59
60 pub fn sync(&self) -> &S {
62 &self.sync
63 }
64
65 pub fn wait_factor(&self) -> usize {
67 self.wait_factor
68 }
69
70 pub fn submit_order(&self) -> usize {
72 self.submit_order
73 }
74
75 pub fn buffer_link_index(&self, id: Id) -> usize {
77 self.buffer_links[&id]
78 }
79
80 pub fn set_buffer_link(&mut self, id: Id, link: usize) {
82 assert!(self.buffer_links.insert(id, link).is_none());
83 }
84
85 pub fn image_link_index(&self, id: Id) -> usize {
87 self.image_links[&id]
88 }
89
90 pub fn set_image_link(&mut self, id: Id, link: usize) {
92 assert!(self.image_links.insert(id, link).is_none());
93 }
94
95 pub(crate) fn new(
97 node: usize,
98 wait_factor: usize,
99 submit_order: usize,
100 id: SubmissionId,
101 sync: S,
102 ) -> Self {
103 Submission {
104 node,
105 buffer_links: HashMap::default(),
106 image_links: HashMap::default(),
107 id,
108 wait_factor,
109 submit_order,
110 sync,
111 }
112 }
113
114 pub fn set_sync<T>(&self, sync: T) -> Submission<T> {
116 Submission {
117 node: self.node,
118 buffer_links: self.buffer_links.clone(),
119 image_links: self.image_links.clone(),
120 id: self.id,
121 wait_factor: self.wait_factor,
122 submit_order: self.submit_order,
123 sync,
124 }
125 }
126}