diff --git a/backend/device.impala b/backend/device.impala index 19ed099..0b355ee 100644 --- a/backend/device.impala +++ b/backend/device.impala @@ -6,6 +6,7 @@ struct Device { alloc_mirror: fn(Buffer, i64) -> Buffer, transfer: fn(Buffer, Buffer) -> (), sqrt: fn(real_t) -> real_t, + real_floor: fn(real_t) -> real_t, loop_1d: fn(bool, i32, fn(i32) -> ()) -> (), add_iterator: fn(&mut i64) -> (), atomic_add_i32: fn(dev_i32_ptr, i32) -> i32 diff --git a/backend/mapping_cpu.impala b/backend/mapping_cpu.impala index 6170e61..29232b7 100644 --- a/backend/mapping_cpu.impala +++ b/backend/mapping_cpu.impala @@ -10,6 +10,7 @@ fn @device() -> Device { alloc_mirror: |buf, size| { buf }, transfer: |from, to| {}, sqrt: @|a| { cpu_intrinsics.sqrt(a) }, + real_floor: @|a| { cpu_intrinsics.floor(a) }, loop_1d: @|vec, n, f| { vectorized_range(select(vec, get_vector_width(), 1), 0, n, |i, _| { f(i); }); }, add_iterator: |iterator| { (*iterator)++; }, atomic_add_i32: @|ptr, value| { diff --git a/backend/mapping_gpu.impala b/backend/mapping_gpu.impala index 113e658..37e150e 100644 --- a/backend/mapping_gpu.impala +++ b/backend/mapping_gpu.impala @@ -41,6 +41,7 @@ fn @device() -> Device { alloc_mirror: |buf, size| { alloc_cpu(size) }, transfer: |from, to| { copy(from, to); }, sqrt: @|a| { gpu_math.sqrt(a) }, + real_floor: @|a| { gpu_math.floor(a) }, loop_1d: loop_1d, add_iterator: |iterator| {}, atomic_add_i32: @|ptr, value| { atomic_add_global_i32(ptr as &mut[1]i32, value) } diff --git a/core/grid.impala b/core/grid.impala index a4b4a9b..e14032a 100644 --- a/core/grid.impala +++ b/core/grid.impala @@ -404,9 +404,9 @@ fn get_resize(grid: Grid) -> i32 { } fn compute_cell_position(position: Vector3D, grid: Grid) -> [i32 * 3] { - let i = real_floor(((position.x - grid.aabb.xmin) / grid.spacing) as real_t) as i32; - let j = real_floor(((position.y - grid.aabb.ymin) / grid.spacing) as real_t) as i32; - let k = real_floor(((position.z - grid.aabb.zmin) / grid.spacing) as real_t) as i32; + let i = device().real_floor(((position.x - grid.aabb.xmin) / grid.spacing) as real_t) as i32; + let j = device().real_floor(((position.y - grid.aabb.ymin) / grid.spacing) as real_t) as i32; + let k = device().real_floor(((position.z - grid.aabb.zmin) / grid.spacing) as real_t) as i32; [i, j, k] }