use super::context::MetalNativeContext;
use crate::error::{HiveGpuError, Result};
use std::sync::Arc;
#[cfg(all(target_os = "macos", feature = "metal-native"))]
pub struct MetalHelpers;
#[cfg(all(target_os = "macos", feature = "metal-native"))]
impl MetalHelpers {
pub fn calculate_threadgroup_size(
context: &MetalNativeContext,
workgroup_size: (u32, u32, u32),
) -> Result<(u32, u32, u32)> {
let max_size = context.max_threadgroup_size();
let x = workgroup_size.0.min(max_size.width as u32);
let y = workgroup_size.1.min(max_size.height as u32);
let z = workgroup_size.2.min(max_size.depth as u32);
Ok((x, y, z))
}
pub fn validate_device_capabilities(context: &MetalNativeContext) -> Result<()> {
if !context.supports_mps() {
return Err(HiveGpuError::Other(
"Metal Performance Shaders not supported".to_string(),
));
}
Ok(())
}
}