1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#[derive(thiserror::Error, Debug)] pub enum GPUError { #[error("GPUError: {0}")] Simple(&'static str), #[cfg(feature = "gpu")] #[error("Ocl Error: {0}")] Ocl(ocl::Error), #[cfg(feature = "gpu")] #[error("GPU taken by a high priority process!")] GPUTaken, #[cfg(feature = "gpu")] #[error("No kernel is initialized!")] KernelUninitialized, } pub type GPUResult<T> = std::result::Result<T, GPUError>; #[cfg(feature = "gpu")] impl From<ocl::Error> for GPUError { fn from(error: ocl::Error) -> Self { GPUError::Ocl(error) } } #[cfg(feature = "gpu")] impl From<std::boxed::Box<dyn std::any::Any + std::marker::Send>> for GPUError { fn from(e: std::boxed::Box<dyn std::any::Any + std::marker::Send>) -> Self { match e.downcast::<Self>() { Ok(err) => *err, Err(_) => GPUError::Simple("An unknown GPU error happened!"), } } }