use crate::backend::metal::{metal_gemm_quant_dispatch, MetalBackend, MetalQuantStore};
use crate::Linear;
pub struct MetalGgufLinear {
pub store: MetalQuantStore,
pub in_features: usize,
pub out_features: usize,
}
impl Linear<MetalBackend> for MetalGgufLinear {
fn in_features(&self) -> usize {
self.in_features
}
fn out_features(&self) -> usize {
self.out_features
}
fn forward(
&self,
ctx: &mut <MetalBackend as crate::backend::Backend>::Context,
input: &<MetalBackend as crate::backend::Backend>::Buffer,
out: &mut <MetalBackend as crate::backend::Backend>::Buffer,
m: usize,
) {
metal_gemm_quant_dispatch(ctx, input, &self.store, out, m)
.unwrap_or_else(|e| panic!("MetalGgufLinear forward failed: {e}"));
}
}