warp-lang 1.10.0__py3-none-macosx_11_0_arm64.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 +334 -0
- warp/__init__.pyi +5856 -0
- warp/_src/__init__.py +14 -0
- warp/_src/autograd.py +1077 -0
- warp/_src/build.py +620 -0
- warp/_src/build_dll.py +642 -0
- warp/_src/builtins.py +10555 -0
- warp/_src/codegen.py +4361 -0
- warp/_src/config.py +178 -0
- warp/_src/constants.py +59 -0
- warp/_src/context.py +8352 -0
- warp/_src/dlpack.py +464 -0
- warp/_src/fabric.py +362 -0
- warp/_src/fem/__init__.py +14 -0
- warp/_src/fem/adaptivity.py +510 -0
- warp/_src/fem/cache.py +689 -0
- warp/_src/fem/dirichlet.py +190 -0
- warp/_src/fem/domain.py +553 -0
- warp/_src/fem/field/__init__.py +131 -0
- warp/_src/fem/field/field.py +703 -0
- warp/_src/fem/field/nodal_field.py +403 -0
- warp/_src/fem/field/restriction.py +39 -0
- warp/_src/fem/field/virtual.py +1021 -0
- warp/_src/fem/geometry/__init__.py +32 -0
- warp/_src/fem/geometry/adaptive_nanogrid.py +782 -0
- warp/_src/fem/geometry/closest_point.py +99 -0
- warp/_src/fem/geometry/deformed_geometry.py +277 -0
- warp/_src/fem/geometry/element.py +854 -0
- warp/_src/fem/geometry/geometry.py +693 -0
- warp/_src/fem/geometry/grid_2d.py +478 -0
- warp/_src/fem/geometry/grid_3d.py +539 -0
- warp/_src/fem/geometry/hexmesh.py +956 -0
- warp/_src/fem/geometry/nanogrid.py +660 -0
- warp/_src/fem/geometry/partition.py +483 -0
- warp/_src/fem/geometry/quadmesh.py +597 -0
- warp/_src/fem/geometry/tetmesh.py +762 -0
- warp/_src/fem/geometry/trimesh.py +588 -0
- warp/_src/fem/integrate.py +2507 -0
- warp/_src/fem/linalg.py +385 -0
- warp/_src/fem/operator.py +398 -0
- warp/_src/fem/polynomial.py +231 -0
- warp/_src/fem/quadrature/__init__.py +17 -0
- warp/_src/fem/quadrature/pic_quadrature.py +318 -0
- warp/_src/fem/quadrature/quadrature.py +665 -0
- warp/_src/fem/space/__init__.py +248 -0
- warp/_src/fem/space/basis_function_space.py +499 -0
- warp/_src/fem/space/basis_space.py +681 -0
- warp/_src/fem/space/dof_mapper.py +253 -0
- warp/_src/fem/space/function_space.py +312 -0
- warp/_src/fem/space/grid_2d_function_space.py +179 -0
- warp/_src/fem/space/grid_3d_function_space.py +229 -0
- warp/_src/fem/space/hexmesh_function_space.py +255 -0
- warp/_src/fem/space/nanogrid_function_space.py +199 -0
- warp/_src/fem/space/partition.py +435 -0
- warp/_src/fem/space/quadmesh_function_space.py +222 -0
- warp/_src/fem/space/restriction.py +221 -0
- warp/_src/fem/space/shape/__init__.py +152 -0
- warp/_src/fem/space/shape/cube_shape_function.py +1107 -0
- warp/_src/fem/space/shape/shape_function.py +134 -0
- warp/_src/fem/space/shape/square_shape_function.py +928 -0
- warp/_src/fem/space/shape/tet_shape_function.py +829 -0
- warp/_src/fem/space/shape/triangle_shape_function.py +674 -0
- warp/_src/fem/space/tetmesh_function_space.py +270 -0
- warp/_src/fem/space/topology.py +461 -0
- warp/_src/fem/space/trimesh_function_space.py +193 -0
- warp/_src/fem/types.py +114 -0
- warp/_src/fem/utils.py +488 -0
- warp/_src/jax.py +188 -0
- warp/_src/jax_experimental/__init__.py +14 -0
- warp/_src/jax_experimental/custom_call.py +389 -0
- warp/_src/jax_experimental/ffi.py +1286 -0
- warp/_src/jax_experimental/xla_ffi.py +658 -0
- warp/_src/marching_cubes.py +710 -0
- warp/_src/math.py +416 -0
- warp/_src/optim/__init__.py +14 -0
- warp/_src/optim/adam.py +165 -0
- warp/_src/optim/linear.py +1608 -0
- warp/_src/optim/sgd.py +114 -0
- warp/_src/paddle.py +408 -0
- warp/_src/render/__init__.py +14 -0
- warp/_src/render/imgui_manager.py +291 -0
- warp/_src/render/render_opengl.py +3638 -0
- warp/_src/render/render_usd.py +939 -0
- warp/_src/render/utils.py +162 -0
- warp/_src/sparse.py +2718 -0
- warp/_src/tape.py +1208 -0
- warp/_src/thirdparty/__init__.py +0 -0
- warp/_src/thirdparty/appdirs.py +598 -0
- warp/_src/thirdparty/dlpack.py +145 -0
- warp/_src/thirdparty/unittest_parallel.py +676 -0
- warp/_src/torch.py +393 -0
- warp/_src/types.py +5888 -0
- warp/_src/utils.py +1695 -0
- warp/autograd.py +33 -0
- warp/bin/libwarp-clang.dylib +0 -0
- warp/bin/libwarp.dylib +0 -0
- warp/build.py +29 -0
- warp/build_dll.py +24 -0
- warp/codegen.py +24 -0
- warp/constants.py +24 -0
- warp/context.py +33 -0
- warp/dlpack.py +24 -0
- warp/examples/__init__.py +24 -0
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/assets/pixel.jpg +0 -0
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/assets/square_cloth.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +389 -0
- warp/examples/benchmarks/benchmark_cloth.py +296 -0
- warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
- warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
- warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
- warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
- warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
- warp/examples/benchmarks/benchmark_gemm.py +164 -0
- warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
- warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
- warp/examples/benchmarks/benchmark_launches.py +301 -0
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/benchmarks/benchmark_tile_sort.py +155 -0
- warp/examples/browse.py +37 -0
- warp/examples/core/example_cupy.py +86 -0
- warp/examples/core/example_dem.py +241 -0
- warp/examples/core/example_fluid.py +299 -0
- warp/examples/core/example_graph_capture.py +150 -0
- warp/examples/core/example_marching_cubes.py +195 -0
- warp/examples/core/example_mesh.py +180 -0
- warp/examples/core/example_mesh_intersect.py +211 -0
- warp/examples/core/example_nvdb.py +182 -0
- warp/examples/core/example_raycast.py +111 -0
- warp/examples/core/example_raymarch.py +205 -0
- warp/examples/core/example_render_opengl.py +290 -0
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +411 -0
- warp/examples/core/example_spin_lock.py +93 -0
- warp/examples/core/example_torch.py +211 -0
- warp/examples/core/example_wave.py +269 -0
- warp/examples/core/example_work_queue.py +118 -0
- warp/examples/distributed/example_jacobi_mpi.py +506 -0
- warp/examples/fem/example_adaptive_grid.py +286 -0
- warp/examples/fem/example_apic_fluid.py +469 -0
- warp/examples/fem/example_burgers.py +261 -0
- warp/examples/fem/example_convection_diffusion.py +181 -0
- warp/examples/fem/example_convection_diffusion_dg.py +225 -0
- warp/examples/fem/example_darcy_ls_optimization.py +489 -0
- warp/examples/fem/example_deformed_geometry.py +172 -0
- warp/examples/fem/example_diffusion.py +196 -0
- warp/examples/fem/example_diffusion_3d.py +225 -0
- warp/examples/fem/example_diffusion_mgpu.py +225 -0
- warp/examples/fem/example_distortion_energy.py +228 -0
- warp/examples/fem/example_elastic_shape_optimization.py +387 -0
- warp/examples/fem/example_magnetostatics.py +242 -0
- warp/examples/fem/example_mixed_elasticity.py +293 -0
- warp/examples/fem/example_navier_stokes.py +263 -0
- warp/examples/fem/example_nonconforming_contact.py +300 -0
- warp/examples/fem/example_stokes.py +213 -0
- warp/examples/fem/example_stokes_transfer.py +262 -0
- warp/examples/fem/example_streamlines.py +357 -0
- warp/examples/fem/utils.py +1047 -0
- warp/examples/interop/example_jax_callable.py +146 -0
- warp/examples/interop/example_jax_ffi_callback.py +132 -0
- warp/examples/interop/example_jax_kernel.py +232 -0
- warp/examples/optim/example_diffray.py +561 -0
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/tile/example_tile_block_cholesky.py +502 -0
- warp/examples/tile/example_tile_cholesky.py +88 -0
- warp/examples/tile/example_tile_convolution.py +66 -0
- warp/examples/tile/example_tile_fft.py +55 -0
- warp/examples/tile/example_tile_filtering.py +113 -0
- warp/examples/tile/example_tile_matmul.py +85 -0
- warp/examples/tile/example_tile_mcgp.py +191 -0
- warp/examples/tile/example_tile_mlp.py +385 -0
- warp/examples/tile/example_tile_nbody.py +199 -0
- warp/fabric.py +24 -0
- warp/fem/__init__.py +173 -0
- warp/fem/adaptivity.py +26 -0
- warp/fem/cache.py +30 -0
- warp/fem/dirichlet.py +24 -0
- warp/fem/field/__init__.py +24 -0
- warp/fem/field/field.py +26 -0
- warp/fem/geometry/__init__.py +21 -0
- warp/fem/geometry/closest_point.py +31 -0
- warp/fem/linalg.py +38 -0
- warp/fem/operator.py +32 -0
- warp/fem/polynomial.py +29 -0
- warp/fem/space/__init__.py +22 -0
- warp/fem/space/basis_space.py +24 -0
- warp/fem/space/shape/__init__.py +68 -0
- warp/fem/space/topology.py +24 -0
- warp/fem/types.py +24 -0
- warp/fem/utils.py +32 -0
- warp/jax.py +29 -0
- warp/jax_experimental/__init__.py +29 -0
- warp/jax_experimental/custom_call.py +29 -0
- warp/jax_experimental/ffi.py +39 -0
- warp/jax_experimental/xla_ffi.py +24 -0
- warp/marching_cubes.py +24 -0
- warp/math.py +37 -0
- warp/native/array.h +1687 -0
- warp/native/builtin.h +2327 -0
- warp/native/bvh.cpp +562 -0
- warp/native/bvh.cu +826 -0
- warp/native/bvh.h +555 -0
- warp/native/clang/clang.cpp +541 -0
- warp/native/coloring.cpp +622 -0
- warp/native/crt.cpp +51 -0
- warp/native/crt.h +568 -0
- warp/native/cuda_crt.h +1058 -0
- warp/native/cuda_util.cpp +677 -0
- warp/native/cuda_util.h +313 -0
- warp/native/error.cpp +77 -0
- warp/native/error.h +36 -0
- warp/native/exports.h +2023 -0
- warp/native/fabric.h +246 -0
- warp/native/hashgrid.cpp +311 -0
- warp/native/hashgrid.cu +89 -0
- warp/native/hashgrid.h +240 -0
- warp/native/initializer_array.h +41 -0
- warp/native/intersect.h +1253 -0
- warp/native/intersect_adj.h +375 -0
- warp/native/intersect_tri.h +348 -0
- warp/native/mat.h +5189 -0
- warp/native/mathdx.cpp +93 -0
- warp/native/matnn.h +221 -0
- warp/native/mesh.cpp +266 -0
- warp/native/mesh.cu +406 -0
- warp/native/mesh.h +2097 -0
- warp/native/nanovdb/GridHandle.h +533 -0
- warp/native/nanovdb/HostBuffer.h +591 -0
- warp/native/nanovdb/NanoVDB.h +6246 -0
- warp/native/nanovdb/NodeManager.h +323 -0
- warp/native/nanovdb/PNanoVDB.h +3390 -0
- warp/native/noise.h +859 -0
- warp/native/quat.h +1664 -0
- warp/native/rand.h +342 -0
- warp/native/range.h +145 -0
- warp/native/reduce.cpp +174 -0
- warp/native/reduce.cu +363 -0
- warp/native/runlength_encode.cpp +79 -0
- warp/native/runlength_encode.cu +61 -0
- warp/native/scan.cpp +47 -0
- warp/native/scan.cu +55 -0
- warp/native/scan.h +23 -0
- warp/native/solid_angle.h +466 -0
- warp/native/sort.cpp +251 -0
- warp/native/sort.cu +286 -0
- warp/native/sort.h +35 -0
- warp/native/sparse.cpp +241 -0
- warp/native/sparse.cu +435 -0
- warp/native/spatial.h +1306 -0
- warp/native/svd.h +727 -0
- warp/native/temp_buffer.h +46 -0
- warp/native/tile.h +4124 -0
- warp/native/tile_radix_sort.h +1112 -0
- warp/native/tile_reduce.h +838 -0
- warp/native/tile_scan.h +240 -0
- warp/native/tuple.h +189 -0
- warp/native/vec.h +2199 -0
- warp/native/version.h +23 -0
- warp/native/volume.cpp +501 -0
- warp/native/volume.cu +68 -0
- warp/native/volume.h +970 -0
- warp/native/volume_builder.cu +483 -0
- warp/native/volume_builder.h +52 -0
- warp/native/volume_impl.h +70 -0
- warp/native/warp.cpp +1143 -0
- warp/native/warp.cu +4604 -0
- warp/native/warp.h +358 -0
- warp/optim/__init__.py +20 -0
- warp/optim/adam.py +24 -0
- warp/optim/linear.py +35 -0
- warp/optim/sgd.py +24 -0
- warp/paddle.py +24 -0
- warp/py.typed +0 -0
- warp/render/__init__.py +22 -0
- warp/render/imgui_manager.py +29 -0
- warp/render/render_opengl.py +24 -0
- warp/render/render_usd.py +24 -0
- warp/render/utils.py +24 -0
- warp/sparse.py +51 -0
- warp/tape.py +24 -0
- warp/tests/__init__.py +1 -0
- warp/tests/__main__.py +4 -0
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/mlp_golden.npy +0 -0
- warp/tests/assets/pixel.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/assets/spiky.usd +0 -0
- warp/tests/assets/test_grid.nvdb +0 -0
- warp/tests/assets/test_index_grid.nvdb +0 -0
- warp/tests/assets/test_int32_grid.nvdb +0 -0
- warp/tests/assets/test_vec_grid.nvdb +0 -0
- warp/tests/assets/torus.nvdb +0 -0
- warp/tests/assets/torus.usda +105 -0
- warp/tests/aux_test_class_kernel.py +34 -0
- warp/tests/aux_test_compile_consts_dummy.py +18 -0
- warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
- warp/tests/aux_test_dependent.py +29 -0
- warp/tests/aux_test_grad_customs.py +29 -0
- warp/tests/aux_test_instancing_gc.py +26 -0
- warp/tests/aux_test_module_aot.py +7 -0
- warp/tests/aux_test_module_unload.py +23 -0
- warp/tests/aux_test_name_clash1.py +40 -0
- warp/tests/aux_test_name_clash2.py +40 -0
- warp/tests/aux_test_reference.py +9 -0
- warp/tests/aux_test_reference_reference.py +8 -0
- warp/tests/aux_test_square.py +16 -0
- warp/tests/aux_test_unresolved_func.py +22 -0
- warp/tests/aux_test_unresolved_symbol.py +22 -0
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/cuda/test_async.py +676 -0
- warp/tests/cuda/test_conditional_captures.py +1147 -0
- warp/tests/cuda/test_ipc.py +124 -0
- warp/tests/cuda/test_mempool.py +233 -0
- warp/tests/cuda/test_multigpu.py +169 -0
- warp/tests/cuda/test_peer.py +139 -0
- warp/tests/cuda/test_pinned.py +84 -0
- warp/tests/cuda/test_streams.py +691 -0
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/geometry/test_bvh.py +335 -0
- warp/tests/geometry/test_hash_grid.py +259 -0
- warp/tests/geometry/test_marching_cubes.py +294 -0
- warp/tests/geometry/test_mesh.py +318 -0
- warp/tests/geometry/test_mesh_query_aabb.py +392 -0
- warp/tests/geometry/test_mesh_query_point.py +935 -0
- warp/tests/geometry/test_mesh_query_ray.py +323 -0
- warp/tests/geometry/test_volume.py +1103 -0
- warp/tests/geometry/test_volume_write.py +346 -0
- warp/tests/interop/__init__.py +0 -0
- warp/tests/interop/test_dlpack.py +730 -0
- warp/tests/interop/test_jax.py +1673 -0
- warp/tests/interop/test_paddle.py +800 -0
- warp/tests/interop/test_torch.py +1001 -0
- warp/tests/run_coverage_serial.py +39 -0
- warp/tests/test_adam.py +162 -0
- warp/tests/test_arithmetic.py +1096 -0
- warp/tests/test_array.py +3756 -0
- warp/tests/test_array_reduce.py +156 -0
- warp/tests/test_assert.py +303 -0
- warp/tests/test_atomic.py +336 -0
- warp/tests/test_atomic_bitwise.py +209 -0
- warp/tests/test_atomic_cas.py +312 -0
- warp/tests/test_bool.py +220 -0
- warp/tests/test_builtins_resolution.py +732 -0
- warp/tests/test_closest_point_edge_edge.py +327 -0
- warp/tests/test_codegen.py +974 -0
- warp/tests/test_codegen_instancing.py +1495 -0
- warp/tests/test_compile_consts.py +215 -0
- warp/tests/test_conditional.py +298 -0
- warp/tests/test_context.py +35 -0
- warp/tests/test_copy.py +319 -0
- warp/tests/test_ctypes.py +618 -0
- warp/tests/test_dense.py +73 -0
- warp/tests/test_devices.py +127 -0
- warp/tests/test_enum.py +136 -0
- warp/tests/test_examples.py +424 -0
- warp/tests/test_fabricarray.py +998 -0
- warp/tests/test_fast_math.py +72 -0
- warp/tests/test_fem.py +2204 -0
- warp/tests/test_fixedarray.py +229 -0
- warp/tests/test_fp16.py +136 -0
- warp/tests/test_func.py +501 -0
- warp/tests/test_future_annotations.py +100 -0
- warp/tests/test_generics.py +656 -0
- warp/tests/test_grad.py +893 -0
- warp/tests/test_grad_customs.py +339 -0
- warp/tests/test_grad_debug.py +341 -0
- warp/tests/test_implicit_init.py +411 -0
- warp/tests/test_import.py +45 -0
- warp/tests/test_indexedarray.py +1140 -0
- warp/tests/test_intersect.py +103 -0
- warp/tests/test_iter.py +76 -0
- warp/tests/test_large.py +177 -0
- warp/tests/test_launch.py +411 -0
- warp/tests/test_lerp.py +151 -0
- warp/tests/test_linear_solvers.py +223 -0
- warp/tests/test_lvalue.py +427 -0
- warp/tests/test_map.py +526 -0
- warp/tests/test_mat.py +3515 -0
- warp/tests/test_mat_assign_copy.py +178 -0
- warp/tests/test_mat_constructors.py +573 -0
- warp/tests/test_mat_lite.py +122 -0
- warp/tests/test_mat_scalar_ops.py +2913 -0
- warp/tests/test_math.py +212 -0
- warp/tests/test_module_aot.py +287 -0
- warp/tests/test_module_hashing.py +258 -0
- warp/tests/test_modules_lite.py +70 -0
- warp/tests/test_noise.py +252 -0
- warp/tests/test_operators.py +299 -0
- warp/tests/test_options.py +129 -0
- warp/tests/test_overwrite.py +551 -0
- warp/tests/test_print.py +408 -0
- warp/tests/test_quat.py +2653 -0
- warp/tests/test_quat_assign_copy.py +145 -0
- warp/tests/test_rand.py +339 -0
- warp/tests/test_reload.py +303 -0
- warp/tests/test_rounding.py +157 -0
- warp/tests/test_runlength_encode.py +196 -0
- warp/tests/test_scalar_ops.py +133 -0
- warp/tests/test_smoothstep.py +108 -0
- warp/tests/test_snippet.py +318 -0
- warp/tests/test_sparse.py +845 -0
- warp/tests/test_spatial.py +2859 -0
- warp/tests/test_spatial_assign_copy.py +160 -0
- warp/tests/test_special_values.py +361 -0
- warp/tests/test_static.py +640 -0
- warp/tests/test_struct.py +901 -0
- warp/tests/test_tape.py +242 -0
- warp/tests/test_transient_module.py +93 -0
- warp/tests/test_triangle_closest_point.py +192 -0
- warp/tests/test_tuple.py +361 -0
- warp/tests/test_types.py +615 -0
- warp/tests/test_utils.py +594 -0
- warp/tests/test_vec.py +1408 -0
- warp/tests/test_vec_assign_copy.py +143 -0
- warp/tests/test_vec_constructors.py +325 -0
- warp/tests/test_vec_lite.py +80 -0
- warp/tests/test_vec_scalar_ops.py +2327 -0
- warp/tests/test_verify_fp.py +100 -0
- warp/tests/test_version.py +75 -0
- warp/tests/tile/__init__.py +0 -0
- warp/tests/tile/test_tile.py +1519 -0
- warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
- warp/tests/tile/test_tile_cholesky.py +608 -0
- warp/tests/tile/test_tile_load.py +724 -0
- warp/tests/tile/test_tile_mathdx.py +156 -0
- warp/tests/tile/test_tile_matmul.py +179 -0
- warp/tests/tile/test_tile_mlp.py +400 -0
- warp/tests/tile/test_tile_reduce.py +950 -0
- warp/tests/tile/test_tile_shared_memory.py +376 -0
- warp/tests/tile/test_tile_sort.py +121 -0
- warp/tests/tile/test_tile_view.py +173 -0
- warp/tests/unittest_serial.py +47 -0
- warp/tests/unittest_suites.py +430 -0
- warp/tests/unittest_utils.py +469 -0
- warp/tests/walkthrough_debug.py +95 -0
- warp/torch.py +24 -0
- warp/types.py +51 -0
- warp/utils.py +31 -0
- warp_lang-1.10.0.dist-info/METADATA +459 -0
- warp_lang-1.10.0.dist-info/RECORD +468 -0
- warp_lang-1.10.0.dist-info/WHEEL +5 -0
- warp_lang-1.10.0.dist-info/licenses/LICENSE.md +176 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/top_level.txt +1 -0
warp/native/version.h
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2025 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.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef WP_VERSION_H
|
|
19
|
+
#define WP_VERSION_H
|
|
20
|
+
|
|
21
|
+
#define WP_VERSION_STRING "1.10.0"
|
|
22
|
+
|
|
23
|
+
#endif // WP_VERSION_H
|
warp/native/volume.cpp
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
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.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "cuda_util.h"
|
|
19
|
+
#include "volume_builder.h"
|
|
20
|
+
#include "volume_impl.h"
|
|
21
|
+
#include "warp.h"
|
|
22
|
+
|
|
23
|
+
#include <map>
|
|
24
|
+
|
|
25
|
+
using namespace wp;
|
|
26
|
+
|
|
27
|
+
namespace
|
|
28
|
+
{
|
|
29
|
+
|
|
30
|
+
struct VolumeDesc
|
|
31
|
+
{
|
|
32
|
+
// NanoVDB buffer either in device or host memory
|
|
33
|
+
void* buffer;
|
|
34
|
+
uint64_t size_in_bytes;
|
|
35
|
+
bool owner; // whether the buffer should be deallocated when the volume is destroyed
|
|
36
|
+
|
|
37
|
+
pnanovdb_grid_t grid_data;
|
|
38
|
+
pnanovdb_tree_t tree_data;
|
|
39
|
+
|
|
40
|
+
// Host-accessible version of the blind metadata (copy if GPU, alias if CPU)
|
|
41
|
+
pnanovdb_gridblindmetadata_t* blind_metadata;
|
|
42
|
+
|
|
43
|
+
// CUDA context for this volume (NULL if CPU)
|
|
44
|
+
void* context;
|
|
45
|
+
|
|
46
|
+
pnanovdb_buf_t as_pnano() const { return pnanovdb_make_buf(static_cast<uint32_t*>(buffer), size_in_bytes); }
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Host-side volume descriptors. Maps each CPU/GPU volume buffer address (id) to a CPU desc
|
|
50
|
+
std::map<uint64_t, VolumeDesc> g_volume_descriptors;
|
|
51
|
+
|
|
52
|
+
bool volume_get_descriptor(uint64_t id, const VolumeDesc*& volumeDesc)
|
|
53
|
+
{
|
|
54
|
+
if (id == 0)
|
|
55
|
+
return false;
|
|
56
|
+
|
|
57
|
+
const auto& iter = g_volume_descriptors.find(id);
|
|
58
|
+
if (iter == g_volume_descriptors.end())
|
|
59
|
+
return false;
|
|
60
|
+
else
|
|
61
|
+
volumeDesc = &iter->second;
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
bool volume_exists(const void* id)
|
|
66
|
+
{
|
|
67
|
+
const VolumeDesc* volume;
|
|
68
|
+
return volume_get_descriptor((uint64_t)id, volume);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
void volume_add_descriptor(uint64_t id, VolumeDesc&& volumeDesc) { g_volume_descriptors[id] = std::move(volumeDesc); }
|
|
72
|
+
|
|
73
|
+
void volume_rem_descriptor(uint64_t id) { g_volume_descriptors.erase(id); }
|
|
74
|
+
|
|
75
|
+
void volume_set_map(nanovdb::Map& map, const float transform[9], const float translation[3])
|
|
76
|
+
{
|
|
77
|
+
// Need to transpose as Map::set is transposing again
|
|
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]);
|
|
80
|
+
const mat_t<3, 3, double> inv = inverse(transpose);
|
|
81
|
+
|
|
82
|
+
map.set(transpose.data, inv.data, translation);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
} // anonymous namespace
|
|
86
|
+
|
|
87
|
+
// NB: buf must be a host pointer
|
|
88
|
+
uint64_t wp_volume_create_host(void* buf, uint64_t size, bool copy, bool owner)
|
|
89
|
+
{
|
|
90
|
+
if (buf == nullptr || (size > 0 && size < sizeof(pnanovdb_grid_t) + sizeof(pnanovdb_tree_t)))
|
|
91
|
+
return 0; // This cannot be a valid NanoVDB grid with data
|
|
92
|
+
|
|
93
|
+
if (!copy && volume_exists(buf))
|
|
94
|
+
{
|
|
95
|
+
// descriptor already created for this volume
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
VolumeDesc volume;
|
|
100
|
+
volume.context = NULL;
|
|
101
|
+
|
|
102
|
+
wp_memcpy_h2h(&volume.grid_data, buf, sizeof(pnanovdb_grid_t));
|
|
103
|
+
wp_memcpy_h2h(&volume.tree_data, (pnanovdb_grid_t*)buf + 1, sizeof(pnanovdb_tree_t));
|
|
104
|
+
|
|
105
|
+
if (volume.grid_data.magic != PNANOVDB_MAGIC_NUMBER && volume.grid_data.magic != PNANOVDB_MAGIC_GRID)
|
|
106
|
+
return 0;
|
|
107
|
+
|
|
108
|
+
if (size == 0)
|
|
109
|
+
{
|
|
110
|
+
size = volume.grid_data.grid_size;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Copy or alias buffer
|
|
114
|
+
volume.size_in_bytes = size;
|
|
115
|
+
if (copy)
|
|
116
|
+
{
|
|
117
|
+
volume.buffer = wp_alloc_host(size);
|
|
118
|
+
wp_memcpy_h2h(volume.buffer, buf, size);
|
|
119
|
+
volume.owner = true;
|
|
120
|
+
}
|
|
121
|
+
else
|
|
122
|
+
{
|
|
123
|
+
volume.buffer = buf;
|
|
124
|
+
volume.owner = owner;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Alias blind metadata
|
|
128
|
+
volume.blind_metadata = reinterpret_cast<pnanovdb_gridblindmetadata_t*>(static_cast<uint8_t*>(volume.buffer) +
|
|
129
|
+
volume.grid_data.blind_metadata_offset);
|
|
130
|
+
|
|
131
|
+
uint64_t id = (uint64_t)volume.buffer;
|
|
132
|
+
|
|
133
|
+
volume_add_descriptor(id, std::move(volume));
|
|
134
|
+
|
|
135
|
+
return id;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// NB: buf must be a pointer on the same device
|
|
139
|
+
uint64_t wp_volume_create_device(void* context, void* buf, uint64_t size, bool copy, bool owner)
|
|
140
|
+
{
|
|
141
|
+
if (buf == nullptr || (size > 0 && size < sizeof(pnanovdb_grid_t) + sizeof(pnanovdb_tree_t)))
|
|
142
|
+
return 0; // This cannot be a valid NanoVDB grid with data
|
|
143
|
+
|
|
144
|
+
if (!copy && volume_exists(buf))
|
|
145
|
+
{
|
|
146
|
+
// descriptor already created for this volume
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
ContextGuard guard(context);
|
|
151
|
+
|
|
152
|
+
VolumeDesc volume;
|
|
153
|
+
volume.context = context ? context : wp_cuda_context_get_current();
|
|
154
|
+
|
|
155
|
+
wp_memcpy_d2h(WP_CURRENT_CONTEXT, &volume.grid_data, buf, sizeof(pnanovdb_grid_t));
|
|
156
|
+
wp_memcpy_d2h(WP_CURRENT_CONTEXT, &volume.tree_data, (pnanovdb_grid_t*)buf + 1, sizeof(pnanovdb_tree_t));
|
|
157
|
+
// no sync needed since the above copies are to pageable memory
|
|
158
|
+
|
|
159
|
+
if (volume.grid_data.magic != PNANOVDB_MAGIC_NUMBER && volume.grid_data.magic != PNANOVDB_MAGIC_GRID)
|
|
160
|
+
return 0;
|
|
161
|
+
|
|
162
|
+
if (size == 0)
|
|
163
|
+
{
|
|
164
|
+
size = volume.grid_data.grid_size;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Copy or alias data buffer
|
|
168
|
+
volume.size_in_bytes = size;
|
|
169
|
+
if (copy)
|
|
170
|
+
{
|
|
171
|
+
volume.buffer = wp_alloc_device(WP_CURRENT_CONTEXT, size);
|
|
172
|
+
wp_memcpy_d2d(WP_CURRENT_CONTEXT, volume.buffer, buf, size);
|
|
173
|
+
volume.owner = true;
|
|
174
|
+
}
|
|
175
|
+
else
|
|
176
|
+
{
|
|
177
|
+
volume.buffer = buf;
|
|
178
|
+
volume.owner = owner;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Make blind metadata accessible on host
|
|
182
|
+
const uint64_t blindmetadata_size = volume.grid_data.blind_metadata_count * sizeof(pnanovdb_gridblindmetadata_t);
|
|
183
|
+
volume.blind_metadata = static_cast<pnanovdb_gridblindmetadata_t*>(wp_alloc_pinned(blindmetadata_size));
|
|
184
|
+
wp_memcpy_d2h(WP_CURRENT_CONTEXT, volume.blind_metadata,
|
|
185
|
+
static_cast<uint8_t*>(volume.buffer) + volume.grid_data.blind_metadata_offset, blindmetadata_size);
|
|
186
|
+
|
|
187
|
+
uint64_t id = (uint64_t)volume.buffer;
|
|
188
|
+
volume_add_descriptor(id, std::move(volume));
|
|
189
|
+
|
|
190
|
+
return id;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
void wp_volume_get_buffer_info(uint64_t id, void** buf, uint64_t* size)
|
|
194
|
+
{
|
|
195
|
+
*buf = 0;
|
|
196
|
+
*size = 0;
|
|
197
|
+
|
|
198
|
+
const VolumeDesc* volume;
|
|
199
|
+
if (volume_get_descriptor(id, volume))
|
|
200
|
+
{
|
|
201
|
+
*buf = volume->buffer;
|
|
202
|
+
*size = volume->size_in_bytes;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
void wp_volume_get_voxel_size(uint64_t id, float* dx, float* dy, float* dz)
|
|
207
|
+
{
|
|
208
|
+
*dx = *dy = *dz = 0.0f;
|
|
209
|
+
|
|
210
|
+
const VolumeDesc* volume;
|
|
211
|
+
if (volume_get_descriptor(id, volume))
|
|
212
|
+
{
|
|
213
|
+
*dx = (float)volume->grid_data.voxel_size[0];
|
|
214
|
+
*dy = (float)volume->grid_data.voxel_size[1];
|
|
215
|
+
*dz = (float)volume->grid_data.voxel_size[2];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
void wp_volume_get_tile_and_voxel_count(uint64_t id, uint32_t& tile_count, uint64_t& voxel_count)
|
|
220
|
+
{
|
|
221
|
+
tile_count = 0;
|
|
222
|
+
voxel_count = 0;
|
|
223
|
+
|
|
224
|
+
const VolumeDesc* volume;
|
|
225
|
+
if (volume_get_descriptor(id, volume))
|
|
226
|
+
{
|
|
227
|
+
tile_count = volume->tree_data.node_count_leaf;
|
|
228
|
+
|
|
229
|
+
const uint32_t grid_type = volume->grid_data.grid_type;
|
|
230
|
+
|
|
231
|
+
switch (grid_type)
|
|
232
|
+
{
|
|
233
|
+
case PNANOVDB_GRID_TYPE_ONINDEX:
|
|
234
|
+
case PNANOVDB_GRID_TYPE_ONINDEXMASK:
|
|
235
|
+
// number of indexable voxels is number of active voxels
|
|
236
|
+
voxel_count = volume->tree_data.voxel_count;
|
|
237
|
+
break;
|
|
238
|
+
default:
|
|
239
|
+
// all leaf voxels are indexable
|
|
240
|
+
voxel_count = uint64_t(tile_count) * PNANOVDB_LEAF_TABLE_COUNT;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const char* wp_volume_get_grid_info(uint64_t id, uint64_t* grid_size, uint32_t* grid_index, uint32_t* grid_count,
|
|
246
|
+
float translation[3], float transform[9], char type_str[16])
|
|
247
|
+
{
|
|
248
|
+
const VolumeDesc* volume;
|
|
249
|
+
if (volume_get_descriptor(id, volume))
|
|
250
|
+
{
|
|
251
|
+
const pnanovdb_grid_t& grid_data = volume->grid_data;
|
|
252
|
+
*grid_count = grid_data.grid_count;
|
|
253
|
+
*grid_index = grid_data.grid_index;
|
|
254
|
+
*grid_size = grid_data.grid_size;
|
|
255
|
+
|
|
256
|
+
memcpy(translation, grid_data.map.vecf, sizeof(grid_data.map.vecf));
|
|
257
|
+
memcpy(transform, grid_data.map.matf, sizeof(grid_data.map.matf));
|
|
258
|
+
|
|
259
|
+
nanovdb::toStr(type_str, static_cast<nanovdb::GridType>(grid_data.grid_type));
|
|
260
|
+
return reinterpret_cast<const char*>(grid_data.grid_name);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
*grid_size = 0;
|
|
264
|
+
*grid_index = 0;
|
|
265
|
+
*grid_count = 0;
|
|
266
|
+
type_str[0] = 0;
|
|
267
|
+
|
|
268
|
+
return nullptr;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
uint32_t wp_volume_get_blind_data_count(uint64_t id)
|
|
272
|
+
{
|
|
273
|
+
const VolumeDesc* volume;
|
|
274
|
+
if (volume_get_descriptor(id, volume))
|
|
275
|
+
{
|
|
276
|
+
return volume->grid_data.blind_metadata_count;
|
|
277
|
+
}
|
|
278
|
+
return 0;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const char* wp_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])
|
|
283
|
+
{
|
|
284
|
+
const VolumeDesc* volume;
|
|
285
|
+
if (volume_get_descriptor(id, volume) && data_index < volume->grid_data.blind_metadata_count)
|
|
286
|
+
{
|
|
287
|
+
const pnanovdb_gridblindmetadata_t& metadata = volume->blind_metadata[data_index];
|
|
288
|
+
*value_count = metadata.value_count;
|
|
289
|
+
*value_size = metadata.value_size;
|
|
290
|
+
|
|
291
|
+
nanovdb::toStr(type_str, static_cast<nanovdb::GridType>(metadata.data_type));
|
|
292
|
+
*buf = static_cast<uint8_t*>(volume->buffer) + volume->grid_data.blind_metadata_offset +
|
|
293
|
+
data_index * sizeof(pnanovdb_gridblindmetadata_t) + metadata.data_offset;
|
|
294
|
+
return reinterpret_cast<const char*>(metadata.name);
|
|
295
|
+
}
|
|
296
|
+
*buf = nullptr;
|
|
297
|
+
*value_count = 0;
|
|
298
|
+
*value_size = 0;
|
|
299
|
+
type_str[0] = 0;
|
|
300
|
+
return nullptr;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
void wp_volume_get_tiles_host(uint64_t id, void* buf)
|
|
304
|
+
{
|
|
305
|
+
static constexpr uint32_t MASK = (1u << 3u) - 1u; // mask for bit operations
|
|
306
|
+
|
|
307
|
+
const VolumeDesc* volume;
|
|
308
|
+
if (volume_get_descriptor(id, volume))
|
|
309
|
+
{
|
|
310
|
+
const uint32_t leaf_count = volume->tree_data.node_count_leaf;
|
|
311
|
+
|
|
312
|
+
pnanovdb_coord_t* leaf_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
313
|
+
|
|
314
|
+
const uint64_t first_leaf =
|
|
315
|
+
(uint64_t)volume->buffer + sizeof(pnanovdb_grid_t) + volume->tree_data.node_offset_leaf;
|
|
316
|
+
const uint32_t leaf_stride = PNANOVDB_GRID_TYPE_GET(volume->grid_data.grid_type, leaf_size);
|
|
317
|
+
|
|
318
|
+
const pnanovdb_buf_t pnano_buf = volume->as_pnano();
|
|
319
|
+
|
|
320
|
+
for (uint32_t i = 0; i < leaf_count; ++i)
|
|
321
|
+
{
|
|
322
|
+
pnanovdb_leaf_handle_t leaf = volume::get_leaf(pnano_buf, i);
|
|
323
|
+
leaf_coords[i] = volume::leaf_origin(pnano_buf, leaf);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
void wp_volume_get_voxels_host(uint64_t id, void* buf)
|
|
329
|
+
{
|
|
330
|
+
const VolumeDesc* volume;
|
|
331
|
+
if (volume_get_descriptor(id, volume))
|
|
332
|
+
{
|
|
333
|
+
uint32_t leaf_count;
|
|
334
|
+
uint64_t voxel_count;
|
|
335
|
+
wp_volume_get_tile_and_voxel_count(id, leaf_count, voxel_count);
|
|
336
|
+
|
|
337
|
+
pnanovdb_coord_t* voxel_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
338
|
+
|
|
339
|
+
const pnanovdb_buf_t pnano_buf = volume->as_pnano();
|
|
340
|
+
for (uint32_t i = 0; i < leaf_count; ++i)
|
|
341
|
+
{
|
|
342
|
+
pnanovdb_leaf_handle_t leaf = volume::get_leaf(pnano_buf, i);
|
|
343
|
+
pnanovdb_coord_t leaf_coords = volume::leaf_origin(pnano_buf, leaf);
|
|
344
|
+
|
|
345
|
+
for (uint32_t n = 0; n < 512; ++n)
|
|
346
|
+
{
|
|
347
|
+
pnanovdb_coord_t loc_ijk = volume::leaf_offset_to_local_coord(n);
|
|
348
|
+
pnanovdb_coord_t ijk = {
|
|
349
|
+
loc_ijk.x + leaf_coords.x,
|
|
350
|
+
loc_ijk.y + leaf_coords.y,
|
|
351
|
+
loc_ijk.z + leaf_coords.z,
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
const uint64_t index = volume::leaf_voxel_index(pnano_buf, i, ijk);
|
|
355
|
+
if (index < voxel_count)
|
|
356
|
+
{
|
|
357
|
+
voxel_coords[index] = ijk;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
void wp_volume_destroy_host(uint64_t id)
|
|
365
|
+
{
|
|
366
|
+
const VolumeDesc* volume;
|
|
367
|
+
if (volume_get_descriptor(id, volume))
|
|
368
|
+
{
|
|
369
|
+
if (volume->owner)
|
|
370
|
+
{
|
|
371
|
+
wp_free_host(volume->buffer);
|
|
372
|
+
}
|
|
373
|
+
volume_rem_descriptor(id);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
void wp_volume_destroy_device(uint64_t id)
|
|
378
|
+
{
|
|
379
|
+
const VolumeDesc* volume;
|
|
380
|
+
if (volume_get_descriptor(id, volume))
|
|
381
|
+
{
|
|
382
|
+
ContextGuard guard(volume->context);
|
|
383
|
+
if (volume->owner)
|
|
384
|
+
{
|
|
385
|
+
wp_free_device(WP_CURRENT_CONTEXT, volume->buffer);
|
|
386
|
+
}
|
|
387
|
+
wp_free_pinned(volume->blind_metadata);
|
|
388
|
+
volume_rem_descriptor(id);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
#if WP_ENABLE_CUDA
|
|
393
|
+
|
|
394
|
+
uint64_t wp_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)
|
|
397
|
+
{
|
|
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 wp_volume_create_device(context, grid, gridSize, false, true); \
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
WP_VOLUME_BUILDER_INSTANTIATE_TYPES
|
|
414
|
+
#undef EXPAND_BUILDER_TYPE
|
|
415
|
+
|
|
416
|
+
return 0;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
uint64_t wp_volume_index_from_tiles_device(void* context, void* points, int num_points, float transform[9],
|
|
420
|
+
float translation[3], bool points_in_world_space)
|
|
421
|
+
{
|
|
422
|
+
nanovdb::IndexGrid* grid;
|
|
423
|
+
size_t gridSize;
|
|
424
|
+
BuildGridParams<nanovdb::ValueIndex> params;
|
|
425
|
+
volume_set_map(params.map, transform, translation);
|
|
426
|
+
|
|
427
|
+
build_grid_from_points(grid, gridSize, points, num_points, points_in_world_space, params);
|
|
428
|
+
|
|
429
|
+
return wp_volume_create_device(context, grid, gridSize, false, true);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
uint64_t wp_volume_from_active_voxels_device(void* context, void* points, int num_points, float transform[9],
|
|
433
|
+
float translation[3], bool points_in_world_space)
|
|
434
|
+
{
|
|
435
|
+
nanovdb::OnIndexGrid* grid;
|
|
436
|
+
size_t gridSize;
|
|
437
|
+
BuildGridParams<nanovdb::ValueOnIndex> params;
|
|
438
|
+
volume_set_map(params.map, transform, translation);
|
|
439
|
+
|
|
440
|
+
build_grid_from_points(grid, gridSize, points, num_points, points_in_world_space, params);
|
|
441
|
+
|
|
442
|
+
return wp_volume_create_device(context, grid, gridSize, false, true);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
void launch_get_leaf_coords(void* context, const uint32_t leaf_count, pnanovdb_coord_t* leaf_coords,
|
|
446
|
+
pnanovdb_buf_t buf);
|
|
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);
|
|
449
|
+
|
|
450
|
+
void wp_volume_get_tiles_device(uint64_t id, void* buf)
|
|
451
|
+
{
|
|
452
|
+
const VolumeDesc* volume;
|
|
453
|
+
if (volume_get_descriptor(id, volume))
|
|
454
|
+
{
|
|
455
|
+
const uint32_t leaf_count = volume->tree_data.node_count_leaf;
|
|
456
|
+
|
|
457
|
+
pnanovdb_coord_t* leaf_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
458
|
+
launch_get_leaf_coords(volume->context, leaf_count, leaf_coords, volume->as_pnano());
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
void wp_volume_get_voxels_device(uint64_t id, void* buf)
|
|
463
|
+
{
|
|
464
|
+
const VolumeDesc* volume;
|
|
465
|
+
if (volume_get_descriptor(id, volume))
|
|
466
|
+
{
|
|
467
|
+
uint32_t leaf_count;
|
|
468
|
+
uint64_t voxel_count;
|
|
469
|
+
wp_volume_get_tile_and_voxel_count(id, leaf_count, voxel_count);
|
|
470
|
+
|
|
471
|
+
pnanovdb_coord_t* voxel_coords = static_cast<pnanovdb_coord_t*>(buf);
|
|
472
|
+
launch_get_voxel_coords(volume->context, leaf_count, voxel_count, voxel_coords, volume->as_pnano());
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
#else
|
|
477
|
+
// stubs for non-CUDA platforms
|
|
478
|
+
uint64_t wp_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)
|
|
481
|
+
{
|
|
482
|
+
return 0;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
uint64_t wp_volume_index_from_tiles_device(void* context, void* points, int num_points, float transform[9],
|
|
486
|
+
float translation[3], bool points_in_world_space)
|
|
487
|
+
{
|
|
488
|
+
return 0;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
uint64_t wp_volume_from_active_voxels_device(void* context, void* points, int num_points, float transform[9],
|
|
492
|
+
float translation[3], bool points_in_world_space)
|
|
493
|
+
{
|
|
494
|
+
return 0;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
void wp_volume_get_tiles_device(uint64_t id, void* buf) {}
|
|
498
|
+
|
|
499
|
+
void wp_volume_get_voxels_device(uint64_t id, void* buf) {}
|
|
500
|
+
|
|
501
|
+
#endif
|
warp/native/volume.cu
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
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.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "cuda_util.h"
|
|
19
|
+
#include "volume_impl.h"
|
|
20
|
+
#include "warp.h"
|
|
21
|
+
|
|
22
|
+
extern CUcontext get_current_context();
|
|
23
|
+
|
|
24
|
+
__global__ void volume_get_leaf_coords(const uint32_t leaf_count, pnanovdb_coord_t *leaf_coords,
|
|
25
|
+
const pnanovdb_buf_t buf)
|
|
26
|
+
{
|
|
27
|
+
const int tid = blockIdx.x * blockDim.x + threadIdx.x;
|
|
28
|
+
|
|
29
|
+
if (tid < leaf_count)
|
|
30
|
+
{
|
|
31
|
+
pnanovdb_leaf_handle_t leaf = wp::volume::get_leaf(buf, tid);
|
|
32
|
+
leaf_coords[tid] = wp::volume::leaf_origin(buf, leaf);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
__global__ void volume_get_voxel_coords(const uint32_t voxel_count, pnanovdb_coord_t *voxel_coords,
|
|
37
|
+
const pnanovdb_buf_t buf)
|
|
38
|
+
{
|
|
39
|
+
const uint32_t leaf_index = blockIdx.x;
|
|
40
|
+
pnanovdb_leaf_handle_t leaf = wp::volume::get_leaf(buf, leaf_index);
|
|
41
|
+
pnanovdb_coord_t leaf_coords = wp::volume::leaf_origin(buf, leaf);
|
|
42
|
+
|
|
43
|
+
pnanovdb_coord_t ijk = {
|
|
44
|
+
int32_t(threadIdx.x) + leaf_coords.x,
|
|
45
|
+
int32_t(threadIdx.y) + leaf_coords.y,
|
|
46
|
+
int32_t(threadIdx.z) + leaf_coords.z,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const uint64_t index = wp::volume::leaf_voxel_index(buf, leaf_index, ijk);
|
|
50
|
+
if (index < voxel_count)
|
|
51
|
+
{
|
|
52
|
+
voxel_coords[index] = ijk;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void launch_get_leaf_coords(void *context, const uint32_t leaf_count, pnanovdb_coord_t *leaf_coords, pnanovdb_buf_t buf)
|
|
57
|
+
{
|
|
58
|
+
ContextGuard guard(context);
|
|
59
|
+
wp_launch_device(WP_CURRENT_CONTEXT, volume_get_leaf_coords, leaf_count, (leaf_count, leaf_coords, buf));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void launch_get_voxel_coords(void *context, const uint32_t leaf_count, const uint32_t voxel_count,
|
|
63
|
+
pnanovdb_coord_t *voxel_coords, pnanovdb_buf_t buf)
|
|
64
|
+
{
|
|
65
|
+
ContextGuard guard(context);
|
|
66
|
+
cudaStream_t stream = (cudaStream_t)wp_cuda_stream_get_current();
|
|
67
|
+
volume_get_voxel_coords<<<leaf_count, dim3(8, 8, 8), 0, stream>>>(voxel_count, voxel_coords, buf);
|
|
68
|
+
}
|