Skip to main content

oxigdal_gpu_advanced/
error.rs

1//! Error types for advanced GPU operations.
2
3use thiserror::Error;
4
5/// Result type for advanced GPU operations
6pub type Result<T> = std::result::Result<T, GpuAdvancedError>;
7
8/// Error types for advanced GPU operations
9#[derive(Debug, Error)]
10pub enum GpuAdvancedError {
11    /// GPU device error
12    #[error("GPU device error: {0}")]
13    DeviceError(String),
14
15    /// Multi-GPU error
16    #[error("Multi-GPU error: {0}")]
17    MultiGpuError(String),
18
19    /// Memory pool error
20    #[error("Memory pool error: {0}")]
21    MemoryPoolError(String),
22
23    /// Memory allocation failed
24    #[error("Memory allocation failed: size={size}, available={available}")]
25    AllocationFailed {
26        /// Requested allocation size
27        size: u64,
28        /// Available memory
29        available: u64,
30    },
31
32    /// Memory out of bounds
33    #[error("Memory out of bounds: offset={offset}, size={size}, pool_size={pool_size}")]
34    OutOfBounds {
35        /// Offset into memory pool
36        offset: u64,
37        /// Requested size
38        size: u64,
39        /// Total pool size
40        pool_size: u64,
41    },
42
43    /// Shader compiler error
44    #[error("Shader compiler error: {0}")]
45    ShaderCompilerError(String),
46
47    /// Shader optimization error
48    #[error("Shader optimization error: {0}")]
49    ShaderOptimizationError(String),
50
51    /// Shader validation error
52    #[error("Shader validation error: {0}")]
53    ShaderValidationError(String),
54
55    /// Shader cache error
56    #[error("Shader cache error: {0}")]
57    ShaderCacheError(String),
58
59    /// GPU computation error
60    #[error("GPU computation error: {0}")]
61    ComputationError(String),
62
63    /// Buffer error
64    #[error("Buffer error: {0}")]
65    BufferError(String),
66
67    /// Synchronization error
68    #[error("Synchronization error: {0}")]
69    SyncError(String),
70
71    /// Work stealing error
72    #[error("Work stealing error: {0}")]
73    WorkStealingError(String),
74
75    /// Load balancing error
76    #[error("Load balancing error: {0}")]
77    LoadBalancingError(String),
78
79    /// GPU not found
80    #[error("No GPU found matching criteria: {0}")]
81    GpuNotFound(String),
82
83    /// Invalid GPU index
84    #[error("Invalid GPU index: {index}, total GPUs: {total}")]
85    InvalidGpuIndex {
86        /// Requested GPU index
87        index: usize,
88        /// Total number of available GPUs
89        total: usize,
90    },
91
92    /// Shader not found
93    #[error("Shader not found: {0}")]
94    ShaderNotFound(String),
95
96    /// ML inference error
97    #[error("ML inference error: {0}")]
98    MlInferenceError(String),
99
100    /// Terrain analysis error
101    #[error("Terrain analysis error: {0}")]
102    TerrainAnalysisError(String),
103
104    /// Configuration error
105    #[error("Configuration error: {0}")]
106    ConfigError(String),
107
108    /// Invalid configuration
109    #[error("Invalid configuration: {0}")]
110    InvalidConfiguration(String),
111
112    /// IO error
113    #[error("IO error: {0}")]
114    IoError(#[from] std::io::Error),
115
116    /// Serialization error
117    #[error("Serialization error: {0}")]
118    SerializationError(#[from] serde_json::Error),
119
120    /// Base GPU error
121    #[error("Base GPU error: {0}")]
122    GpuError(#[from] oxigdal_gpu::error::GpuError),
123
124    /// WGPU request device error
125    #[error("WGPU request device error: {0}")]
126    RequestDeviceError(#[from] wgpu::RequestDeviceError),
127
128    /// WGPU buffer async error
129    #[error("WGPU buffer async error: {0}")]
130    BufferAsyncError(#[from] wgpu::BufferAsyncError),
131
132    /// Invalid parameter
133    #[error("Invalid parameter: {0}")]
134    InvalidParameter(String),
135
136    /// Not implemented
137    #[error("Feature not implemented: {0}")]
138    NotImplemented(String),
139}
140
141impl GpuAdvancedError {
142    /// Create a device error
143    pub fn device_error(msg: impl Into<String>) -> Self {
144        Self::DeviceError(msg.into())
145    }
146
147    /// Create a multi-GPU error
148    pub fn multi_gpu_error(msg: impl Into<String>) -> Self {
149        Self::MultiGpuError(msg.into())
150    }
151
152    /// Create a memory pool error
153    pub fn memory_pool_error(msg: impl Into<String>) -> Self {
154        Self::MemoryPoolError(msg.into())
155    }
156
157    /// Create a shader compiler error
158    pub fn shader_compiler_error(msg: impl Into<String>) -> Self {
159        Self::ShaderCompilerError(msg.into())
160    }
161
162    /// Create a computation error
163    pub fn computation_error(msg: impl Into<String>) -> Self {
164        Self::ComputationError(msg.into())
165    }
166
167    /// Create an invalid parameter error
168    pub fn invalid_parameter(msg: impl Into<String>) -> Self {
169        Self::InvalidParameter(msg.into())
170    }
171}