use std::fmt;
#[derive(Debug)]
pub enum GpuError {
NoAdapter,
DeviceRequest(wgpu::RequestDeviceError),
ShaderCompilation(String),
BufferOperation(String),
Timeout,
Other(String),
}
impl fmt::Display for GpuError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
GpuError::NoAdapter => write!(f, "No suitable GPU adapter found"),
GpuError::DeviceRequest(e) => write!(f, "Failed to request GPU device: {}", e),
GpuError::ShaderCompilation(msg) => write!(f, "Shader compilation failed: {}", msg),
GpuError::BufferOperation(msg) => write!(f, "Buffer operation failed: {}", msg),
GpuError::Timeout => write!(f, "GPU computation timed out"),
GpuError::Other(msg) => write!(f, "GPU error: {}", msg),
}
}
}
impl std::error::Error for GpuError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
GpuError::DeviceRequest(e) => Some(e),
_ => None,
}
}
}
impl From<wgpu::RequestDeviceError> for GpuError {
fn from(err: wgpu::RequestDeviceError) -> Self {
GpuError::DeviceRequest(err)
}
}