1#[cfg(feature = "rafx-dx12")]
2use crate::dx12::RafxSemaphoreDx12;
3#[cfg(any(
4 feature = "rafx-empty",
5 not(any(
6 feature = "rafx-dx12",
7 feature = "rafx-metal",
8 feature = "rafx-vulkan",
9 feature = "rafx-gles2",
10 feature = "rafx-gles3"
11 ))
12))]
13use crate::empty::RafxSemaphoreEmpty;
14#[cfg(feature = "rafx-gles2")]
15use crate::gles2::RafxSemaphoreGles2;
16#[cfg(feature = "rafx-gles3")]
17use crate::gles3::RafxSemaphoreGles3;
18#[cfg(feature = "rafx-metal")]
19use crate::metal::RafxSemaphoreMetal;
20#[cfg(feature = "rafx-vulkan")]
21use crate::vulkan::RafxSemaphoreVulkan;
22
23pub enum RafxSemaphore {
32 #[cfg(feature = "rafx-dx12")]
33 Dx12(RafxSemaphoreDx12),
34 #[cfg(feature = "rafx-vulkan")]
35 Vk(RafxSemaphoreVulkan),
36 #[cfg(feature = "rafx-metal")]
37 Metal(RafxSemaphoreMetal),
38 #[cfg(feature = "rafx-gles2")]
39 Gles2(RafxSemaphoreGles2),
40 #[cfg(feature = "rafx-gles3")]
41 Gles3(RafxSemaphoreGles3),
42 #[cfg(any(
43 feature = "rafx-empty",
44 not(any(
45 feature = "rafx-dx12",
46 feature = "rafx-metal",
47 feature = "rafx-vulkan",
48 feature = "rafx-gles2",
49 feature = "rafx-gles3"
50 ))
51 ))]
52 Empty(RafxSemaphoreEmpty),
53}
54
55impl RafxSemaphore {
56 #[cfg(feature = "rafx-dx12")]
59 pub fn dx12_semaphore(&self) -> Option<&RafxSemaphoreDx12> {
60 match self {
61 #[cfg(feature = "rafx-dx12")]
62 RafxSemaphore::Dx12(inner) => Some(inner),
63 #[cfg(feature = "rafx-vulkan")]
64 RafxSemaphore::Vk(_) => None,
65 #[cfg(feature = "rafx-metal")]
66 RafxSemaphore::Metal(_) => None,
67 #[cfg(feature = "rafx-gles2")]
68 RafxSemaphore::Gles2(_) => None,
69 #[cfg(feature = "rafx-gles3")]
70 RafxSemaphore::Gles3(_) => None,
71 #[cfg(any(
72 feature = "rafx-empty",
73 not(any(
74 feature = "rafx-dx12",
75 feature = "rafx-metal",
76 feature = "rafx-vulkan",
77 feature = "rafx-gles2",
78 feature = "rafx-gles3"
79 ))
80 ))]
81 RafxSemaphore::Empty(_) => None,
82 }
83 }
84
85 #[cfg(feature = "rafx-vulkan")]
88 pub fn vk_semaphore(&self) -> Option<&RafxSemaphoreVulkan> {
89 match self {
90 #[cfg(feature = "rafx-dx12")]
91 RafxSemaphore::Dx12(_) => None,
92 #[cfg(feature = "rafx-vulkan")]
93 RafxSemaphore::Vk(inner) => Some(inner),
94 #[cfg(feature = "rafx-metal")]
95 RafxSemaphore::Metal(_) => None,
96 #[cfg(feature = "rafx-gles2")]
97 RafxSemaphore::Gles2(_) => None,
98 #[cfg(feature = "rafx-gles3")]
99 RafxSemaphore::Gles3(_) => None,
100 #[cfg(any(
101 feature = "rafx-empty",
102 not(any(
103 feature = "rafx-dx12",
104 feature = "rafx-metal",
105 feature = "rafx-vulkan",
106 feature = "rafx-gles2",
107 feature = "rafx-gles3"
108 ))
109 ))]
110 RafxSemaphore::Empty(_) => None,
111 }
112 }
113
114 #[cfg(feature = "rafx-metal")]
117 pub fn metal_semaphore(&self) -> Option<&RafxSemaphoreMetal> {
118 match self {
119 #[cfg(feature = "rafx-dx12")]
120 RafxSemaphore::Dx12(_) => None,
121 #[cfg(feature = "rafx-vulkan")]
122 RafxSemaphore::Vk(_) => None,
123 #[cfg(feature = "rafx-metal")]
124 RafxSemaphore::Metal(inner) => Some(inner),
125 #[cfg(feature = "rafx-gles2")]
126 RafxSemaphore::Gles2(_) => None,
127 #[cfg(feature = "rafx-gles3")]
128 RafxSemaphore::Gles3(_) => None,
129 #[cfg(any(
130 feature = "rafx-empty",
131 not(any(
132 feature = "rafx-dx12",
133 feature = "rafx-metal",
134 feature = "rafx-vulkan",
135 feature = "rafx-gles2",
136 feature = "rafx-gles3"
137 ))
138 ))]
139 RafxSemaphore::Empty(_) => None,
140 }
141 }
142
143 #[cfg(feature = "rafx-gles2")]
146 pub fn gles2_semaphore(&self) -> Option<&RafxSemaphoreGles2> {
147 match self {
148 #[cfg(feature = "rafx-dx12")]
149 RafxSemaphore::Dx12(_) => None,
150 #[cfg(feature = "rafx-vulkan")]
151 RafxSemaphore::Vk(_) => None,
152 #[cfg(feature = "rafx-metal")]
153 RafxSemaphore::Metal(_) => None,
154 #[cfg(feature = "rafx-gles2")]
155 RafxSemaphore::Gles2(inner) => Some(inner),
156 #[cfg(feature = "rafx-gles3")]
157 RafxSemaphore::Gles3(_) => None,
158 #[cfg(any(
159 feature = "rafx-empty",
160 not(any(
161 feature = "rafx-dx12",
162 feature = "rafx-metal",
163 feature = "rafx-vulkan",
164 feature = "rafx-gles2",
165 feature = "rafx-gles3"
166 ))
167 ))]
168 RafxSemaphore::Empty(_) => None,
169 }
170 }
171
172 #[cfg(feature = "rafx-gles3")]
175 pub fn gles3_semaphore(&self) -> Option<&RafxSemaphoreGles3> {
176 match self {
177 #[cfg(feature = "rafx-dx12")]
178 RafxSemaphore::Dx12(_) => None,
179 #[cfg(feature = "rafx-vulkan")]
180 RafxSemaphore::Vk(_) => None,
181 #[cfg(feature = "rafx-metal")]
182 RafxSemaphore::Metal(_) => None,
183 #[cfg(feature = "rafx-gles2")]
184 RafxSemaphore::Gles2(_) => None,
185 #[cfg(feature = "rafx-gles3")]
186 RafxSemaphore::Gles3(inner) => Some(inner),
187 #[cfg(any(
188 feature = "rafx-empty",
189 not(any(
190 feature = "rafx-dx12",
191 feature = "rafx-metal",
192 feature = "rafx-vulkan",
193 feature = "rafx-gles2",
194 feature = "rafx-gles3"
195 ))
196 ))]
197 RafxSemaphore::Empty(_) => None,
198 }
199 }
200
201 #[cfg(any(
204 feature = "rafx-empty",
205 not(any(
206 feature = "rafx-dx12",
207 feature = "rafx-metal",
208 feature = "rafx-vulkan",
209 feature = "rafx-gles2",
210 feature = "rafx-gles3"
211 ))
212 ))]
213 pub fn empty_semaphore(&self) -> Option<&RafxSemaphoreEmpty> {
214 match self {
215 #[cfg(feature = "rafx-dx12")]
216 RafxSemaphore::Dx12(_) => None,
217 #[cfg(feature = "rafx-vulkan")]
218 RafxSemaphore::Vk(_) => None,
219 #[cfg(feature = "rafx-metal")]
220 RafxSemaphore::Metal(_) => None,
221 #[cfg(feature = "rafx-gles2")]
222 RafxSemaphore::Gles2(_) => None,
223 #[cfg(feature = "rafx-gles3")]
224 RafxSemaphore::Gles3(_) => None,
225 #[cfg(any(
226 feature = "rafx-empty",
227 not(any(
228 feature = "rafx-dx12",
229 feature = "rafx-metal",
230 feature = "rafx-vulkan",
231 feature = "rafx-gles2",
232 feature = "rafx-gles3"
233 ))
234 ))]
235 RafxSemaphore::Empty(inner) => Some(inner),
236 }
237 }
238}