use crate::buffer::Arena;
#[allow(clippy::too_many_arguments)]
pub fn run_ms_deform_attn(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
in_offs: &[(u32, u32)],
out_byte_off: usize,
out_bytes: usize,
attrs: &[u8],
) {
let ins: Vec<Vec<f32>> = in_offs
.iter()
.map(|&(off, len)| {
let bytes = arena.read_bytes_range(device, queue, off as usize, len as usize);
bytemuck::cast_slice::<u8, f32>(&bytes).to_vec()
})
.collect();
let in_refs: Vec<&[f32]> = ins.iter().map(|v| v.as_slice()).collect();
let mut out = vec![0f32; out_bytes / 4];
rlx_cpu::ms_deform_attn::execute(&in_refs, attrs, &mut out)
.expect("rlx-wgpu: ms_deform_attn host kernel");
arena.write_bytes_range(queue, out_byte_off, bytemuck::cast_slice(&out));
}