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