vyre_reference/dual_impls/workgroup/shuffle/
reference.rs1use crate::{dual_impls::common, workgroup::Memory};
2use vyre_primitives::Shuffle;
3
4impl common::ReferenceEvaluator for Shuffle {
5 fn evaluate(&self, inputs: &[Memory]) -> Result<Memory, common::EvalError> {
6 let (values, indices) = common::two_inputs(inputs, "shuffle")?;
7 let values = common::u32_words(values, "shuffle")?;
8 let indices = common::u32_words(indices, "shuffle")?;
9 let mut output = Vec::with_capacity(indices.len());
10 for index in indices {
11 output.push(values[common::checked_index(index, values.len(), "shuffle")?]);
12 }
13 Ok(common::write_u32s(output))
14 }
15}