in crates/ratchet-core/src/ops/matmul/workgroup_gemv.rs [189:219]
fn register_bindings<P: WgslPrimitive>(
&self,
builder: &mut WgslKernelBuilder,
_: bool,
) -> Result<(), OperationError> {
let (A, _, bias) = (&self.lhs, &self.rhs, &self.bias);
if A.dt().is_float() {
let float_arr = Array::<P>::default();
builder.register_storage("A", BindingMode::ReadOnly, float_arr);
builder.register_storage("X", BindingMode::ReadOnly, float_arr);
if bias.is_some() {
builder.register_storage("bias", BindingMode::ReadOnly, float_arr);
}
builder.register_storage("result", BindingMode::ReadWrite, float_arr);
} else if A.dt().is_quantized() {
let scalar = Array::<Scalar<P::T>>::default();
builder.register_storage("A", BindingMode::ReadOnly, Array::<Scalar<u32>>::default());
builder.register_storage("scale", BindingMode::ReadOnly, scalar);
builder.register_storage("X", BindingMode::ReadOnly, Array::<Vec4<P::T>>::default());
if bias.is_some() {
builder.register_storage("bias", BindingMode::ReadOnly, scalar);
}
builder.register_storage("result", BindingMode::ReadWrite, scalar);
} else {
return Err(InvariantError::UnsupportedDType(A.dt()).into());
}
builder.register_uniform();
Ok(())
}