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/mesh.cu
ADDED
|
@@ -0,0 +1,406 @@
|
|
|
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 "warp.h"
|
|
19
|
+
#include "cuda_util.h"
|
|
20
|
+
#include "mesh.h"
|
|
21
|
+
#include "bvh.h"
|
|
22
|
+
#include "scan.h"
|
|
23
|
+
|
|
24
|
+
extern CUcontext get_current_context();
|
|
25
|
+
|
|
26
|
+
namespace wp
|
|
27
|
+
{
|
|
28
|
+
|
|
29
|
+
__global__ void compute_triangle_bounds(int n, const vec3* points, const int* indices, vec3* lowers, vec3* uppers)
|
|
30
|
+
{
|
|
31
|
+
const int tid = blockIdx.x*blockDim.x + threadIdx.x;
|
|
32
|
+
|
|
33
|
+
if (tid < n)
|
|
34
|
+
{
|
|
35
|
+
// if leaf then update bounds
|
|
36
|
+
int i = indices[tid*3+0];
|
|
37
|
+
int j = indices[tid*3+1];
|
|
38
|
+
int k = indices[tid*3+2];
|
|
39
|
+
|
|
40
|
+
vec3 p = points[i];
|
|
41
|
+
vec3 q = points[j];
|
|
42
|
+
vec3 r = points[k];
|
|
43
|
+
|
|
44
|
+
vec3 lower = min(min(p, q), r);
|
|
45
|
+
vec3 upper = max(max(p, q), r);
|
|
46
|
+
|
|
47
|
+
lowers[tid] = lower;
|
|
48
|
+
uppers[tid] = upper;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
__global__ void compute_mesh_edge_lengths(int n, const vec3* points, const int* indices, float* edge_lengths)
|
|
53
|
+
{
|
|
54
|
+
const int tid = blockIdx.x*blockDim.x + threadIdx.x;
|
|
55
|
+
|
|
56
|
+
if (tid < n)
|
|
57
|
+
{
|
|
58
|
+
// if leaf then update bounds
|
|
59
|
+
int i = indices[tid*3+0];
|
|
60
|
+
int j = indices[tid*3+1];
|
|
61
|
+
int k = indices[tid*3+2];
|
|
62
|
+
|
|
63
|
+
vec3 p = points[i];
|
|
64
|
+
vec3 q = points[j];
|
|
65
|
+
vec3 r = points[k];
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
edge_lengths[tid] = length(p-q) + length(p-r) + length(q-r);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
__global__ void compute_average_mesh_edge_length(int n, float* sum_edge_lengths, Mesh* m)
|
|
73
|
+
{
|
|
74
|
+
m->average_edge_length = sum_edge_lengths[n - 1] / (3*n);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
__global__ void bvh_refit_with_solid_angle_kernel(int n, const int* __restrict__ parents,
|
|
78
|
+
int* __restrict__ child_count, BVHPackedNodeHalf* __restrict__ node_lowers, BVHPackedNodeHalf* __restrict__ node_uppers,
|
|
79
|
+
const vec3* points, const int* indices, const int* primitive_indices, SolidAngleProps* solid_angle_props)
|
|
80
|
+
{
|
|
81
|
+
int index = blockDim.x*blockIdx.x + threadIdx.x;
|
|
82
|
+
|
|
83
|
+
if (index < n)
|
|
84
|
+
{
|
|
85
|
+
bool leaf = node_lowers[index].b;
|
|
86
|
+
int parent = parents[index];
|
|
87
|
+
|
|
88
|
+
if (leaf)
|
|
89
|
+
{
|
|
90
|
+
BVHPackedNodeHalf& lower = node_lowers[index];
|
|
91
|
+
BVHPackedNodeHalf& upper = node_uppers[index];
|
|
92
|
+
|
|
93
|
+
// update the leaf node
|
|
94
|
+
bool true_leaf = true;
|
|
95
|
+
|
|
96
|
+
if (parent != -1)
|
|
97
|
+
{
|
|
98
|
+
true_leaf = !node_lowers[parent].b;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (true_leaf)
|
|
102
|
+
{
|
|
103
|
+
SolidAngleProps node_solid_angle_props;
|
|
104
|
+
|
|
105
|
+
const int start = lower.i;
|
|
106
|
+
const int end = upper.i;
|
|
107
|
+
|
|
108
|
+
// loops through primitives in the leaf
|
|
109
|
+
for (int primitive_counter = start; primitive_counter < end; primitive_counter++)
|
|
110
|
+
{
|
|
111
|
+
int primitive_index = primitive_indices[primitive_counter];
|
|
112
|
+
if (primitive_counter == start)
|
|
113
|
+
{
|
|
114
|
+
precompute_triangle_solid_angle_props(points[indices[primitive_index * 3 + 0]], points[indices[primitive_index * 3 + 1]],
|
|
115
|
+
points[indices[primitive_index * 3 + 2]], node_solid_angle_props);
|
|
116
|
+
}
|
|
117
|
+
else
|
|
118
|
+
{
|
|
119
|
+
SolidAngleProps triangle_solid_angle_props;
|
|
120
|
+
precompute_triangle_solid_angle_props(points[indices[primitive_index * 3 + 0]], points[indices[primitive_index * 3 + 1]],
|
|
121
|
+
points[indices[primitive_index * 3 + 2]], triangle_solid_angle_props);
|
|
122
|
+
node_solid_angle_props = combine_precomputed_solid_angle_props(&node_solid_angle_props, &triangle_solid_angle_props);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
(vec3&)lower = node_solid_angle_props.box.lower;
|
|
127
|
+
(vec3&)upper = node_solid_angle_props.box.upper;
|
|
128
|
+
solid_angle_props[index] = node_solid_angle_props;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
else
|
|
133
|
+
{
|
|
134
|
+
// only keep leaf threads
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// update hierarchy
|
|
139
|
+
for (;;)
|
|
140
|
+
{
|
|
141
|
+
parent = parents[index];
|
|
142
|
+
|
|
143
|
+
// reached root
|
|
144
|
+
if (parent == -1)
|
|
145
|
+
return;
|
|
146
|
+
|
|
147
|
+
// ensure all writes are visible
|
|
148
|
+
__threadfence();
|
|
149
|
+
|
|
150
|
+
int finished = atomicAdd(&child_count[parent], 1);
|
|
151
|
+
|
|
152
|
+
// if we have are the last thread (such that the parent node is now complete)
|
|
153
|
+
// then update its bounds and move onto the next parent in the hierarchy
|
|
154
|
+
if (finished == 1)
|
|
155
|
+
{
|
|
156
|
+
BVHPackedNodeHalf& parent_lower = node_lowers[parent];
|
|
157
|
+
BVHPackedNodeHalf& parent_upper = node_uppers[parent];
|
|
158
|
+
if (parent_lower.b)
|
|
159
|
+
// a packed leaf node can still be a parent in LBVH, we need to recompute its bounds
|
|
160
|
+
// since we've lost its left and right child node index in the muting process
|
|
161
|
+
{
|
|
162
|
+
int parent_parent = parents[parent];;
|
|
163
|
+
// only need to compute bound when this is a valid leaf node
|
|
164
|
+
bool true_leaf = true;
|
|
165
|
+
|
|
166
|
+
if (parent_parent != -1)
|
|
167
|
+
{
|
|
168
|
+
true_leaf = !node_lowers[parent_parent].b;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (true_leaf)
|
|
172
|
+
{
|
|
173
|
+
SolidAngleProps node_solid_angle_props;
|
|
174
|
+
const int start = parent_lower.i;
|
|
175
|
+
const int end = parent_upper.i;
|
|
176
|
+
// loops through primitives in the leaf
|
|
177
|
+
for (int primitive_counter = start; primitive_counter < end; primitive_counter++)
|
|
178
|
+
{
|
|
179
|
+
int primitive_index = primitive_indices[primitive_counter];
|
|
180
|
+
if (primitive_counter == start)
|
|
181
|
+
{
|
|
182
|
+
precompute_triangle_solid_angle_props(points[indices[primitive_index * 3 + 0]], points[indices[primitive_index * 3 + 1]],
|
|
183
|
+
points[indices[primitive_index * 3 + 2]], node_solid_angle_props);
|
|
184
|
+
}
|
|
185
|
+
else
|
|
186
|
+
{
|
|
187
|
+
SolidAngleProps triangle_solid_angle_props;
|
|
188
|
+
precompute_triangle_solid_angle_props(points[indices[primitive_index * 3 + 0]], points[indices[primitive_index * 3 + 1]],
|
|
189
|
+
points[indices[primitive_index * 3 + 2]], triangle_solid_angle_props);
|
|
190
|
+
node_solid_angle_props = combine_precomputed_solid_angle_props(&node_solid_angle_props, &triangle_solid_angle_props);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
(vec3&)parent_lower = node_solid_angle_props.box.lower;
|
|
195
|
+
(vec3&)parent_upper = node_solid_angle_props.box.upper;
|
|
196
|
+
solid_angle_props[parent] = node_solid_angle_props;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else
|
|
200
|
+
{
|
|
201
|
+
//printf("Compute non-leaf at %d\n", index);
|
|
202
|
+
const int left_child = node_lowers[parent].i;
|
|
203
|
+
const int right_child = node_uppers[parent].i;
|
|
204
|
+
|
|
205
|
+
vec3 left_lower = (vec3&)(node_lowers[left_child]);
|
|
206
|
+
vec3 left_upper = (vec3&)(node_uppers[left_child]);
|
|
207
|
+
vec3 right_lower = (vec3&)(node_lowers[right_child]);
|
|
208
|
+
vec3 right_upper = (vec3&)(node_uppers[right_child]);
|
|
209
|
+
|
|
210
|
+
// union of child bounds
|
|
211
|
+
vec3 lower = min(left_lower, right_lower);
|
|
212
|
+
vec3 upper = max(left_upper, right_upper);
|
|
213
|
+
|
|
214
|
+
// write new BVH nodes
|
|
215
|
+
(vec3&)parent_lower = lower;
|
|
216
|
+
(vec3&)parent_upper = upper;
|
|
217
|
+
|
|
218
|
+
// combine
|
|
219
|
+
SolidAngleProps* left_child_data = &solid_angle_props[left_child];
|
|
220
|
+
SolidAngleProps* right_child_data = (left_child != right_child) ? &solid_angle_props[right_child] : NULL;
|
|
221
|
+
|
|
222
|
+
combine_precomputed_solid_angle_props(solid_angle_props[parent], left_child_data, right_child_data);
|
|
223
|
+
}
|
|
224
|
+
// move onto processing the parent
|
|
225
|
+
index = parent;
|
|
226
|
+
}
|
|
227
|
+
else
|
|
228
|
+
{
|
|
229
|
+
// parent not ready (we are the first child), terminate thread
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
void bvh_refit_with_solid_angle_device(BVH& bvh, Mesh& mesh)
|
|
238
|
+
{
|
|
239
|
+
ContextGuard guard(bvh.context);
|
|
240
|
+
|
|
241
|
+
// clear child counters
|
|
242
|
+
wp_memset_device(WP_CURRENT_CONTEXT, bvh.node_counts, 0, sizeof(int) * bvh.max_nodes);
|
|
243
|
+
wp_launch_device(WP_CURRENT_CONTEXT, bvh_refit_with_solid_angle_kernel, bvh.num_leaf_nodes,
|
|
244
|
+
(bvh.num_leaf_nodes, bvh.node_parents, bvh.node_counts, bvh.node_lowers, bvh.node_uppers, mesh.points, mesh.indices, bvh.primitive_indices, mesh.solid_angle_props));
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
} // namespace wp
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
uint64_t wp_mesh_create_device(void* context, wp::array_t<wp::vec3> points, wp::array_t<wp::vec3> velocities, wp::array_t<int> indices, int num_points, int num_tris, int support_winding_number, int constructor_type, int bvh_leaf_size)
|
|
251
|
+
{
|
|
252
|
+
ContextGuard guard(context);
|
|
253
|
+
|
|
254
|
+
wp::Mesh mesh(points, velocities, indices, num_points, num_tris);
|
|
255
|
+
|
|
256
|
+
mesh.context = context ? context : wp_cuda_context_get_current();
|
|
257
|
+
|
|
258
|
+
// create lower upper arrays expected by GPU BVH builder
|
|
259
|
+
mesh.lowers = (wp::vec3*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::vec3)*num_tris);
|
|
260
|
+
mesh.uppers = (wp::vec3*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::vec3)*num_tris);
|
|
261
|
+
|
|
262
|
+
if (support_winding_number)
|
|
263
|
+
{
|
|
264
|
+
int num_bvh_nodes = 2 * num_tris;
|
|
265
|
+
mesh.solid_angle_props = (wp::SolidAngleProps*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::SolidAngleProps) * num_bvh_nodes);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
wp::Mesh* mesh_device = (wp::Mesh*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::Mesh));
|
|
269
|
+
wp_memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &mesh, sizeof(wp::Mesh));
|
|
270
|
+
|
|
271
|
+
// save descriptor
|
|
272
|
+
uint64_t mesh_id = (uint64_t)mesh_device;
|
|
273
|
+
|
|
274
|
+
// we compute mesh the average edge length
|
|
275
|
+
// for use in mesh_query_point_sign_normal()
|
|
276
|
+
// since it relies on an epsilon for welding
|
|
277
|
+
// reuse bounds memory temporarily for computing edge lengths
|
|
278
|
+
float* length_tmp_ptr = (float*)mesh.lowers;
|
|
279
|
+
wp_launch_device(WP_CURRENT_CONTEXT, wp::compute_mesh_edge_lengths, mesh.num_tris, (mesh.num_tris, mesh.points, mesh.indices, length_tmp_ptr));
|
|
280
|
+
scan_device(length_tmp_ptr, length_tmp_ptr, mesh.num_tris, true);
|
|
281
|
+
wp_launch_device(WP_CURRENT_CONTEXT, wp::compute_average_mesh_edge_length, 1, (mesh.num_tris, length_tmp_ptr, mesh_device));
|
|
282
|
+
|
|
283
|
+
// compute triangle bound and construct BVH
|
|
284
|
+
wp_launch_device(WP_CURRENT_CONTEXT, wp::compute_triangle_bounds, mesh.num_tris, (mesh.num_tris, mesh.points, mesh.indices, mesh.lowers, mesh.uppers));
|
|
285
|
+
wp::bvh_create_device(mesh.context, mesh.lowers, mesh.uppers, num_tris, constructor_type, mesh.bvh, bvh_leaf_size);
|
|
286
|
+
|
|
287
|
+
// we need to overwrite mesh.bvh because it is not initialized when we construct it on device
|
|
288
|
+
wp_memcpy_h2d(WP_CURRENT_CONTEXT, &(mesh_device->bvh), &mesh.bvh, sizeof(wp::BVH));
|
|
289
|
+
|
|
290
|
+
mesh_add_descriptor(mesh_id, mesh);
|
|
291
|
+
|
|
292
|
+
if (support_winding_number)
|
|
293
|
+
wp_mesh_refit_device(mesh_id);
|
|
294
|
+
|
|
295
|
+
return mesh_id;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
void wp_mesh_destroy_device(uint64_t id)
|
|
299
|
+
{
|
|
300
|
+
wp::Mesh mesh;
|
|
301
|
+
if (wp::mesh_get_descriptor(id, mesh))
|
|
302
|
+
{
|
|
303
|
+
ContextGuard guard(mesh.context);
|
|
304
|
+
|
|
305
|
+
wp::bvh_destroy_device(mesh.bvh);
|
|
306
|
+
|
|
307
|
+
wp_free_device(WP_CURRENT_CONTEXT, mesh.lowers);
|
|
308
|
+
wp_free_device(WP_CURRENT_CONTEXT, mesh.uppers);
|
|
309
|
+
wp_free_device(WP_CURRENT_CONTEXT, (wp::Mesh*)id);
|
|
310
|
+
|
|
311
|
+
if (mesh.solid_angle_props) {
|
|
312
|
+
wp_free_device(WP_CURRENT_CONTEXT, mesh.solid_angle_props);
|
|
313
|
+
}
|
|
314
|
+
wp::mesh_rem_descriptor(id);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
void mesh_update_stats(uint64_t id)
|
|
319
|
+
{
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
void wp_mesh_refit_device(uint64_t id)
|
|
324
|
+
{
|
|
325
|
+
// recompute triangle bounds
|
|
326
|
+
wp::Mesh m;
|
|
327
|
+
if (mesh_get_descriptor(id, m))
|
|
328
|
+
{
|
|
329
|
+
ContextGuard guard(m.context);
|
|
330
|
+
|
|
331
|
+
// we compute mesh the average edge length
|
|
332
|
+
// for use in mesh_query_point_sign_normal()
|
|
333
|
+
// since it relies on an epsilon for welding
|
|
334
|
+
|
|
335
|
+
// reuse bounds memory temporarily for computing edge lengths
|
|
336
|
+
float* length_tmp_ptr = (float*)m.lowers;
|
|
337
|
+
wp_launch_device(WP_CURRENT_CONTEXT, wp::compute_mesh_edge_lengths, m.num_tris, (m.num_tris, m.points, m.indices, length_tmp_ptr));
|
|
338
|
+
|
|
339
|
+
scan_device(length_tmp_ptr, length_tmp_ptr, m.num_tris, true);
|
|
340
|
+
|
|
341
|
+
wp_launch_device(WP_CURRENT_CONTEXT, wp::compute_average_mesh_edge_length, 1, (m.num_tris, length_tmp_ptr, (wp::Mesh*)id));
|
|
342
|
+
wp_launch_device(WP_CURRENT_CONTEXT, wp::compute_triangle_bounds, m.num_tris, (m.num_tris, m.points, m.indices, m.lowers, m.uppers));
|
|
343
|
+
|
|
344
|
+
if (m.solid_angle_props)
|
|
345
|
+
{
|
|
346
|
+
// update solid angle data
|
|
347
|
+
bvh_refit_with_solid_angle_device(m.bvh, m);
|
|
348
|
+
}
|
|
349
|
+
else
|
|
350
|
+
{
|
|
351
|
+
wp::bvh_refit_device(m.bvh);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
void wp_mesh_set_points_device(uint64_t id, wp::array_t<wp::vec3> points)
|
|
357
|
+
{
|
|
358
|
+
wp::Mesh m;
|
|
359
|
+
if (mesh_get_descriptor(id, m))
|
|
360
|
+
{
|
|
361
|
+
if (points.ndim != 1 || points.shape[0] != m.points.shape[0])
|
|
362
|
+
{
|
|
363
|
+
fprintf(stderr, "The new points input for wp_mesh_set_points_device does not match the shape of the original points!\n");
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
m.points = points;
|
|
368
|
+
|
|
369
|
+
wp::Mesh* mesh_device = (wp::Mesh*)id;
|
|
370
|
+
wp_memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &m, sizeof(wp::Mesh));
|
|
371
|
+
|
|
372
|
+
// update the cpu copy as well
|
|
373
|
+
mesh_set_descriptor(id, m);
|
|
374
|
+
|
|
375
|
+
wp_mesh_refit_device(id);
|
|
376
|
+
}
|
|
377
|
+
else
|
|
378
|
+
{
|
|
379
|
+
fprintf(stderr, "The mesh id provided to wp_mesh_set_points_device is not valid!\n");
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
void wp_mesh_set_velocities_device(uint64_t id, wp::array_t<wp::vec3> velocities)
|
|
385
|
+
{
|
|
386
|
+
wp::Mesh m;
|
|
387
|
+
if (mesh_get_descriptor(id, m))
|
|
388
|
+
{
|
|
389
|
+
if (velocities.ndim != 1 || velocities.shape[0] != m.velocities.shape[0])
|
|
390
|
+
{
|
|
391
|
+
fprintf(stderr, "The new velocities input for wp_mesh_set_velocities_device does not match the shape of the original velocities\n");
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
m.velocities = velocities;
|
|
396
|
+
|
|
397
|
+
wp::Mesh* mesh_device = (wp::Mesh*)id;
|
|
398
|
+
wp_memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &m, sizeof(wp::Mesh));
|
|
399
|
+
mesh_set_descriptor(id, m);
|
|
400
|
+
}
|
|
401
|
+
else
|
|
402
|
+
{
|
|
403
|
+
fprintf(stderr, "The mesh id provided to wp_mesh_set_velocities_device is not valid!\n");
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
}
|