warp-lang 1.6.1__py3-none-win_amd64.whl → 1.7.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of warp-lang might be problematic. Click here for more details.
- warp/__init__.py +21 -7
- warp/autograd.py +14 -6
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +424 -6
- warp/build_dll.py +20 -20
- warp/builtins.py +467 -368
- warp/codegen.py +193 -125
- warp/config.py +56 -12
- warp/constants.py +14 -6
- warp/context.py +524 -277
- warp/dlpack.py +22 -12
- warp/examples/__init__.py +14 -6
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/benchmarks/benchmark_api.py +14 -6
- warp/examples/benchmarks/benchmark_cloth.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_cupy.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_jax.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_numba.py +15 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_paddle.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_taichi.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_warp.py +14 -6
- warp/examples/benchmarks/benchmark_gemm.py +82 -48
- warp/examples/benchmarks/benchmark_interop_paddle.py +14 -6
- warp/examples/benchmarks/benchmark_interop_torch.py +14 -6
- warp/examples/benchmarks/benchmark_launches.py +14 -6
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/browse.py +14 -6
- warp/examples/core/example_cupy.py +14 -6
- warp/examples/core/example_dem.py +14 -6
- warp/examples/core/example_fluid.py +14 -6
- warp/examples/core/example_graph_capture.py +14 -6
- warp/examples/core/example_marching_cubes.py +14 -6
- warp/examples/core/example_mesh.py +14 -6
- warp/examples/core/example_mesh_intersect.py +14 -6
- warp/examples/core/example_nvdb.py +14 -6
- warp/examples/core/example_raycast.py +14 -6
- warp/examples/core/example_raymarch.py +14 -6
- warp/examples/core/example_render_opengl.py +14 -6
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +14 -6
- warp/examples/core/example_torch.py +14 -6
- warp/examples/core/example_wave.py +14 -6
- warp/examples/fem/example_adaptive_grid.py +14 -6
- warp/examples/fem/example_apic_fluid.py +15 -7
- warp/examples/fem/example_burgers.py +16 -8
- warp/examples/fem/example_convection_diffusion.py +14 -6
- warp/examples/fem/example_convection_diffusion_dg.py +14 -6
- warp/examples/fem/example_deformed_geometry.py +15 -7
- warp/examples/fem/example_diffusion.py +14 -6
- warp/examples/fem/example_diffusion_3d.py +14 -6
- warp/examples/fem/example_diffusion_mgpu.py +14 -6
- warp/examples/fem/example_distortion_energy.py +15 -7
- warp/examples/fem/example_magnetostatics.py +20 -12
- warp/examples/fem/example_mixed_elasticity.py +14 -6
- warp/examples/fem/example_navier_stokes.py +14 -6
- warp/examples/fem/example_nonconforming_contact.py +14 -6
- warp/examples/fem/example_stokes.py +14 -6
- warp/examples/fem/example_stokes_transfer.py +14 -6
- warp/examples/fem/example_streamlines.py +14 -6
- warp/examples/fem/utils.py +24 -3
- warp/examples/interop/example_jax_callable.py +116 -0
- warp/examples/interop/example_jax_ffi_callback.py +132 -0
- warp/examples/interop/example_jax_kernel.py +205 -0
- warp/examples/optim/example_bounce.py +14 -6
- warp/examples/optim/example_cloth_throw.py +14 -6
- warp/examples/optim/example_diffray.py +14 -6
- warp/examples/optim/example_drone.py +14 -6
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/optim/example_inverse_kinematics.py +14 -6
- warp/examples/optim/example_inverse_kinematics_torch.py +14 -6
- warp/examples/optim/example_softbody_properties.py +14 -6
- warp/examples/optim/example_spring_cage.py +14 -6
- warp/examples/optim/example_trajectory.py +14 -6
- warp/examples/sim/example_cartpole.py +14 -6
- warp/examples/sim/example_cloth.py +14 -6
- warp/examples/sim/example_cloth_self_contact.py +14 -6
- warp/examples/sim/example_granular.py +14 -6
- warp/examples/sim/example_granular_collision_sdf.py +14 -6
- warp/examples/sim/example_jacobian_ik.py +14 -6
- warp/examples/sim/example_particle_chain.py +14 -6
- warp/examples/sim/example_quadruped.py +14 -6
- warp/examples/sim/example_rigid_chain.py +14 -6
- warp/examples/sim/example_rigid_contact.py +14 -6
- warp/examples/sim/example_rigid_force.py +14 -6
- warp/examples/sim/example_rigid_gyroscopic.py +14 -6
- warp/examples/sim/example_rigid_soft_contact.py +14 -6
- warp/examples/sim/example_soft_body.py +14 -6
- warp/examples/tile/example_tile_cholesky.py +14 -6
- warp/examples/tile/example_tile_convolution.py +14 -6
- warp/examples/tile/example_tile_fft.py +14 -6
- warp/examples/tile/example_tile_filtering.py +14 -6
- warp/examples/tile/example_tile_matmul.py +16 -10
- warp/examples/tile/example_tile_mlp.py +14 -6
- warp/examples/tile/example_tile_nbody.py +14 -6
- warp/examples/tile/example_tile_walker.py +14 -6
- warp/fabric.py +15 -0
- warp/fem/__init__.py +26 -1
- warp/fem/adaptivity.py +19 -4
- warp/fem/cache.py +15 -0
- warp/fem/dirichlet.py +15 -0
- warp/fem/domain.py +15 -0
- warp/fem/field/__init__.py +15 -0
- warp/fem/field/field.py +15 -0
- warp/fem/field/nodal_field.py +37 -68
- warp/fem/field/restriction.py +15 -0
- warp/fem/field/virtual.py +77 -23
- warp/fem/geometry/__init__.py +15 -0
- warp/fem/geometry/adaptive_nanogrid.py +24 -10
- warp/fem/geometry/closest_point.py +16 -1
- warp/fem/geometry/deformed_geometry.py +20 -2
- warp/fem/geometry/element.py +15 -0
- warp/fem/geometry/geometry.py +20 -0
- warp/fem/geometry/grid_2d.py +27 -12
- warp/fem/geometry/grid_3d.py +27 -15
- warp/fem/geometry/hexmesh.py +20 -7
- warp/fem/geometry/nanogrid.py +24 -11
- warp/fem/geometry/partition.py +15 -0
- warp/fem/geometry/quadmesh.py +28 -13
- warp/fem/geometry/tetmesh.py +18 -4
- warp/fem/geometry/trimesh.py +18 -8
- warp/fem/integrate.py +277 -93
- warp/fem/linalg.py +20 -5
- warp/fem/operator.py +15 -0
- warp/fem/polynomial.py +15 -0
- warp/fem/quadrature/__init__.py +15 -0
- warp/fem/quadrature/pic_quadrature.py +52 -22
- warp/fem/quadrature/quadrature.py +209 -25
- warp/fem/space/__init__.py +16 -1
- warp/fem/space/basis_function_space.py +19 -2
- warp/fem/space/basis_space.py +40 -18
- warp/fem/space/dof_mapper.py +15 -0
- warp/fem/space/function_space.py +15 -0
- warp/fem/space/grid_2d_function_space.py +15 -0
- warp/fem/space/grid_3d_function_space.py +15 -0
- warp/fem/space/hexmesh_function_space.py +17 -2
- warp/fem/space/nanogrid_function_space.py +15 -0
- warp/fem/space/partition.py +21 -2
- warp/fem/space/quadmesh_function_space.py +23 -8
- warp/fem/space/restriction.py +15 -0
- warp/fem/space/shape/__init__.py +15 -0
- warp/fem/space/shape/cube_shape_function.py +38 -23
- warp/fem/space/shape/shape_function.py +15 -0
- warp/fem/space/shape/square_shape_function.py +27 -12
- warp/fem/space/shape/tet_shape_function.py +15 -0
- warp/fem/space/shape/triangle_shape_function.py +16 -1
- warp/fem/space/tetmesh_function_space.py +18 -3
- warp/fem/space/topology.py +15 -0
- warp/fem/space/trimesh_function_space.py +17 -2
- warp/fem/types.py +15 -0
- warp/fem/utils.py +27 -6
- warp/jax.py +28 -7
- warp/jax_experimental/__init__.py +16 -0
- warp/{jax_experimental.py → jax_experimental/custom_call.py} +28 -33
- warp/jax_experimental/ffi.py +698 -0
- warp/jax_experimental/xla_ffi.py +602 -0
- warp/math.py +103 -6
- warp/native/array.h +28 -6
- warp/native/builtin.h +44 -9
- warp/native/bvh.cpp +18 -7
- warp/native/bvh.cu +57 -20
- warp/native/bvh.h +17 -7
- warp/native/clang/clang.cpp +45 -9
- warp/native/coloring.cpp +15 -6
- warp/native/crt.cpp +15 -6
- warp/native/crt.h +15 -6
- warp/native/cuda_crt.h +15 -6
- warp/native/cuda_util.cpp +29 -6
- warp/native/cuda_util.h +17 -6
- warp/native/error.cpp +15 -6
- warp/native/error.h +15 -6
- warp/native/exports.h +85 -63
- warp/native/fabric.h +15 -6
- warp/native/hashgrid.cpp +15 -6
- warp/native/hashgrid.cu +15 -6
- warp/native/hashgrid.h +15 -6
- warp/native/initializer_array.h +15 -6
- warp/native/intersect.h +41 -32
- warp/native/intersect_adj.h +48 -39
- warp/native/intersect_tri.h +17 -0
- warp/native/marching.cpp +16 -0
- warp/native/marching.cu +16 -7
- warp/native/marching.h +17 -0
- warp/native/mat.h +528 -15
- warp/native/mathdx.cpp +15 -6
- warp/native/matnn.h +15 -6
- warp/native/mesh.cpp +15 -6
- warp/native/mesh.cu +15 -6
- warp/native/mesh.h +25 -16
- warp/native/noise.h +15 -6
- warp/native/quat.h +114 -17
- warp/native/rand.h +21 -6
- warp/native/range.h +15 -6
- warp/native/reduce.cpp +15 -6
- warp/native/reduce.cu +15 -6
- warp/native/runlength_encode.cpp +15 -6
- warp/native/runlength_encode.cu +15 -6
- warp/native/scan.cpp +15 -6
- warp/native/scan.cu +15 -6
- warp/native/scan.h +15 -6
- warp/native/solid_angle.h +17 -0
- warp/native/sort.cpp +137 -65
- warp/native/sort.cu +167 -21
- warp/native/sort.h +23 -7
- warp/native/sparse.cpp +58 -28
- warp/native/sparse.cu +67 -23
- warp/native/spatial.h +15 -6
- warp/native/svd.h +131 -6
- warp/native/temp_buffer.h +15 -6
- warp/native/tile.h +316 -111
- warp/native/tile_reduce.h +61 -9
- warp/native/vec.h +83 -13
- warp/native/volume.cpp +100 -119
- warp/native/volume.cu +15 -6
- warp/native/volume.h +15 -6
- warp/native/volume_builder.cu +40 -16
- warp/native/volume_builder.h +21 -6
- warp/native/volume_impl.h +15 -6
- warp/native/warp.cpp +20 -12
- warp/native/warp.cu +114 -16
- warp/native/warp.h +34 -16
- warp/optim/__init__.py +14 -6
- warp/optim/adam.py +14 -6
- warp/optim/linear.py +25 -10
- warp/optim/sgd.py +14 -6
- warp/paddle.py +14 -6
- warp/render/__init__.py +14 -6
- warp/render/render_opengl.py +14 -6
- warp/render/render_usd.py +14 -6
- warp/render/utils.py +14 -6
- warp/sim/__init__.py +14 -7
- warp/sim/articulation.py +18 -10
- warp/sim/collide.py +35 -16
- warp/sim/graph_coloring.py +14 -6
- warp/sim/import_mjcf.py +463 -162
- warp/sim/import_snu.py +14 -7
- warp/sim/import_urdf.py +46 -18
- warp/sim/import_usd.py +14 -7
- warp/sim/inertia.py +14 -6
- warp/sim/integrator.py +14 -6
- warp/sim/integrator_euler.py +19 -11
- warp/sim/integrator_featherstone.py +17 -16
- warp/sim/integrator_vbd.py +222 -8
- warp/sim/integrator_xpbd.py +19 -11
- warp/sim/model.py +56 -19
- warp/sim/particles.py +14 -6
- warp/sim/render.py +14 -6
- warp/sim/utils.py +17 -2
- warp/sparse.py +657 -555
- warp/stubs.py +231 -19
- warp/tape.py +14 -6
- warp/tests/aux_test_class_kernel.py +14 -6
- warp/tests/aux_test_compile_consts_dummy.py +14 -6
- warp/tests/aux_test_conditional_unequal_types_kernels.py +14 -6
- warp/tests/aux_test_dependent.py +14 -6
- warp/tests/aux_test_grad_customs.py +14 -6
- warp/tests/aux_test_instancing_gc.py +14 -6
- warp/tests/aux_test_module_unload.py +14 -6
- warp/tests/aux_test_name_clash1.py +14 -6
- warp/tests/aux_test_name_clash2.py +14 -6
- warp/tests/aux_test_unresolved_func.py +14 -6
- warp/tests/aux_test_unresolved_symbol.py +14 -6
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/{test_async.py → cuda/test_async.py} +14 -6
- warp/tests/{test_ipc.py → cuda/test_ipc.py} +14 -6
- warp/tests/{test_mempool.py → cuda/test_mempool.py} +53 -6
- warp/tests/{test_multigpu.py → cuda/test_multigpu.py} +14 -6
- warp/tests/{test_peer.py → cuda/test_peer.py} +14 -6
- warp/tests/{test_pinned.py → cuda/test_pinned.py} +14 -6
- warp/tests/{test_streams.py → cuda/test_streams.py} +85 -6
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/{test_bvh.py → geometry/test_bvh.py} +14 -6
- warp/tests/{test_hash_grid.py → geometry/test_hash_grid.py} +14 -6
- warp/tests/{test_marching_cubes.py → geometry/test_marching_cubes.py} +14 -6
- warp/tests/{test_mesh.py → geometry/test_mesh.py} +14 -6
- warp/tests/{test_mesh_query_aabb.py → geometry/test_mesh_query_aabb.py} +14 -6
- warp/tests/{test_mesh_query_point.py → geometry/test_mesh_query_point.py} +80 -69
- warp/tests/{test_mesh_query_ray.py → geometry/test_mesh_query_ray.py} +15 -7
- warp/tests/{test_volume.py → geometry/test_volume.py} +55 -12
- warp/tests/{test_volume_write.py → geometry/test_volume_write.py} +14 -6
- warp/tests/interop/__init__.py +0 -0
- warp/tests/{test_dlpack.py → interop/test_dlpack.py} +42 -11
- warp/tests/{test_jax.py → interop/test_jax.py} +14 -6
- warp/tests/{test_paddle.py → interop/test_paddle.py} +14 -6
- warp/tests/{test_torch.py → interop/test_torch.py} +14 -6
- warp/tests/run_coverage_serial.py +14 -6
- warp/tests/sim/__init__.py +0 -0
- warp/tests/{disabled_kinematics.py → sim/disabled_kinematics.py} +23 -16
- warp/tests/{flaky_test_sim_grad.py → sim/flaky_test_sim_grad.py} +14 -6
- warp/tests/{test_collision.py → sim/test_collision.py} +16 -8
- warp/tests/{test_coloring.py → sim/test_coloring.py} +14 -7
- warp/tests/{test_model.py → sim/test_model.py} +55 -7
- warp/tests/{test_sim_grad_bounce_linear.py → sim/test_sim_grad_bounce_linear.py} +14 -6
- warp/tests/{test_sim_kinematics.py → sim/test_sim_kinematics.py} +16 -7
- warp/tests/sim/test_vbd.py +597 -0
- warp/tests/test_adam.py +14 -6
- warp/tests/test_arithmetic.py +14 -6
- warp/tests/test_array.py +14 -6
- warp/tests/test_array_reduce.py +14 -6
- warp/tests/test_assert.py +14 -6
- warp/tests/test_atomic.py +14 -6
- warp/tests/test_bool.py +15 -7
- warp/tests/test_builtins_resolution.py +14 -6
- warp/tests/test_closest_point_edge_edge.py +14 -6
- warp/tests/test_codegen.py +14 -6
- warp/tests/test_codegen_instancing.py +14 -6
- warp/tests/test_compile_consts.py +14 -6
- warp/tests/test_conditional.py +14 -6
- warp/tests/test_context.py +14 -6
- warp/tests/test_copy.py +14 -6
- warp/tests/test_ctypes.py +14 -6
- warp/tests/test_dense.py +14 -6
- warp/tests/test_devices.py +14 -6
- warp/tests/test_examples.py +42 -42
- warp/tests/test_fabricarray.py +14 -6
- warp/tests/test_fast_math.py +14 -6
- warp/tests/test_fem.py +37 -10
- warp/tests/test_fp16.py +14 -6
- warp/tests/test_func.py +14 -6
- warp/tests/test_future_annotations.py +14 -6
- warp/tests/test_generics.py +14 -6
- warp/tests/test_grad.py +14 -6
- warp/tests/test_grad_customs.py +14 -6
- warp/tests/test_grad_debug.py +14 -6
- warp/tests/test_implicit_init.py +14 -6
- warp/tests/test_import.py +14 -6
- warp/tests/test_indexedarray.py +14 -6
- warp/tests/test_intersect.py +14 -6
- warp/tests/test_iter.py +14 -6
- warp/tests/test_large.py +14 -6
- warp/tests/test_launch.py +14 -6
- warp/tests/test_lerp.py +14 -6
- warp/tests/test_linear_solvers.py +15 -11
- warp/tests/test_lvalue.py +14 -6
- warp/tests/test_mat.py +247 -85
- warp/tests/test_mat_lite.py +14 -6
- warp/tests/test_mat_scalar_ops.py +18 -10
- warp/tests/test_math.py +14 -6
- warp/tests/test_mlp.py +14 -6
- warp/tests/test_module_hashing.py +14 -6
- warp/tests/test_modules_lite.py +14 -6
- warp/tests/test_noise.py +14 -6
- warp/tests/test_operators.py +14 -6
- warp/tests/test_options.py +14 -6
- warp/tests/test_overwrite.py +15 -60
- warp/tests/test_print.py +14 -6
- warp/tests/test_quat.py +81 -52
- warp/tests/test_rand.py +58 -43
- warp/tests/test_reload.py +14 -6
- warp/tests/test_rounding.py +14 -6
- warp/tests/test_runlength_encode.py +14 -6
- warp/tests/test_scalar_ops.py +14 -6
- warp/tests/test_smoothstep.py +14 -6
- warp/tests/test_snippet.py +15 -0
- warp/tests/test_sparse.py +61 -12
- warp/tests/test_spatial.py +89 -6
- warp/tests/test_special_values.py +14 -6
- warp/tests/test_static.py +15 -7
- warp/tests/test_struct.py +14 -6
- warp/tests/test_tape.py +14 -6
- warp/tests/test_transient_module.py +14 -6
- warp/tests/test_triangle_closest_point.py +14 -6
- warp/tests/test_types.py +14 -6
- warp/tests/test_utils.py +98 -10
- warp/tests/test_vec.py +60 -40
- warp/tests/test_vec_lite.py +14 -6
- warp/tests/test_vec_scalar_ops.py +14 -6
- warp/tests/test_verify_fp.py +14 -6
- warp/tests/tile/__init__.py +0 -0
- warp/tests/{test_tile.py → tile/test_tile.py} +150 -57
- warp/tests/{test_tile_load.py → tile/test_tile_load.py} +15 -7
- warp/tests/{test_tile_mathdx.py → tile/test_tile_mathdx.py} +23 -12
- warp/tests/{test_tile_mlp.py → tile/test_tile_mlp.py} +39 -20
- warp/tests/{test_tile_reduce.py → tile/test_tile_reduce.py} +74 -7
- warp/tests/{test_tile_shared_memory.py → tile/test_tile_shared_memory.py} +14 -6
- warp/tests/{test_tile_view.py → tile/test_tile_view.py} +15 -7
- warp/tests/unittest_serial.py +15 -6
- warp/tests/unittest_suites.py +59 -65
- warp/tests/unittest_utils.py +16 -7
- warp/tests/walkthrough_debug.py +14 -6
- warp/thirdparty/unittest_parallel.py +15 -8
- warp/torch.py +14 -6
- warp/types.py +124 -664
- warp/utils.py +151 -78
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/METADATA +39 -12
- warp_lang-1.7.0.dist-info/RECORD +429 -0
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/WHEEL +1 -1
- warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
- warp/examples/optim/example_walker.py +0 -309
- warp/native/cutlass_gemm.cpp +0 -34
- warp/native/cutlass_gemm.cu +0 -373
- warp/tests/test_matmul.py +0 -503
- warp/tests/test_matmul_lite.py +0 -403
- warp/tests/test_vbd.py +0 -378
- warp/tests/unused_test_misc.py +0 -69
- warp_lang-1.6.1.dist-info/LICENSE.md +0 -126
- warp_lang-1.6.1.dist-info/RECORD +0 -419
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/top_level.txt +0 -0
warp/native/volume.cpp
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
* NVIDIA CORPORATION
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
7
16
|
*/
|
|
8
17
|
|
|
9
18
|
#include "cuda_util.h"
|
|
@@ -21,7 +30,7 @@ namespace
|
|
|
21
30
|
struct VolumeDesc
|
|
22
31
|
{
|
|
23
32
|
// NanoVDB buffer either in device or host memory
|
|
24
|
-
void
|
|
33
|
+
void* buffer;
|
|
25
34
|
uint64_t size_in_bytes;
|
|
26
35
|
bool owner; // whether the buffer should be deallocated when the volume is destroyed
|
|
27
36
|
|
|
@@ -29,23 +38,23 @@ struct VolumeDesc
|
|
|
29
38
|
pnanovdb_tree_t tree_data;
|
|
30
39
|
|
|
31
40
|
// Host-accessible version of the blind metadata (copy if GPU, alias if CPU)
|
|
32
|
-
pnanovdb_gridblindmetadata_t
|
|
41
|
+
pnanovdb_gridblindmetadata_t* blind_metadata;
|
|
33
42
|
|
|
34
43
|
// CUDA context for this volume (NULL if CPU)
|
|
35
|
-
void
|
|
44
|
+
void* context;
|
|
36
45
|
|
|
37
|
-
pnanovdb_buf_t as_pnano() const { return pnanovdb_make_buf(static_cast<uint32_t
|
|
46
|
+
pnanovdb_buf_t as_pnano() const { return pnanovdb_make_buf(static_cast<uint32_t*>(buffer), size_in_bytes); }
|
|
38
47
|
};
|
|
39
48
|
|
|
40
49
|
// Host-side volume descriptors. Maps each CPU/GPU volume buffer address (id) to a CPU desc
|
|
41
50
|
std::map<uint64_t, VolumeDesc> g_volume_descriptors;
|
|
42
51
|
|
|
43
|
-
bool volume_get_descriptor(uint64_t id, const VolumeDesc
|
|
52
|
+
bool volume_get_descriptor(uint64_t id, const VolumeDesc*& volumeDesc)
|
|
44
53
|
{
|
|
45
54
|
if (id == 0)
|
|
46
55
|
return false;
|
|
47
56
|
|
|
48
|
-
const auto
|
|
57
|
+
const auto& iter = g_volume_descriptors.find(id);
|
|
49
58
|
if (iter == g_volume_descriptors.end())
|
|
50
59
|
return false;
|
|
51
60
|
else
|
|
@@ -53,21 +62,21 @@ bool volume_get_descriptor(uint64_t id, const VolumeDesc *&volumeDesc)
|
|
|
53
62
|
return true;
|
|
54
63
|
}
|
|
55
64
|
|
|
56
|
-
bool volume_exists(const void
|
|
65
|
+
bool volume_exists(const void* id)
|
|
57
66
|
{
|
|
58
|
-
const VolumeDesc
|
|
67
|
+
const VolumeDesc* volume;
|
|
59
68
|
return volume_get_descriptor((uint64_t)id, volume);
|
|
60
69
|
}
|
|
61
70
|
|
|
62
|
-
void volume_add_descriptor(uint64_t id, VolumeDesc
|
|
71
|
+
void volume_add_descriptor(uint64_t id, VolumeDesc&& volumeDesc) { g_volume_descriptors[id] = std::move(volumeDesc); }
|
|
63
72
|
|
|
64
73
|
void volume_rem_descriptor(uint64_t id) { g_volume_descriptors.erase(id); }
|
|
65
74
|
|
|
66
|
-
void volume_set_map(nanovdb::Map
|
|
75
|
+
void volume_set_map(nanovdb::Map& map, const float transform[9], const float translation[3])
|
|
67
76
|
{
|
|
68
77
|
// Need to transpose as Map::set is transposing again
|
|
69
|
-
const mat_t<3, 3, double> transpose(transform[0], transform[3], transform[6], transform[1], transform[4],
|
|
70
|
-
|
|
78
|
+
const mat_t<3, 3, double> transpose(transform[0], transform[3], transform[6], transform[1], transform[4],
|
|
79
|
+
transform[7], transform[2], transform[5], transform[8]);
|
|
71
80
|
const mat_t<3, 3, double> inv = inverse(transpose);
|
|
72
81
|
|
|
73
82
|
map.set(transpose.data, inv.data, translation);
|
|
@@ -76,7 +85,7 @@ void volume_set_map(nanovdb::Map &map, const float transform[9], const float tra
|
|
|
76
85
|
} // anonymous namespace
|
|
77
86
|
|
|
78
87
|
// NB: buf must be a host pointer
|
|
79
|
-
uint64_t volume_create_host(void
|
|
88
|
+
uint64_t volume_create_host(void* buf, uint64_t size, bool copy, bool owner)
|
|
80
89
|
{
|
|
81
90
|
if (size > 0 && size < sizeof(pnanovdb_grid_t) + sizeof(pnanovdb_tree_t))
|
|
82
91
|
return 0; // This cannot be a valid NanoVDB grid with data
|
|
@@ -91,7 +100,7 @@ uint64_t volume_create_host(void *buf, uint64_t size, bool copy, bool owner)
|
|
|
91
100
|
volume.context = NULL;
|
|
92
101
|
|
|
93
102
|
memcpy_h2h(&volume.grid_data, buf, sizeof(pnanovdb_grid_t));
|
|
94
|
-
memcpy_h2h(&volume.tree_data, (pnanovdb_grid_t
|
|
103
|
+
memcpy_h2h(&volume.tree_data, (pnanovdb_grid_t*)buf + 1, sizeof(pnanovdb_tree_t));
|
|
95
104
|
|
|
96
105
|
if (volume.grid_data.magic != PNANOVDB_MAGIC_NUMBER && volume.grid_data.magic != PNANOVDB_MAGIC_GRID)
|
|
97
106
|
return 0;
|
|
@@ -116,8 +125,8 @@ uint64_t volume_create_host(void *buf, uint64_t size, bool copy, bool owner)
|
|
|
116
125
|
}
|
|
117
126
|
|
|
118
127
|
// Alias blind metadata
|
|
119
|
-
volume.blind_metadata = reinterpret_cast<pnanovdb_gridblindmetadata_t
|
|
120
|
-
|
|
128
|
+
volume.blind_metadata = reinterpret_cast<pnanovdb_gridblindmetadata_t*>(static_cast<uint8_t*>(volume.buffer) +
|
|
129
|
+
volume.grid_data.blind_metadata_offset);
|
|
121
130
|
|
|
122
131
|
uint64_t id = (uint64_t)volume.buffer;
|
|
123
132
|
|
|
@@ -127,7 +136,7 @@ uint64_t volume_create_host(void *buf, uint64_t size, bool copy, bool owner)
|
|
|
127
136
|
}
|
|
128
137
|
|
|
129
138
|
// NB: buf must be a pointer on the same device
|
|
130
|
-
uint64_t volume_create_device(void
|
|
139
|
+
uint64_t volume_create_device(void* context, void* buf, uint64_t size, bool copy, bool owner)
|
|
131
140
|
{
|
|
132
141
|
if (size > 0 && size < sizeof(pnanovdb_grid_t) + sizeof(pnanovdb_tree_t))
|
|
133
142
|
return 0; // This cannot be a valid NanoVDB grid with data
|
|
@@ -144,7 +153,7 @@ uint64_t volume_create_device(void *context, void *buf, uint64_t size, bool copy
|
|
|
144
153
|
volume.context = context ? context : cuda_context_get_current();
|
|
145
154
|
|
|
146
155
|
memcpy_d2h(WP_CURRENT_CONTEXT, &volume.grid_data, buf, sizeof(pnanovdb_grid_t));
|
|
147
|
-
memcpy_d2h(WP_CURRENT_CONTEXT, &volume.tree_data, (pnanovdb_grid_t
|
|
156
|
+
memcpy_d2h(WP_CURRENT_CONTEXT, &volume.tree_data, (pnanovdb_grid_t*)buf + 1, sizeof(pnanovdb_tree_t));
|
|
148
157
|
// no sync needed since the above copies are to pageable memory
|
|
149
158
|
|
|
150
159
|
if (volume.grid_data.magic != PNANOVDB_MAGIC_NUMBER && volume.grid_data.magic != PNANOVDB_MAGIC_GRID)
|
|
@@ -171,9 +180,9 @@ uint64_t volume_create_device(void *context, void *buf, uint64_t size, bool copy
|
|
|
171
180
|
|
|
172
181
|
// Make blind metadata accessible on host
|
|
173
182
|
const uint64_t blindmetadata_size = volume.grid_data.blind_metadata_count * sizeof(pnanovdb_gridblindmetadata_t);
|
|
174
|
-
volume.blind_metadata = static_cast<pnanovdb_gridblindmetadata_t
|
|
183
|
+
volume.blind_metadata = static_cast<pnanovdb_gridblindmetadata_t*>(alloc_pinned(blindmetadata_size));
|
|
175
184
|
memcpy_d2h(WP_CURRENT_CONTEXT, volume.blind_metadata,
|
|
176
|
-
static_cast<uint8_t
|
|
185
|
+
static_cast<uint8_t*>(volume.buffer) + volume.grid_data.blind_metadata_offset, blindmetadata_size);
|
|
177
186
|
|
|
178
187
|
uint64_t id = (uint64_t)volume.buffer;
|
|
179
188
|
volume_add_descriptor(id, std::move(volume));
|
|
@@ -181,12 +190,12 @@ uint64_t volume_create_device(void *context, void *buf, uint64_t size, bool copy
|
|
|
181
190
|
return id;
|
|
182
191
|
}
|
|
183
192
|
|
|
184
|
-
void volume_get_buffer_info(uint64_t id, void
|
|
193
|
+
void volume_get_buffer_info(uint64_t id, void** buf, uint64_t* size)
|
|
185
194
|
{
|
|
186
195
|
*buf = 0;
|
|
187
196
|
*size = 0;
|
|
188
197
|
|
|
189
|
-
const VolumeDesc
|
|
198
|
+
const VolumeDesc* volume;
|
|
190
199
|
if (volume_get_descriptor(id, volume))
|
|
191
200
|
{
|
|
192
201
|
*buf = volume->buffer;
|
|
@@ -194,11 +203,11 @@ void volume_get_buffer_info(uint64_t id, void **buf, uint64_t *size)
|
|
|
194
203
|
}
|
|
195
204
|
}
|
|
196
205
|
|
|
197
|
-
void volume_get_voxel_size(uint64_t id, float
|
|
206
|
+
void volume_get_voxel_size(uint64_t id, float* dx, float* dy, float* dz)
|
|
198
207
|
{
|
|
199
208
|
*dx = *dx = *dz = 0.0f;
|
|
200
209
|
|
|
201
|
-
const VolumeDesc
|
|
210
|
+
const VolumeDesc* volume;
|
|
202
211
|
if (volume_get_descriptor(id, volume))
|
|
203
212
|
{
|
|
204
213
|
*dx = (float)volume->grid_data.voxel_size[0];
|
|
@@ -207,12 +216,12 @@ void volume_get_voxel_size(uint64_t id, float *dx, float *dy, float *dz)
|
|
|
207
216
|
}
|
|
208
217
|
}
|
|
209
218
|
|
|
210
|
-
void volume_get_tile_and_voxel_count(uint64_t id, uint32_t
|
|
219
|
+
void volume_get_tile_and_voxel_count(uint64_t id, uint32_t& tile_count, uint64_t& voxel_count)
|
|
211
220
|
{
|
|
212
221
|
tile_count = 0;
|
|
213
222
|
voxel_count = 0;
|
|
214
223
|
|
|
215
|
-
const VolumeDesc
|
|
224
|
+
const VolumeDesc* volume;
|
|
216
225
|
if (volume_get_descriptor(id, volume))
|
|
217
226
|
{
|
|
218
227
|
tile_count = volume->tree_data.node_count_leaf;
|
|
@@ -233,13 +242,13 @@ void volume_get_tile_and_voxel_count(uint64_t id, uint32_t &tile_count, uint64_t
|
|
|
233
242
|
}
|
|
234
243
|
}
|
|
235
244
|
|
|
236
|
-
const char
|
|
245
|
+
const char* volume_get_grid_info(uint64_t id, uint64_t* grid_size, uint32_t* grid_index, uint32_t* grid_count,
|
|
237
246
|
float translation[3], float transform[9], char type_str[16])
|
|
238
247
|
{
|
|
239
|
-
const VolumeDesc
|
|
248
|
+
const VolumeDesc* volume;
|
|
240
249
|
if (volume_get_descriptor(id, volume))
|
|
241
250
|
{
|
|
242
|
-
const pnanovdb_grid_t
|
|
251
|
+
const pnanovdb_grid_t& grid_data = volume->grid_data;
|
|
243
252
|
*grid_count = grid_data.grid_count;
|
|
244
253
|
*grid_index = grid_data.grid_index;
|
|
245
254
|
*grid_size = grid_data.grid_size;
|
|
@@ -248,7 +257,7 @@ const char *volume_get_grid_info(uint64_t id, uint64_t *grid_size, uint32_t *gri
|
|
|
248
257
|
memcpy(transform, grid_data.map.matf, sizeof(grid_data.map.matf));
|
|
249
258
|
|
|
250
259
|
nanovdb::toStr(type_str, static_cast<nanovdb::GridType>(grid_data.grid_type));
|
|
251
|
-
return (const char
|
|
260
|
+
return (const char*)grid_data.grid_name;
|
|
252
261
|
}
|
|
253
262
|
|
|
254
263
|
*grid_size = 0;
|
|
@@ -261,7 +270,7 @@ const char *volume_get_grid_info(uint64_t id, uint64_t *grid_size, uint32_t *gri
|
|
|
261
270
|
|
|
262
271
|
uint32_t volume_get_blind_data_count(uint64_t id)
|
|
263
272
|
{
|
|
264
|
-
const VolumeDesc
|
|
273
|
+
const VolumeDesc* volume;
|
|
265
274
|
if (volume_get_descriptor(id, volume))
|
|
266
275
|
{
|
|
267
276
|
return volume->grid_data.blind_metadata_count;
|
|
@@ -269,20 +278,20 @@ uint32_t volume_get_blind_data_count(uint64_t id)
|
|
|
269
278
|
return 0;
|
|
270
279
|
}
|
|
271
280
|
|
|
272
|
-
const char
|
|
273
|
-
uint32_t
|
|
281
|
+
const char* volume_get_blind_data_info(uint64_t id, uint32_t data_index, void** buf, uint64_t* value_count,
|
|
282
|
+
uint32_t* value_size, char type_str[16])
|
|
274
283
|
{
|
|
275
|
-
const VolumeDesc
|
|
284
|
+
const VolumeDesc* volume;
|
|
276
285
|
if (volume_get_descriptor(id, volume) && data_index < volume->grid_data.blind_metadata_count)
|
|
277
286
|
{
|
|
278
|
-
const pnanovdb_gridblindmetadata_t
|
|
287
|
+
const pnanovdb_gridblindmetadata_t& metadata = volume->blind_metadata[data_index];
|
|
279
288
|
*value_count = metadata.value_count;
|
|
280
289
|
*value_size = metadata.value_size;
|
|
281
290
|
|
|
282
291
|
nanovdb::toStr(type_str, static_cast<nanovdb::GridType>(metadata.data_type));
|
|
283
|
-
*buf = static_cast<uint8_t
|
|
292
|
+
*buf = static_cast<uint8_t*>(volume->buffer) + volume->grid_data.blind_metadata_offset +
|
|
284
293
|
data_index * sizeof(pnanovdb_gridblindmetadata_t) + metadata.data_offset;
|
|
285
|
-
return (const char
|
|
294
|
+
return (const char*)metadata.name;
|
|
286
295
|
}
|
|
287
296
|
*buf = nullptr;
|
|
288
297
|
*value_count = 0;
|
|
@@ -291,16 +300,16 @@ const char *volume_get_blind_data_info(uint64_t id, uint32_t data_index, void **
|
|
|
291
300
|
return nullptr;
|
|
292
301
|
}
|
|
293
302
|
|
|
294
|
-
void volume_get_tiles_host(uint64_t id, void
|
|
303
|
+
void volume_get_tiles_host(uint64_t id, void* buf)
|
|
295
304
|
{
|
|
296
305
|
static constexpr uint32_t MASK = (1u << 3u) - 1u; // mask for bit operations
|
|
297
306
|
|
|
298
|
-
const VolumeDesc
|
|
307
|
+
const VolumeDesc* volume;
|
|
299
308
|
if (volume_get_descriptor(id, volume))
|
|
300
309
|
{
|
|
301
310
|
const uint32_t leaf_count = volume->tree_data.node_count_leaf;
|
|
302
311
|
|
|
303
|
-
pnanovdb_coord_t
|
|
312
|
+
pnanovdb_coord_t* leaf_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
304
313
|
|
|
305
314
|
const uint64_t first_leaf =
|
|
306
315
|
(uint64_t)volume->buffer + sizeof(pnanovdb_grid_t) + volume->tree_data.node_offset_leaf;
|
|
@@ -316,16 +325,16 @@ void volume_get_tiles_host(uint64_t id, void *buf)
|
|
|
316
325
|
}
|
|
317
326
|
}
|
|
318
327
|
|
|
319
|
-
void volume_get_voxels_host(uint64_t id, void
|
|
328
|
+
void volume_get_voxels_host(uint64_t id, void* buf)
|
|
320
329
|
{
|
|
321
|
-
const VolumeDesc
|
|
330
|
+
const VolumeDesc* volume;
|
|
322
331
|
if (volume_get_descriptor(id, volume))
|
|
323
332
|
{
|
|
324
333
|
uint32_t leaf_count;
|
|
325
334
|
uint64_t voxel_count;
|
|
326
335
|
volume_get_tile_and_voxel_count(id, leaf_count, voxel_count);
|
|
327
336
|
|
|
328
|
-
pnanovdb_coord_t
|
|
337
|
+
pnanovdb_coord_t* voxel_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
329
338
|
|
|
330
339
|
const pnanovdb_buf_t pnano_buf = volume->as_pnano();
|
|
331
340
|
for (uint32_t i = 0; i < leaf_count; ++i)
|
|
@@ -354,7 +363,7 @@ void volume_get_voxels_host(uint64_t id, void *buf)
|
|
|
354
363
|
|
|
355
364
|
void volume_destroy_host(uint64_t id)
|
|
356
365
|
{
|
|
357
|
-
const VolumeDesc
|
|
366
|
+
const VolumeDesc* volume;
|
|
358
367
|
if (volume_get_descriptor(id, volume))
|
|
359
368
|
{
|
|
360
369
|
if (volume->owner)
|
|
@@ -367,7 +376,7 @@ void volume_destroy_host(uint64_t id)
|
|
|
367
376
|
|
|
368
377
|
void volume_destroy_device(uint64_t id)
|
|
369
378
|
{
|
|
370
|
-
const VolumeDesc
|
|
379
|
+
const VolumeDesc* volume;
|
|
371
380
|
if (volume_get_descriptor(id, volume))
|
|
372
381
|
{
|
|
373
382
|
ContextGuard guard(volume->context);
|
|
@@ -382,52 +391,35 @@ void volume_destroy_device(uint64_t id)
|
|
|
382
391
|
|
|
383
392
|
#if WP_ENABLE_CUDA
|
|
384
393
|
|
|
385
|
-
uint64_t
|
|
386
|
-
|
|
394
|
+
uint64_t volume_from_tiles_device(void* context, void* points, int num_points, float transform[9], float translation[3],
|
|
395
|
+
bool points_in_world_space, const void* value_ptr, uint32_t value_size,
|
|
396
|
+
const char* value_type)
|
|
387
397
|
{
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
nanovdb::Vec3fGrid *grid;
|
|
403
|
-
size_t gridSize;
|
|
404
|
-
BuildGridParams<nanovdb::Vec3f> params;
|
|
405
|
-
params.background_value = nanovdb::Vec3f{bg_value[0], bg_value[1], bg_value[2]};
|
|
406
|
-
volume_set_map(params.map, transform, translation);
|
|
407
|
-
|
|
408
|
-
build_grid_from_points(grid, gridSize, points, num_points, points_in_world_space, params);
|
|
409
|
-
|
|
410
|
-
return volume_create_device(context, grid, gridSize, false, true);
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
uint64_t volume_i_from_tiles_device(void *context, void *points, int num_points, float transform[9],
|
|
414
|
-
float translation[3], bool points_in_world_space, int bg_value)
|
|
415
|
-
{
|
|
416
|
-
nanovdb::Int32Grid *grid;
|
|
417
|
-
size_t gridSize;
|
|
418
|
-
BuildGridParams<int32_t> params;
|
|
419
|
-
params.background_value = (int32_t)(bg_value);
|
|
420
|
-
volume_set_map(params.map, transform, translation);
|
|
398
|
+
char gridTypeStr[12];
|
|
399
|
+
|
|
400
|
+
#define EXPAND_BUILDER_TYPE(type) \
|
|
401
|
+
nanovdb::toStr(gridTypeStr, nanovdb::toGridType<type>()); \
|
|
402
|
+
if (strncmp(gridTypeStr, value_type, sizeof(gridTypeStr)) == 0) \
|
|
403
|
+
{ \
|
|
404
|
+
BuildGridParams<type> params; \
|
|
405
|
+
memcpy(¶ms.background_value, value_ptr, value_size); \
|
|
406
|
+
volume_set_map(params.map, transform, translation); \
|
|
407
|
+
size_t gridSize; \
|
|
408
|
+
nanovdb::Grid<nanovdb::NanoTree<type>>* grid; \
|
|
409
|
+
build_grid_from_points(grid, gridSize, points, num_points, points_in_world_space, params); \
|
|
410
|
+
return volume_create_device(context, grid, gridSize, false, true); \
|
|
411
|
+
}
|
|
421
412
|
|
|
422
|
-
|
|
413
|
+
WP_VOLUME_BUILDER_INSTANTIATE_TYPES
|
|
414
|
+
#undef EXPAND_BUILDER_TYPE
|
|
423
415
|
|
|
424
|
-
return
|
|
416
|
+
return 0;
|
|
425
417
|
}
|
|
426
418
|
|
|
427
|
-
uint64_t volume_index_from_tiles_device(void
|
|
419
|
+
uint64_t volume_index_from_tiles_device(void* context, void* points, int num_points, float transform[9],
|
|
428
420
|
float translation[3], bool points_in_world_space)
|
|
429
421
|
{
|
|
430
|
-
nanovdb::IndexGrid
|
|
422
|
+
nanovdb::IndexGrid* grid;
|
|
431
423
|
size_t gridSize;
|
|
432
424
|
BuildGridParams<nanovdb::ValueIndex> params;
|
|
433
425
|
volume_set_map(params.map, transform, translation);
|
|
@@ -437,10 +429,10 @@ uint64_t volume_index_from_tiles_device(void *context, void *points, int num_poi
|
|
|
437
429
|
return volume_create_device(context, grid, gridSize, false, true);
|
|
438
430
|
}
|
|
439
431
|
|
|
440
|
-
uint64_t volume_from_active_voxels_device(void
|
|
432
|
+
uint64_t volume_from_active_voxels_device(void* context, void* points, int num_points, float transform[9],
|
|
441
433
|
float translation[3], bool points_in_world_space)
|
|
442
434
|
{
|
|
443
|
-
nanovdb::OnIndexGrid
|
|
435
|
+
nanovdb::OnIndexGrid* grid;
|
|
444
436
|
size_t gridSize;
|
|
445
437
|
BuildGridParams<nanovdb::ValueOnIndex> params;
|
|
446
438
|
volume_set_map(params.map, transform, translation);
|
|
@@ -450,71 +442,60 @@ uint64_t volume_from_active_voxels_device(void *context, void *points, int num_p
|
|
|
450
442
|
return volume_create_device(context, grid, gridSize, false, true);
|
|
451
443
|
}
|
|
452
444
|
|
|
453
|
-
void launch_get_leaf_coords(void
|
|
445
|
+
void launch_get_leaf_coords(void* context, const uint32_t leaf_count, pnanovdb_coord_t* leaf_coords,
|
|
454
446
|
pnanovdb_buf_t buf);
|
|
455
|
-
void launch_get_voxel_coords(void
|
|
456
|
-
pnanovdb_coord_t
|
|
447
|
+
void launch_get_voxel_coords(void* context, const uint32_t leaf_count, const uint32_t voxel_count,
|
|
448
|
+
pnanovdb_coord_t* voxel_coords, pnanovdb_buf_t buf);
|
|
457
449
|
|
|
458
|
-
void volume_get_tiles_device(uint64_t id, void
|
|
450
|
+
void volume_get_tiles_device(uint64_t id, void* buf)
|
|
459
451
|
{
|
|
460
|
-
const VolumeDesc
|
|
452
|
+
const VolumeDesc* volume;
|
|
461
453
|
if (volume_get_descriptor(id, volume))
|
|
462
454
|
{
|
|
463
455
|
const uint32_t leaf_count = volume->tree_data.node_count_leaf;
|
|
464
456
|
|
|
465
|
-
pnanovdb_coord_t
|
|
457
|
+
pnanovdb_coord_t* leaf_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
466
458
|
launch_get_leaf_coords(volume->context, leaf_count, leaf_coords, volume->as_pnano());
|
|
467
459
|
}
|
|
468
460
|
}
|
|
469
461
|
|
|
470
|
-
void volume_get_voxels_device(uint64_t id, void
|
|
462
|
+
void volume_get_voxels_device(uint64_t id, void* buf)
|
|
471
463
|
{
|
|
472
|
-
const VolumeDesc
|
|
464
|
+
const VolumeDesc* volume;
|
|
473
465
|
if (volume_get_descriptor(id, volume))
|
|
474
466
|
{
|
|
475
467
|
uint32_t leaf_count;
|
|
476
468
|
uint64_t voxel_count;
|
|
477
469
|
volume_get_tile_and_voxel_count(id, leaf_count, voxel_count);
|
|
478
470
|
|
|
479
|
-
pnanovdb_coord_t
|
|
471
|
+
pnanovdb_coord_t* voxel_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
480
472
|
launch_get_voxel_coords(volume->context, leaf_count, voxel_count, voxel_coords, volume->as_pnano());
|
|
481
473
|
}
|
|
482
474
|
}
|
|
483
475
|
|
|
484
476
|
#else
|
|
485
477
|
// stubs for non-CUDA platforms
|
|
486
|
-
uint64_t
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
return 0;
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
uint64_t volume_v_from_tiles_device(void *context, void *points, int num_points, float transform[9],
|
|
493
|
-
float translation[3], bool points_in_world_space, float bg_value[3])
|
|
494
|
-
{
|
|
495
|
-
return 0;
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
uint64_t volume_i_from_tiles_device(void *context, void *points, int num_points, float transform[9],
|
|
499
|
-
float translation[3], bool points_in_world_space, int bg_value)
|
|
478
|
+
uint64_t volume_from_tiles_device(void* context, void* points, int num_points, float transform[9],
|
|
479
|
+
float translation[3], bool points_in_world_space, const void* value_ptr, uint32_t value_size,
|
|
480
|
+
const char* value_type)
|
|
500
481
|
{
|
|
501
482
|
return 0;
|
|
502
483
|
}
|
|
503
484
|
|
|
504
|
-
uint64_t volume_index_from_tiles_device(void
|
|
485
|
+
uint64_t volume_index_from_tiles_device(void* context, void* points, int num_points, float transform[9],
|
|
505
486
|
float translation[3], bool points_in_world_space)
|
|
506
487
|
{
|
|
507
488
|
return 0;
|
|
508
489
|
}
|
|
509
490
|
|
|
510
|
-
uint64_t volume_from_active_voxels_device(void
|
|
491
|
+
uint64_t volume_from_active_voxels_device(void* context, void* points, int num_points, float transform[9],
|
|
511
492
|
float translation[3], bool points_in_world_space)
|
|
512
493
|
{
|
|
513
494
|
return 0;
|
|
514
495
|
}
|
|
515
496
|
|
|
516
|
-
void volume_get_tiles_device(uint64_t id, void
|
|
497
|
+
void volume_get_tiles_device(uint64_t id, void* buf) {}
|
|
517
498
|
|
|
518
|
-
void volume_get_voxels_device(uint64_t id, void
|
|
499
|
+
void volume_get_voxels_device(uint64_t id, void* buf) {}
|
|
519
500
|
|
|
520
501
|
#endif
|
warp/native/volume.cu
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
* NVIDIA CORPORATION
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
7
16
|
*/
|
|
8
17
|
|
|
9
18
|
#include "cuda_util.h"
|
warp/native/volume.h
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
* NVIDIA CORPORATION
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
7
16
|
*/
|
|
8
17
|
|
|
9
18
|
#pragma once
|
warp/native/volume_builder.cu
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
* NVIDIA CORPORATION
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
7
16
|
*/
|
|
8
17
|
|
|
9
18
|
#include "volume_builder.h"
|
|
@@ -258,11 +267,21 @@ __device__ std::enable_if_t<nanovdb::BuildTraits<typename Node::BuildType>::is_i
|
|
|
258
267
|
{
|
|
259
268
|
}
|
|
260
269
|
|
|
270
|
+
template <typename T>
|
|
271
|
+
struct alignas(alignof(T)) AlignedProxy
|
|
272
|
+
{
|
|
273
|
+
char data[sizeof(T)];
|
|
274
|
+
};
|
|
275
|
+
|
|
261
276
|
template <typename Tree, typename NodeT>
|
|
262
277
|
__global__ void setInternalBBoxAndBackgroundValue(Tree *tree, const typename Tree::BuildType background_value)
|
|
263
278
|
{
|
|
264
279
|
using BBox = nanovdb::math::BBox<typename NodeT::CoordT>;
|
|
265
|
-
|
|
280
|
+
using BBoxProxy = AlignedProxy<BBox>;
|
|
281
|
+
|
|
282
|
+
__shared__ BBoxProxy bbox_mem;
|
|
283
|
+
|
|
284
|
+
BBox& bbox = reinterpret_cast<BBox&>(bbox_mem);
|
|
266
285
|
|
|
267
286
|
const unsigned node_count = tree->mNodeCount[NodeT::LEVEL];
|
|
268
287
|
const unsigned node_id = blockIdx.x;
|
|
@@ -272,7 +291,7 @@ __global__ void setInternalBBoxAndBackgroundValue(Tree *tree, const typename Tre
|
|
|
272
291
|
|
|
273
292
|
if (threadIdx.x == 0)
|
|
274
293
|
{
|
|
275
|
-
bbox
|
|
294
|
+
new(&bbox) BBox();
|
|
276
295
|
}
|
|
277
296
|
|
|
278
297
|
__syncthreads();
|
|
@@ -304,14 +323,17 @@ __global__ void setRootBBoxAndBackgroundValue(nanovdb::Grid<Tree> *grid,
|
|
|
304
323
|
const typename Tree::BuildType background_value)
|
|
305
324
|
{
|
|
306
325
|
using BBox = typename Tree::RootNodeType::BBoxType;
|
|
307
|
-
|
|
326
|
+
using BBoxProxy = AlignedProxy<BBox>;
|
|
327
|
+
__shared__ BBoxProxy bbox_mem;
|
|
328
|
+
|
|
329
|
+
BBox& bbox = reinterpret_cast<BBox&>(bbox_mem);
|
|
308
330
|
|
|
309
331
|
Tree &tree = grid->tree();
|
|
310
332
|
const unsigned upper_count = tree.mNodeCount[2];
|
|
311
333
|
|
|
312
334
|
if (threadIdx.x == 0)
|
|
313
335
|
{
|
|
314
|
-
bbox
|
|
336
|
+
new(&bbox) BBox();
|
|
315
337
|
}
|
|
316
338
|
|
|
317
339
|
__syncthreads();
|
|
@@ -441,12 +463,14 @@ void build_grid_from_points(nanovdb::Grid<nanovdb::NanoTree<BuildT>> *&out_grid,
|
|
|
441
463
|
grid_handle.buffer().detachDeviceData();
|
|
442
464
|
}
|
|
443
465
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
template void build_grid_from_points(nanovdb::Grid<nanovdb::NanoTree<
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
466
|
+
|
|
467
|
+
#define EXPAND_BUILDER_TYPE(type) \
|
|
468
|
+
template void build_grid_from_points(nanovdb::Grid<nanovdb::NanoTree<type>> *&, size_t &, const void *, size_t, bool, \
|
|
469
|
+
const BuildGridParams<type> &);
|
|
470
|
+
|
|
471
|
+
WP_VOLUME_BUILDER_INSTANTIATE_TYPES
|
|
472
|
+
#undef EXPAND_BUILDER_TYPE
|
|
473
|
+
|
|
450
474
|
template void build_grid_from_points(nanovdb::Grid<nanovdb::NanoTree<nanovdb::ValueIndex>> *&, size_t &, const void *,
|
|
451
475
|
size_t, bool, const BuildGridParams<nanovdb::ValueIndex> &);
|
|
452
476
|
template void build_grid_from_points(nanovdb::Grid<nanovdb::NanoTree<nanovdb::ValueOnIndex>> *&, size_t &, const void *,
|