1#![allow(dead_code)]
2use crate::op::{BinaryOpT, CmpOp, ReduceOp, UnaryOpT};
3use crate::{CpuStorage, DType, Error, Layout, Result, Shape};
4
5#[derive(Debug, Clone)]
6pub struct VulkanDevice;
7
8#[derive(Debug)]
9pub struct VulkanStorage;
10
11#[derive(thiserror::Error, Debug)]
12pub enum VulkanError {
13 #[error("{0}")]
14 Message(String),
15}
16
17impl From<String> for VulkanError {
18 fn from(e: String) -> Self {
19 VulkanError::Message(e)
20 }
21}
22
23fn err<T>() -> Result<T> {
24 Err(Error::Msg(
25 "hanzo was not compiled with vulkan support".into(),
26 ))
27}
28
29macro_rules! fail {
30 () => {
31 unimplemented!("vulkan support has not been enabled, add `vulkan` feature to enable.")
32 };
33}
34
35impl crate::backend::BackendStorage for VulkanStorage {
36 type Device = VulkanDevice;
37
38 fn try_clone(&self, _: &Layout) -> Result<Self> {
39 err()
40 }
41
42 fn dtype(&self) -> DType {
43 fail!()
44 }
45
46 fn device(&self) -> &Self::Device {
47 fail!()
48 }
49
50 fn const_set(&mut self, _: crate::scalar::Scalar, _: &Layout) -> Result<()> {
51 err()
52 }
53
54 fn to_cpu_storage(&self) -> Result<CpuStorage> {
55 err()
56 }
57
58 fn affine(&self, _: &Layout, _: f64, _: f64) -> Result<Self> {
59 err()
60 }
61
62 fn powf(&self, _: &Layout, _: f64) -> Result<Self> {
63 err()
64 }
65
66 fn elu(&self, _: &Layout, _: f64) -> Result<Self> {
67 err()
68 }
69
70 fn reduce_op(&self, _: ReduceOp, _: &Layout, _: &[usize]) -> Result<Self> {
71 err()
72 }
73
74 fn cmp(&self, _: CmpOp, _: &Self, _: &Layout, _: &Layout) -> Result<Self> {
75 err()
76 }
77
78 fn to_dtype(&self, _: &Layout, _: DType) -> Result<Self> {
79 err()
80 }
81
82 fn unary_impl<B: UnaryOpT>(&self, _: &Layout) -> Result<Self> {
83 err()
84 }
85
86 fn binary_impl<B: BinaryOpT>(&self, _: &Self, _: &Layout, _: &Layout) -> Result<Self> {
87 err()
88 }
89
90 fn where_cond(&self, _: &Layout, _: &Self, _: &Layout, _: &Self, _: &Layout) -> Result<Self> {
91 err()
92 }
93
94 fn conv1d(
95 &self,
96 _: &Layout,
97 _: &Self,
98 _: &Layout,
99 _: &crate::conv::ParamsConv1D,
100 ) -> Result<Self> {
101 err()
102 }
103
104 fn conv_transpose1d(
105 &self,
106 _l: &Layout,
107 _kernel: &Self,
108 _kernel_l: &Layout,
109 _params: &crate::conv::ParamsConvTranspose1D,
110 ) -> Result<Self> {
111 err()
112 }
113
114 fn conv2d(
115 &self,
116 _: &Layout,
117 _: &Self,
118 _: &Layout,
119 _: &crate::conv::ParamsConv2D,
120 ) -> Result<Self> {
121 err()
122 }
123
124 fn conv_transpose2d(
125 &self,
126 _l: &Layout,
127 _kernel: &Self,
128 _kernel_l: &Layout,
129 _params: &crate::conv::ParamsConvTranspose2D,
130 ) -> Result<Self> {
131 err()
132 }
133
134 fn index_select(&self, _: &Self, _: &Layout, _: &Layout, _: usize) -> Result<Self> {
135 err()
136 }
137 fn gather(&self, _: &Layout, _: &Self, _: &Layout, _: usize) -> Result<Self> {
138 err()
139 }
140
141 fn scatter_set(
142 &mut self,
143 _: &Layout,
144 _: &Self,
145 _: &Layout,
146 _: &Self,
147 _: &Layout,
148 _: usize,
149 ) -> Result<()> {
150 err()
151 }
152
153 fn scatter_add_set(
154 &mut self,
155 _: &Layout,
156 _: &Self,
157 _: &Layout,
158 _: &Self,
159 _: &Layout,
160 _: usize,
161 ) -> Result<()> {
162 err()
163 }
164
165 fn index_add(
166 &self,
167 _: &Layout,
168 _: &Self,
169 _: &Layout,
170 _: &Self,
171 _: &Layout,
172 _: usize,
173 ) -> Result<Self> {
174 err()
175 }
176
177 fn matmul(
178 &self,
179 _: &Self,
180 _: (usize, usize, usize, usize),
181 _: &Layout,
182 _: &Layout,
183 ) -> Result<Self> {
184 err()
185 }
186
187 fn copy_strided_src(&self, _: &mut Self, _: usize, _: &Layout) -> Result<()> {
188 err()
189 }
190
191 fn copy2d(
192 &self,
193 _: &mut Self,
194 _: usize,
195 _: usize,
196 _: usize,
197 _: usize,
198 _: usize,
199 _: usize,
200 ) -> Result<()> {
201 err()
202 }
203
204 fn avg_pool2d(&self, _: &Layout, _: (usize, usize), _: (usize, usize)) -> Result<Self> {
205 err()
206 }
207
208 fn max_pool2d(&self, _: &Layout, _: (usize, usize), _: (usize, usize)) -> Result<Self> {
209 err()
210 }
211
212 fn upsample_nearest1d(&self, _: &Layout, _: usize) -> Result<Self> {
213 err()
214 }
215
216 fn upsample_nearest2d(&self, _: &Layout, _: usize, _: usize) -> Result<Self> {
217 err()
218 }
219
220 fn upsample_bilinear2d(
221 &self,
222 _: &Layout,
223 _: usize,
224 _: usize,
225 _: bool,
226 _: Option<f64>,
227 _: Option<f64>,
228 ) -> Result<Self> {
229 err()
230 }
231}
232
233impl crate::backend::BackendDevice for VulkanDevice {
234 type Storage = VulkanStorage;
235 fn new(_: usize) -> Result<Self> {
236 err()
237 }
238
239 fn set_seed(&self, _: u64) -> Result<()> {
240 err()
241 }
242
243 fn get_current_seed(&self) -> Result<u64> {
244 err()
245 }
246
247 fn location(&self) -> crate::DeviceLocation {
248 fail!()
249 }
250
251 fn same_device(&self, _: &Self) -> bool {
252 fail!()
253 }
254
255 fn zeros_impl(&self, _shape: &Shape, _dtype: DType) -> Result<Self::Storage> {
256 err()
257 }
258
259 unsafe fn alloc_uninit(&self, _shape: &Shape, _dtype: DType) -> Result<Self::Storage> {
260 err()
261 }
262
263 fn storage_from_slice<T: crate::WithDType>(&self, _: &[T]) -> Result<Self::Storage> {
264 err()
265 }
266
267 fn storage_from_cpu_storage(&self, _: &CpuStorage) -> Result<Self::Storage> {
268 err()
269 }
270
271 fn storage_from_cpu_storage_owned(&self, _: CpuStorage) -> Result<Self::Storage> {
272 err()
273 }
274
275 fn rand_uniform(&self, _: &Shape, _: DType, _: f64, _: f64) -> Result<Self::Storage> {
276 err()
277 }
278
279 fn rand_normal(&self, _: &Shape, _: DType, _: f64, _: f64) -> Result<Self::Storage> {
280 err()
281 }
282
283 fn synchronize(&self) -> Result<()> {
284 Ok(())
285 }
286}