use crate::gpu::buffer_pool::BufferPoolConfig;
#[derive(Debug, Clone)]
pub struct GpuConfig {
pub buffer_pool: BufferPoolConfig,
pub num_staging_buffers: usize,
pub max_command_batch_size: usize,
}
impl Default for GpuConfig {
fn default() -> Self {
Self::default_config()
}
}
impl GpuConfig {
const fn default_config() -> Self {
Self {
buffer_pool: BufferPoolConfig {
max_pool_memory: 512 * 1024 * 1024, eviction_timeout_secs: 30,
},
num_staging_buffers: 3,
max_command_batch_size: 16,
}
}
#[must_use]
pub const fn low_memory() -> Self {
Self {
buffer_pool: BufferPoolConfig {
max_pool_memory: 128 * 1024 * 1024, eviction_timeout_secs: 20,
},
num_staging_buffers: 2,
max_command_batch_size: 8,
}
}
#[must_use]
pub const fn high_performance() -> Self {
Self {
buffer_pool: BufferPoolConfig {
max_pool_memory: 1024 * 1024 * 1024, eviction_timeout_secs: 45,
},
num_staging_buffers: 4,
max_command_batch_size: 32,
}
}
#[must_use]
pub const fn minimal() -> Self {
Self {
buffer_pool: BufferPoolConfig {
max_pool_memory: 64 * 1024 * 1024, eviction_timeout_secs: 15,
},
num_staging_buffers: 1,
max_command_batch_size: 4,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = GpuConfig::default();
assert_eq!(config.buffer_pool.max_pool_memory, 512 * 1024 * 1024);
assert_eq!(config.num_staging_buffers, 3);
assert_eq!(config.max_command_batch_size, 16);
}
#[test]
fn test_low_memory_config() {
let config = GpuConfig::low_memory();
assert_eq!(config.buffer_pool.max_pool_memory, 128 * 1024 * 1024);
assert_eq!(config.num_staging_buffers, 2);
assert_eq!(config.max_command_batch_size, 8);
}
#[test]
fn test_high_performance_config() {
let config = GpuConfig::high_performance();
assert_eq!(config.buffer_pool.max_pool_memory, 1024 * 1024 * 1024);
assert_eq!(config.num_staging_buffers, 4);
assert_eq!(config.max_command_batch_size, 32);
}
#[test]
fn test_minimal_config() {
let config = GpuConfig::minimal();
assert_eq!(config.buffer_pool.max_pool_memory, 64 * 1024 * 1024);
assert_eq!(config.num_staging_buffers, 1);
}
#[test]
fn test_configs_are_cloneable() {
let config = GpuConfig::default();
let cloned = config.clone();
assert_eq!(cloned.num_staging_buffers, config.num_staging_buffers);
}
}