1#[cfg(feature = "rafx-dx12")]
2use crate::dx12::RafxShaderModuleDx12;
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::RafxShaderModuleEmpty;
14#[cfg(feature = "rafx-gles2")]
15use crate::gles2::RafxShaderModuleGles2;
16#[cfg(feature = "rafx-gles3")]
17use crate::gles3::RafxShaderModuleGles3;
18#[cfg(feature = "rafx-metal")]
19use crate::metal::RafxShaderModuleMetal;
20#[cfg(feature = "rafx-vulkan")]
21use crate::vulkan::RafxShaderModuleVulkan;
22
23#[derive(Clone, Debug)]
29pub enum RafxShaderModule {
30 #[cfg(feature = "rafx-dx12")]
31 Dx12(RafxShaderModuleDx12),
32 #[cfg(feature = "rafx-vulkan")]
33 Vk(RafxShaderModuleVulkan),
34 #[cfg(feature = "rafx-metal")]
35 Metal(RafxShaderModuleMetal),
36 #[cfg(feature = "rafx-gles2")]
37 Gles2(RafxShaderModuleGles2),
38 #[cfg(feature = "rafx-gles3")]
39 Gles3(RafxShaderModuleGles3),
40 #[cfg(any(
41 feature = "rafx-empty",
42 not(any(
43 feature = "rafx-dx12",
44 feature = "rafx-metal",
45 feature = "rafx-vulkan",
46 feature = "rafx-gles2",
47 feature = "rafx-gles3"
48 ))
49 ))]
50 Empty(RafxShaderModuleEmpty),
51}
52
53impl RafxShaderModule {
54 #[cfg(feature = "rafx-dx12")]
57 pub fn dx12_shader_module(&self) -> Option<&RafxShaderModuleDx12> {
58 match self {
59 #[cfg(feature = "rafx-dx12")]
60 RafxShaderModule::Dx12(inner) => Some(inner),
61 #[cfg(feature = "rafx-vulkan")]
62 RafxShaderModule::Vk(_) => None,
63 #[cfg(feature = "rafx-metal")]
64 RafxShaderModule::Metal(_) => None,
65 #[cfg(feature = "rafx-gles2")]
66 RafxShaderModule::Gles2(_) => None,
67 #[cfg(feature = "rafx-gles3")]
68 RafxShaderModule::Gles3(_) => None,
69 #[cfg(any(
70 feature = "rafx-empty",
71 not(any(
72 feature = "rafx-dx12",
73 feature = "rafx-metal",
74 feature = "rafx-vulkan",
75 feature = "rafx-gles2",
76 feature = "rafx-gles3"
77 ))
78 ))]
79 RafxShaderModule::Empty(_) => None,
80 }
81 }
82
83 #[cfg(feature = "rafx-vulkan")]
86 pub fn vk_shader_module(&self) -> Option<&RafxShaderModuleVulkan> {
87 match self {
88 #[cfg(feature = "rafx-dx12")]
89 RafxShaderModule::Dx12(_) => None,
90 #[cfg(feature = "rafx-vulkan")]
91 RafxShaderModule::Vk(inner) => Some(inner),
92 #[cfg(feature = "rafx-metal")]
93 RafxShaderModule::Metal(_) => None,
94 #[cfg(feature = "rafx-gles2")]
95 RafxShaderModule::Gles2(_) => None,
96 #[cfg(feature = "rafx-gles3")]
97 RafxShaderModule::Gles3(_) => None,
98 #[cfg(any(
99 feature = "rafx-empty",
100 not(any(
101 feature = "rafx-dx12",
102 feature = "rafx-metal",
103 feature = "rafx-vulkan",
104 feature = "rafx-gles2",
105 feature = "rafx-gles3"
106 ))
107 ))]
108 RafxShaderModule::Empty(_) => None,
109 }
110 }
111
112 #[cfg(feature = "rafx-metal")]
115 pub fn metal_shader_module(&self) -> Option<&RafxShaderModuleMetal> {
116 match self {
117 #[cfg(feature = "rafx-dx12")]
118 RafxShaderModule::Dx12(_) => None,
119 #[cfg(feature = "rafx-vulkan")]
120 RafxShaderModule::Vk(_) => None,
121 #[cfg(feature = "rafx-metal")]
122 RafxShaderModule::Metal(inner) => Some(inner),
123 #[cfg(feature = "rafx-gles2")]
124 RafxShaderModule::Gles2(_) => None,
125 #[cfg(feature = "rafx-gles3")]
126 RafxShaderModule::Gles3(_) => None,
127 #[cfg(any(
128 feature = "rafx-empty",
129 not(any(
130 feature = "rafx-dx12",
131 feature = "rafx-metal",
132 feature = "rafx-vulkan",
133 feature = "rafx-gles2",
134 feature = "rafx-gles3"
135 ))
136 ))]
137 RafxShaderModule::Empty(_) => None,
138 }
139 }
140
141 #[cfg(feature = "rafx-gles2")]
144 pub fn gles2_shader_module(&self) -> Option<&RafxShaderModuleGles2> {
145 match self {
146 #[cfg(feature = "rafx-dx12")]
147 RafxShaderModule::Dx12(_) => None,
148 #[cfg(feature = "rafx-vulkan")]
149 RafxShaderModule::Vk(_) => None,
150 #[cfg(feature = "rafx-metal")]
151 RafxShaderModule::Metal(_) => None,
152 #[cfg(feature = "rafx-gles2")]
153 RafxShaderModule::Gles2(inner) => Some(inner),
154 #[cfg(feature = "rafx-gles3")]
155 RafxShaderModule::Gles3(_) => None,
156 #[cfg(any(
157 feature = "rafx-empty",
158 not(any(
159 feature = "rafx-dx12",
160 feature = "rafx-metal",
161 feature = "rafx-vulkan",
162 feature = "rafx-gles2",
163 feature = "rafx-gles3"
164 ))
165 ))]
166 RafxShaderModule::Empty(_) => None,
167 }
168 }
169
170 #[cfg(feature = "rafx-gles3")]
173 pub fn gles3_shader_module(&self) -> Option<&RafxShaderModuleGles3> {
174 match self {
175 #[cfg(feature = "rafx-dx12")]
176 RafxShaderModule::Dx12(_) => None,
177 #[cfg(feature = "rafx-vulkan")]
178 RafxShaderModule::Vk(_) => None,
179 #[cfg(feature = "rafx-metal")]
180 RafxShaderModule::Metal(_) => None,
181 #[cfg(feature = "rafx-gles2")]
182 RafxShaderModule::Gles2(_) => None,
183 #[cfg(feature = "rafx-gles3")]
184 RafxShaderModule::Gles3(inner) => Some(inner),
185 #[cfg(any(
186 feature = "rafx-empty",
187 not(any(
188 feature = "rafx-dx12",
189 feature = "rafx-metal",
190 feature = "rafx-vulkan",
191 feature = "rafx-gles2",
192 feature = "rafx-gles3"
193 ))
194 ))]
195 RafxShaderModule::Empty(_) => None,
196 }
197 }
198
199 #[cfg(any(
202 feature = "rafx-empty",
203 not(any(
204 feature = "rafx-dx12",
205 feature = "rafx-metal",
206 feature = "rafx-vulkan",
207 feature = "rafx-gles2",
208 feature = "rafx-gles3"
209 ))
210 ))]
211 pub fn empty_shader_module(&self) -> Option<&RafxShaderModuleEmpty> {
212 match self {
213 #[cfg(feature = "rafx-dx12")]
214 RafxShaderModule::Dx12(_) => None,
215 #[cfg(feature = "rafx-vulkan")]
216 RafxShaderModule::Vk(_) => None,
217 #[cfg(feature = "rafx-metal")]
218 RafxShaderModule::Metal(_) => None,
219 #[cfg(feature = "rafx-gles2")]
220 RafxShaderModule::Gles2(_) => None,
221 #[cfg(feature = "rafx-gles3")]
222 RafxShaderModule::Gles3(_) => None,
223 #[cfg(any(
224 feature = "rafx-empty",
225 not(any(
226 feature = "rafx-dx12",
227 feature = "rafx-metal",
228 feature = "rafx-vulkan",
229 feature = "rafx-gles2",
230 feature = "rafx-gles3"
231 ))
232 ))]
233 RafxShaderModule::Empty(inner) => Some(inner),
234 }
235 }
236}