Skip to main content

vyre_reference/dual_impls/memory/gather/
reference.rs

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