spatialrust_gpu/kernels/
voxel_segments_gpu.rs1use spatialrust_core::SpatialResult;
2
3use crate::kernels::gpu_segments::GpuVoxelSegments;
4use crate::kernels::voxel_keys::compute_voxel_keys_gpu_buffers;
5use crate::kernels::voxel_segments::VoxelSegments;
6use crate::kernels::voxel_sort::build_voxel_segments_gpu_from_keys_buffer;
7use crate::runtime::WgpuRuntime;
8
9pub fn build_voxel_segments_from_positions_gpu(
11 runtime: &WgpuRuntime,
12 x: &[f32],
13 y: &[f32],
14 z: &[f32],
15 origin: [f32; 3],
16 inv_leaf: f32,
17) -> SpatialResult<VoxelSegments> {
18 let gpu_segments =
19 build_voxel_segments_from_positions_gpu_buffers(runtime, x, y, z, origin, inv_leaf)?;
20 gpu_segments.to_voxel_segments(runtime)
21}
22
23pub fn build_voxel_segments_from_positions_gpu_buffers(
25 runtime: &WgpuRuntime,
26 x: &[f32],
27 y: &[f32],
28 z: &[f32],
29 origin: [f32; 3],
30 inv_leaf: f32,
31) -> SpatialResult<GpuVoxelSegments> {
32 let positions = compute_voxel_keys_gpu_buffers(runtime, x, y, z, origin, inv_leaf)?;
33 let point_count = positions.point_count();
34 let padded_count = point_count.next_power_of_two();
35 build_voxel_segments_gpu_from_keys_buffer(
36 runtime,
37 positions.keys_buffer(),
38 point_count,
39 padded_count,
40 )
41}