diff --git a/src/gallium/frontends/rusticl/api/context.rs b/src/gallium/frontends/rusticl/api/context.rs index 5654f0e0115..29afae33b19 100644 --- a/src/gallium/frontends/rusticl/api/context.rs +++ b/src/gallium/frontends/rusticl/api/context.rs @@ -23,12 +23,9 @@ unsafe impl CLInfo for cl_context { fn query(&self, q: cl_context_info, v: CLInfoValue) -> CLResult { let ctx = Context::ref_from_raw(*self)?; match q { - CL_CONTEXT_DEVICES => v.write::>( - ctx.devs - .iter() - .map(|&d| cl_device_id::from_ptr(d)) - .collect(), - ), + CL_CONTEXT_DEVICES => { + v.write_iter::(ctx.devs.iter().map(|&d| cl_device_id::from_ptr(d))) + } CL_CONTEXT_NUM_DEVICES => v.write::(ctx.devs.len() as u32), // need to return None if no properties exist CL_CONTEXT_PROPERTIES => v.write::<&Properties>(&ctx.properties), diff --git a/src/gallium/frontends/rusticl/api/device.rs b/src/gallium/frontends/rusticl/api/device.rs index feb6c9607af..5e53198ef18 100644 --- a/src/gallium/frontends/rusticl/api/device.rs +++ b/src/gallium/frontends/rusticl/api/device.rs @@ -275,11 +275,11 @@ unsafe impl CLInfo for cl_device_id { ), CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS => v.write::(false), CL_DEVICE_SUB_GROUP_SIZES_INTEL => { - v.write::>(if dev.subgroups_supported() { - dev.subgroup_sizes().collect() + if dev.subgroups_supported() { + v.write_iter::(dev.subgroup_sizes()) } else { - vec![0; 1] - }) + v.write::<&[usize]>(&[0; 1]) + } } CL_DEVICE_SVM_CAPABILITIES | CL_DEVICE_SVM_CAPABILITIES_ARM => { v.write::( diff --git a/src/gallium/frontends/rusticl/api/kernel.rs b/src/gallium/frontends/rusticl/api/kernel.rs index 22679682094..cac1afa16f8 100644 --- a/src/gallium/frontends/rusticl/api/kernel.rs +++ b/src/gallium/frontends/rusticl/api/kernel.rs @@ -198,7 +198,7 @@ unsafe impl CLInfoObj { let subgroups = input[0]; - let mut res = vec![0; 3]; + let mut res = [0; 3]; for subgroup_size in kernel.subgroup_sizes(dev) { let threads = subgroups * subgroup_size; @@ -211,13 +211,12 @@ unsafe impl CLInfoObj>(res) + v.write_iter::(res.into_iter().take(output_value_size / usize_byte)) } CL_KERNEL_MAX_NUM_SUB_GROUPS => { let threads = kernel.max_threads_per_block(dev); diff --git a/src/gallium/frontends/rusticl/api/program.rs b/src/gallium/frontends/rusticl/api/program.rs index addbbcc9aad..485c8bc46e8 100644 --- a/src/gallium/frontends/rusticl/api/program.rs +++ b/src/gallium/frontends/rusticl/api/program.rs @@ -55,7 +55,7 @@ unsafe impl CLInfo for cl_program { } v.write_len_only::<&[*mut u8]>(prog.devs.len()) } - CL_PROGRAM_BINARY_SIZES => v.write::>(prog.bin_sizes()), + CL_PROGRAM_BINARY_SIZES => v.write_iter::(prog.bin_sizes()), CL_PROGRAM_CONTEXT => { // Note we use as_ptr here which doesn't increase the reference count. let ptr = Arc::as_ptr(&prog.context); diff --git a/src/gallium/frontends/rusticl/api/util.rs b/src/gallium/frontends/rusticl/api/util.rs index db913743008..68972c18626 100644 --- a/src/gallium/frontends/rusticl/api/util.rs +++ b/src/gallium/frontends/rusticl/api/util.rs @@ -340,21 +340,6 @@ impl CLProp for &CStr { } } -impl CLProp for Vec -where - T: CLProp + Copy, -{ - type Output = T; - - fn count(&self) -> usize { - self.len() - } - - fn write_to(&self, out: &mut [MaybeUninit]) { - self.as_slice().write_to(out); - } -} - impl CLProp for &[T] where T: CLProp + Copy, diff --git a/src/gallium/frontends/rusticl/core/program.rs b/src/gallium/frontends/rusticl/core/program.rs index d6da0ba325a..930d7fe03b5 100644 --- a/src/gallium/frontends/rusticl/core/program.rs +++ b/src/gallium/frontends/rusticl/core/program.rs @@ -477,19 +477,16 @@ impl Program { } // we need to precalculate the size - pub fn bin_sizes(&self) -> Vec { + pub fn bin_sizes(&self) -> impl ExactSizeIterator + '_ { let lock = self.build_info(); - self.devs - .iter() - .map(|&device| { - let info = lock.dev_build(device); + self.devs.iter().map(move |&device| { + let info = lock.dev_build(device); - info.spirv.as_ref().map_or(0, |s| { - s.to_bin().len() + device.screen().name().to_bytes().len() + BIN_HEADER_SIZE - }) + info.spirv.as_ref().map_or(0, |s| { + s.to_bin().len() + device.screen().name().to_bytes().len() + BIN_HEADER_SIZE }) - .collect() + }) } pub fn binaries(&self, ptrs: &[*mut u8]) -> CLResult<()> {