warp-lang 1.8.1__py3-none-manylinux_2_34_aarch64.whl → 1.9.0__py3-none-manylinux_2_34_aarch64.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.

Files changed (134) hide show
  1. warp/__init__.py +282 -103
  2. warp/__init__.pyi +482 -110
  3. warp/bin/warp-clang.so +0 -0
  4. warp/bin/warp.so +0 -0
  5. warp/build.py +93 -30
  6. warp/build_dll.py +47 -67
  7. warp/builtins.py +955 -137
  8. warp/codegen.py +312 -206
  9. warp/config.py +1 -1
  10. warp/context.py +1249 -784
  11. warp/examples/core/example_marching_cubes.py +1 -0
  12. warp/examples/core/example_render_opengl.py +100 -3
  13. warp/examples/fem/example_apic_fluid.py +98 -52
  14. warp/examples/fem/example_convection_diffusion_dg.py +25 -4
  15. warp/examples/fem/example_diffusion_mgpu.py +8 -3
  16. warp/examples/fem/utils.py +68 -22
  17. warp/fabric.py +1 -1
  18. warp/fem/cache.py +27 -19
  19. warp/fem/domain.py +2 -2
  20. warp/fem/field/nodal_field.py +2 -2
  21. warp/fem/field/virtual.py +264 -166
  22. warp/fem/geometry/geometry.py +5 -5
  23. warp/fem/integrate.py +129 -51
  24. warp/fem/space/restriction.py +4 -0
  25. warp/fem/space/shape/tet_shape_function.py +3 -10
  26. warp/jax_experimental/custom_call.py +1 -1
  27. warp/jax_experimental/ffi.py +2 -1
  28. warp/marching_cubes.py +708 -0
  29. warp/native/array.h +99 -4
  30. warp/native/builtin.h +82 -5
  31. warp/native/bvh.cpp +64 -28
  32. warp/native/bvh.cu +58 -58
  33. warp/native/bvh.h +2 -2
  34. warp/native/clang/clang.cpp +7 -7
  35. warp/native/coloring.cpp +8 -2
  36. warp/native/crt.cpp +2 -2
  37. warp/native/crt.h +3 -5
  38. warp/native/cuda_util.cpp +41 -10
  39. warp/native/cuda_util.h +10 -4
  40. warp/native/exports.h +1842 -1908
  41. warp/native/fabric.h +2 -1
  42. warp/native/hashgrid.cpp +37 -37
  43. warp/native/hashgrid.cu +2 -2
  44. warp/native/initializer_array.h +1 -1
  45. warp/native/intersect.h +2 -2
  46. warp/native/mat.h +1910 -116
  47. warp/native/mathdx.cpp +43 -43
  48. warp/native/mesh.cpp +24 -24
  49. warp/native/mesh.cu +26 -26
  50. warp/native/mesh.h +4 -2
  51. warp/native/nanovdb/GridHandle.h +179 -12
  52. warp/native/nanovdb/HostBuffer.h +8 -7
  53. warp/native/nanovdb/NanoVDB.h +517 -895
  54. warp/native/nanovdb/NodeManager.h +323 -0
  55. warp/native/nanovdb/PNanoVDB.h +2 -2
  56. warp/native/quat.h +331 -14
  57. warp/native/range.h +7 -1
  58. warp/native/reduce.cpp +10 -10
  59. warp/native/reduce.cu +13 -14
  60. warp/native/runlength_encode.cpp +2 -2
  61. warp/native/runlength_encode.cu +5 -5
  62. warp/native/scan.cpp +3 -3
  63. warp/native/scan.cu +4 -4
  64. warp/native/sort.cpp +10 -10
  65. warp/native/sort.cu +22 -22
  66. warp/native/sparse.cpp +8 -8
  67. warp/native/sparse.cu +13 -13
  68. warp/native/spatial.h +366 -17
  69. warp/native/temp_buffer.h +2 -2
  70. warp/native/tile.h +283 -69
  71. warp/native/vec.h +381 -14
  72. warp/native/volume.cpp +54 -54
  73. warp/native/volume.cu +1 -1
  74. warp/native/volume.h +2 -1
  75. warp/native/volume_builder.cu +30 -37
  76. warp/native/warp.cpp +150 -149
  77. warp/native/warp.cu +323 -192
  78. warp/native/warp.h +227 -226
  79. warp/optim/linear.py +736 -271
  80. warp/render/imgui_manager.py +289 -0
  81. warp/render/render_opengl.py +85 -6
  82. warp/sim/graph_coloring.py +2 -2
  83. warp/sparse.py +558 -175
  84. warp/tests/aux_test_module_aot.py +7 -0
  85. warp/tests/cuda/test_async.py +3 -3
  86. warp/tests/cuda/test_conditional_captures.py +101 -0
  87. warp/tests/geometry/test_marching_cubes.py +233 -12
  88. warp/tests/sim/test_coloring.py +6 -6
  89. warp/tests/test_array.py +56 -5
  90. warp/tests/test_codegen.py +3 -2
  91. warp/tests/test_context.py +8 -15
  92. warp/tests/test_enum.py +136 -0
  93. warp/tests/test_examples.py +2 -2
  94. warp/tests/test_fem.py +45 -2
  95. warp/tests/test_fixedarray.py +229 -0
  96. warp/tests/test_func.py +18 -15
  97. warp/tests/test_future_annotations.py +7 -5
  98. warp/tests/test_linear_solvers.py +30 -0
  99. warp/tests/test_map.py +1 -1
  100. warp/tests/test_mat.py +1518 -378
  101. warp/tests/test_mat_assign_copy.py +178 -0
  102. warp/tests/test_mat_constructors.py +574 -0
  103. warp/tests/test_module_aot.py +287 -0
  104. warp/tests/test_print.py +69 -0
  105. warp/tests/test_quat.py +140 -34
  106. warp/tests/test_quat_assign_copy.py +145 -0
  107. warp/tests/test_reload.py +2 -1
  108. warp/tests/test_sparse.py +71 -0
  109. warp/tests/test_spatial.py +140 -34
  110. warp/tests/test_spatial_assign_copy.py +160 -0
  111. warp/tests/test_struct.py +43 -3
  112. warp/tests/test_types.py +0 -20
  113. warp/tests/test_vec.py +179 -34
  114. warp/tests/test_vec_assign_copy.py +143 -0
  115. warp/tests/tile/test_tile.py +184 -18
  116. warp/tests/tile/test_tile_cholesky.py +605 -0
  117. warp/tests/tile/test_tile_load.py +169 -0
  118. warp/tests/tile/test_tile_mathdx.py +2 -558
  119. warp/tests/tile/test_tile_matmul.py +1 -1
  120. warp/tests/tile/test_tile_mlp.py +1 -1
  121. warp/tests/tile/test_tile_shared_memory.py +5 -5
  122. warp/tests/unittest_suites.py +6 -0
  123. warp/tests/walkthrough_debug.py +1 -1
  124. warp/thirdparty/unittest_parallel.py +108 -9
  125. warp/types.py +554 -264
  126. warp/utils.py +68 -86
  127. {warp_lang-1.8.1.dist-info → warp_lang-1.9.0.dist-info}/METADATA +28 -65
  128. {warp_lang-1.8.1.dist-info → warp_lang-1.9.0.dist-info}/RECORD +131 -121
  129. warp/native/marching.cpp +0 -19
  130. warp/native/marching.cu +0 -514
  131. warp/native/marching.h +0 -19
  132. {warp_lang-1.8.1.dist-info → warp_lang-1.9.0.dist-info}/WHEEL +0 -0
  133. {warp_lang-1.8.1.dist-info → warp_lang-1.9.0.dist-info}/licenses/LICENSE.md +0 -0
  134. {warp_lang-1.8.1.dist-info → warp_lang-1.9.0.dist-info}/top_level.txt +0 -0
warp/native/mathdx.cpp CHANGED
@@ -24,48 +24,24 @@ extern "C"
24
24
  {
25
25
 
26
26
  WP_API
27
- bool cuda_compile_fft(
28
- const char* ltoir_output_path,
29
- const char* symbol_name,
30
- int num_include_dirs,
31
- const char** include_dirs,
32
- const char* mathdx_include_dir,
33
- int arch,
34
- int size,
35
- int elements_per_thread,
36
- int direction,
37
- int precision,
38
- int* shared_memory_size)
27
+ bool wp_cuda_compile_fft(
28
+ const char* ltoir_output_path,
29
+ const char* symbol_name,
30
+ int num_include_dirs,
31
+ const char** include_dirs,
32
+ const char* mathdx_include_dir,
33
+ int arch,
34
+ int size,
35
+ int elements_per_thread,
36
+ int direction,
37
+ int precision,
38
+ int* shared_memory_size)
39
39
  {
40
40
  printf("CUDA is disabled and/or Warp was not compiled with MathDx support.\n");
41
41
  return false;
42
42
  }
43
43
 
44
- WP_API bool cuda_compile_dot(
45
- const char* ltoir_output_path,
46
- const char* symbol_name,
47
- int num_include_dirs,
48
- const char** include_dirs,
49
- const char* mathdx_include_dir,
50
- int arch,
51
- int M,
52
- int N,
53
- int K,
54
- int precision_A,
55
- int precision_B,
56
- int precision_C,
57
- int type,
58
- int arrangement_A,
59
- int arrangement_B,
60
- int arrangement_C,
61
- int num_threads)
62
- {
63
- printf("CUDA is disabled and/or Warp was not compiled with MathDx support.\n");
64
- return false;
65
- }
66
-
67
- WP_API bool cuda_compile_solver(
68
- const char* fatbin_output_path,
44
+ WP_API bool wp_cuda_compile_dot(
69
45
  const char* ltoir_output_path,
70
46
  const char* symbol_name,
71
47
  int num_include_dirs,
@@ -74,20 +50,44 @@ WP_API bool cuda_compile_solver(
74
50
  int arch,
75
51
  int M,
76
52
  int N,
77
- int NRHS,
78
- int function,
79
- int side,
80
- int diag,
81
- int precision,
53
+ int K,
54
+ int precision_A,
55
+ int precision_B,
56
+ int precision_C,
57
+ int type,
82
58
  int arrangement_A,
83
59
  int arrangement_B,
84
- int fill_mode,
60
+ int arrangement_C,
85
61
  int num_threads)
86
62
  {
87
63
  printf("CUDA is disabled and/or Warp was not compiled with MathDx support.\n");
88
64
  return false;
89
65
  }
90
66
 
67
+ WP_API bool wp_cuda_compile_solver(
68
+ const char* fatbin_output_path,
69
+ const char* ltoir_output_path,
70
+ const char* symbol_name,
71
+ int num_include_dirs,
72
+ const char** include_dirs,
73
+ const char* mathdx_include_dir,
74
+ int arch,
75
+ int M,
76
+ int N,
77
+ int NRHS,
78
+ int function,
79
+ int side,
80
+ int diag,
81
+ int precision,
82
+ int arrangement_A,
83
+ int arrangement_B,
84
+ int fill_mode,
85
+ int num_threads)
86
+ {
87
+ printf("CUDA is disabled and/or Warp was not compiled with MathDx support.\n");
88
+ return false;
89
+ }
90
+
91
91
  } // extern "C"
92
92
 
93
93
  #endif // !WP_ENABLE_CUDA || !WP_ENABLE_MATHDX
warp/native/mesh.cpp CHANGED
@@ -96,8 +96,8 @@ void bvh_refit_with_solid_angle_recursive_host(BVH& bvh, int index, Mesh& mesh)
96
96
  }
97
97
  }
98
98
 
99
- (vec3&)lower = mesh.solid_angle_props[index].box.lower;
100
- (vec3&)upper = mesh.solid_angle_props[index].box.upper;
99
+ reinterpret_cast<vec3&>(lower) = mesh.solid_angle_props[index].box.lower;
100
+ reinterpret_cast<vec3&>(upper) = mesh.solid_angle_props[index].box.upper;
101
101
  }
102
102
  else
103
103
  {
@@ -114,19 +114,19 @@ void bvh_refit_with_solid_angle_recursive_host(BVH& bvh, int index, Mesh& mesh)
114
114
  combine_precomputed_solid_angle_props(mesh.solid_angle_props[index], left_child_data, right_child_data);
115
115
 
116
116
  // compute union of children
117
- const vec3& left_lower = (vec3&)bvh.node_lowers[left_index];
118
- const vec3& left_upper = (vec3&)bvh.node_uppers[left_index];
117
+ const vec3& left_lower = reinterpret_cast<const vec3&>(bvh.node_lowers[left_index]);
118
+ const vec3& left_upper = reinterpret_cast<const vec3&>(bvh.node_uppers[left_index]);
119
119
 
120
- const vec3& right_lower = (vec3&)bvh.node_lowers[right_index];
121
- const vec3& right_upper = (vec3&)bvh.node_uppers[right_index];
120
+ const vec3& right_lower = reinterpret_cast<const vec3&>(bvh.node_lowers[right_index]);
121
+ const vec3& right_upper = reinterpret_cast<const vec3&>(bvh.node_uppers[right_index]);
122
122
 
123
123
  // union of child bounds
124
124
  vec3 new_lower = min(left_lower, right_lower);
125
125
  vec3 new_upper = max(left_upper, right_upper);
126
126
 
127
127
  // write new BVH nodes
128
- (vec3&)lower = new_lower;
129
- (vec3&)upper = new_upper;
128
+ reinterpret_cast<vec3&>(lower) = new_lower;
129
+ reinterpret_cast<vec3&>(upper) = new_upper;
130
130
  }
131
131
  }
132
132
 
@@ -135,7 +135,7 @@ void bvh_refit_with_solid_angle_host(BVH& bvh, Mesh& mesh)
135
135
  bvh_refit_with_solid_angle_recursive_host(bvh, 0, mesh);
136
136
  }
137
137
 
138
- uint64_t mesh_create_host(array_t<wp::vec3> points, array_t<wp::vec3> velocities, array_t<int> indices, int num_points, int num_tris, int support_winding_number, int constructor_type)
138
+ uint64_t wp_mesh_create_host(array_t<wp::vec3> points, array_t<wp::vec3> velocities, array_t<int> indices, int num_points, int num_tris, int support_winding_number, int constructor_type)
139
139
  {
140
140
  Mesh* m = new Mesh(points, velocities, indices, num_points, num_tris);
141
141
 
@@ -177,7 +177,7 @@ uint64_t mesh_create_host(array_t<wp::vec3> points, array_t<wp::vec3> velocities
177
177
  }
178
178
 
179
179
 
180
- void mesh_destroy_host(uint64_t id)
180
+ void wp_mesh_destroy_host(uint64_t id)
181
181
  {
182
182
  Mesh* m = (Mesh*)(id);
183
183
 
@@ -187,12 +187,12 @@ void mesh_destroy_host(uint64_t id)
187
187
  if (m->solid_angle_props) {
188
188
  delete [] m->solid_angle_props;
189
189
  }
190
- bvh_destroy_host(m->bvh);
190
+ wp::bvh_destroy_host(m->bvh);
191
191
 
192
192
  delete m;
193
193
  }
194
194
 
195
- void mesh_refit_host(uint64_t id)
195
+ void wp_mesh_refit_host(uint64_t id)
196
196
  {
197
197
  Mesh* m = (Mesh*)(id);
198
198
 
@@ -223,30 +223,30 @@ void mesh_refit_host(uint64_t id)
223
223
  }
224
224
  else
225
225
  {
226
- bvh_refit_host(m->bvh);
226
+ wp::bvh_refit_host(m->bvh);
227
227
  }
228
228
  }
229
229
 
230
- void mesh_set_points_host(uint64_t id, wp::array_t<wp::vec3> points)
230
+ void wp_mesh_set_points_host(uint64_t id, wp::array_t<wp::vec3> points)
231
231
  {
232
232
  Mesh* m = (Mesh*)(id);
233
233
  if (points.ndim != 1 || points.shape[0] != m->points.shape[0])
234
234
  {
235
- fprintf(stderr, "The new points input for mesh_set_points_host does not match the shape of the original points!\n");
235
+ fprintf(stderr, "The new points input for wp_mesh_set_points_host does not match the shape of the original points!\n");
236
236
  return;
237
237
  }
238
238
 
239
239
  m->points = points;
240
240
 
241
- mesh_refit_host(id);
241
+ wp_mesh_refit_host(id);
242
242
  }
243
243
 
244
- void mesh_set_velocities_host(uint64_t id, wp::array_t<wp::vec3> velocities)
244
+ void wp_mesh_set_velocities_host(uint64_t id, wp::array_t<wp::vec3> velocities)
245
245
  {
246
246
  Mesh* m = (Mesh*)(id);
247
247
  if (velocities.ndim != 1 || velocities.shape[0] != m->velocities.shape[0])
248
248
  {
249
- fprintf(stderr, "The new velocities input for mesh_set_velocities_host does not match the shape of the original velocities!\n");
249
+ fprintf(stderr, "The new velocities input for wp_mesh_set_velocities_host does not match the shape of the original velocities!\n");
250
250
  return;
251
251
  }
252
252
  m->velocities = velocities;
@@ -256,11 +256,11 @@ void mesh_set_velocities_host(uint64_t id, wp::array_t<wp::vec3> velocities)
256
256
  #if !WP_ENABLE_CUDA
257
257
 
258
258
 
259
- WP_API uint64_t mesh_create_device(void* context, wp::array_t<wp::vec3> points, wp::array_t<wp::vec3> velocities, wp::array_t<int> tris, int num_points, int num_tris, int support_winding_number, int constructor_type) { return 0; }
260
- WP_API void mesh_destroy_device(uint64_t id) {}
261
- WP_API void mesh_refit_device(uint64_t id) {}
262
- WP_API void mesh_set_points_device(uint64_t id, wp::array_t<wp::vec3> points) {};
263
- WP_API void mesh_set_velocities_device(uint64_t id, wp::array_t<wp::vec3> points) {};
259
+ WP_API uint64_t wp_mesh_create_device(void* context, wp::array_t<wp::vec3> points, wp::array_t<wp::vec3> velocities, wp::array_t<int> tris, int num_points, int num_tris, int support_winding_number, int constructor_type) { return 0; }
260
+ WP_API void wp_mesh_destroy_device(uint64_t id) {}
261
+ WP_API void wp_mesh_refit_device(uint64_t id) {}
262
+ WP_API void wp_mesh_set_points_device(uint64_t id, wp::array_t<wp::vec3> points) {};
263
+ WP_API void wp_mesh_set_velocities_device(uint64_t id, wp::array_t<wp::vec3> points) {};
264
264
 
265
265
 
266
- #endif // !WP_ENABLE_CUDA
266
+ #endif // !WP_ENABLE_CUDA
warp/native/mesh.cu CHANGED
@@ -237,7 +237,7 @@ void bvh_refit_with_solid_angle_device(BVH& bvh, Mesh& mesh)
237
237
  ContextGuard guard(bvh.context);
238
238
 
239
239
  // clear child counters
240
- memset_device(WP_CURRENT_CONTEXT, bvh.node_counts, 0, sizeof(int) * bvh.max_nodes);
240
+ wp_memset_device(WP_CURRENT_CONTEXT, bvh.node_counts, 0, sizeof(int) * bvh.max_nodes);
241
241
  wp_launch_device(WP_CURRENT_CONTEXT, bvh_refit_with_solid_angle_kernel, bvh.num_leaf_nodes,
242
242
  (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));
243
243
  }
@@ -245,26 +245,26 @@ void bvh_refit_with_solid_angle_device(BVH& bvh, Mesh& mesh)
245
245
  } // namespace wp
246
246
 
247
247
 
248
- uint64_t 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)
248
+ 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)
249
249
  {
250
250
  ContextGuard guard(context);
251
251
 
252
252
  wp::Mesh mesh(points, velocities, indices, num_points, num_tris);
253
253
 
254
- mesh.context = context ? context : cuda_context_get_current();
254
+ mesh.context = context ? context : wp_cuda_context_get_current();
255
255
 
256
256
  // create lower upper arrays expected by GPU BVH builder
257
- mesh.lowers = (wp::vec3*)alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::vec3)*num_tris);
258
- mesh.uppers = (wp::vec3*)alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::vec3)*num_tris);
257
+ mesh.lowers = (wp::vec3*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::vec3)*num_tris);
258
+ mesh.uppers = (wp::vec3*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::vec3)*num_tris);
259
259
 
260
260
  if (support_winding_number)
261
261
  {
262
262
  int num_bvh_nodes = 2 * num_tris;
263
- mesh.solid_angle_props = (wp::SolidAngleProps*)alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::SolidAngleProps) * num_bvh_nodes);
263
+ mesh.solid_angle_props = (wp::SolidAngleProps*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::SolidAngleProps) * num_bvh_nodes);
264
264
  }
265
265
 
266
- wp::Mesh* mesh_device = (wp::Mesh*)alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::Mesh));
267
- memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &mesh, sizeof(wp::Mesh));
266
+ wp::Mesh* mesh_device = (wp::Mesh*)wp_alloc_device(WP_CURRENT_CONTEXT, sizeof(wp::Mesh));
267
+ wp_memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &mesh, sizeof(wp::Mesh));
268
268
 
269
269
  // save descriptor
270
270
  uint64_t mesh_id = (uint64_t)mesh_device;
@@ -283,17 +283,17 @@ uint64_t mesh_create_device(void* context, wp::array_t<wp::vec3> points, wp::arr
283
283
  wp::bvh_create_device(mesh.context, mesh.lowers, mesh.uppers, num_tris, constructor_type, mesh.bvh);
284
284
 
285
285
  // we need to overwrite mesh.bvh because it is not initialized when we construct it on device
286
- memcpy_h2d(WP_CURRENT_CONTEXT, &(mesh_device->bvh), &mesh.bvh, sizeof(wp::BVH));
286
+ wp_memcpy_h2d(WP_CURRENT_CONTEXT, &(mesh_device->bvh), &mesh.bvh, sizeof(wp::BVH));
287
287
 
288
288
  mesh_add_descriptor(mesh_id, mesh);
289
289
 
290
290
  if (support_winding_number)
291
- mesh_refit_device(mesh_id);
291
+ wp_mesh_refit_device(mesh_id);
292
292
 
293
293
  return mesh_id;
294
294
  }
295
295
 
296
- void mesh_destroy_device(uint64_t id)
296
+ void wp_mesh_destroy_device(uint64_t id)
297
297
  {
298
298
  wp::Mesh mesh;
299
299
  if (wp::mesh_get_descriptor(id, mesh))
@@ -302,12 +302,12 @@ void mesh_destroy_device(uint64_t id)
302
302
 
303
303
  wp::bvh_destroy_device(mesh.bvh);
304
304
 
305
- free_device(WP_CURRENT_CONTEXT, mesh.lowers);
306
- free_device(WP_CURRENT_CONTEXT, mesh.uppers);
307
- free_device(WP_CURRENT_CONTEXT, (wp::Mesh*)id);
305
+ wp_free_device(WP_CURRENT_CONTEXT, mesh.lowers);
306
+ wp_free_device(WP_CURRENT_CONTEXT, mesh.uppers);
307
+ wp_free_device(WP_CURRENT_CONTEXT, (wp::Mesh*)id);
308
308
 
309
309
  if (mesh.solid_angle_props) {
310
- free_device(WP_CURRENT_CONTEXT, mesh.solid_angle_props);
310
+ wp_free_device(WP_CURRENT_CONTEXT, mesh.solid_angle_props);
311
311
  }
312
312
  wp::mesh_rem_descriptor(id);
313
313
  }
@@ -318,7 +318,7 @@ void mesh_update_stats(uint64_t id)
318
318
 
319
319
  }
320
320
 
321
- void mesh_refit_device(uint64_t id)
321
+ void wp_mesh_refit_device(uint64_t id)
322
322
  {
323
323
  // recompute triangle bounds
324
324
  wp::Mesh m;
@@ -346,59 +346,59 @@ void mesh_refit_device(uint64_t id)
346
346
  }
347
347
  else
348
348
  {
349
- bvh_refit_device(m.bvh);
349
+ wp::bvh_refit_device(m.bvh);
350
350
  }
351
351
  }
352
352
  }
353
353
 
354
- void mesh_set_points_device(uint64_t id, wp::array_t<wp::vec3> points)
354
+ void wp_mesh_set_points_device(uint64_t id, wp::array_t<wp::vec3> points)
355
355
  {
356
356
  wp::Mesh m;
357
357
  if (mesh_get_descriptor(id, m))
358
358
  {
359
359
  if (points.ndim != 1 || points.shape[0] != m.points.shape[0])
360
360
  {
361
- fprintf(stderr, "The new points input for mesh_set_points_device does not match the shape of the original points!\n");
361
+ fprintf(stderr, "The new points input for wp_mesh_set_points_device does not match the shape of the original points!\n");
362
362
  return;
363
363
  }
364
364
 
365
365
  m.points = points;
366
366
 
367
367
  wp::Mesh* mesh_device = (wp::Mesh*)id;
368
- memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &m, sizeof(wp::Mesh));
368
+ wp_memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &m, sizeof(wp::Mesh));
369
369
 
370
370
  // update the cpu copy as well
371
371
  mesh_set_descriptor(id, m);
372
372
 
373
- mesh_refit_device(id);
373
+ wp_mesh_refit_device(id);
374
374
  }
375
375
  else
376
376
  {
377
- fprintf(stderr, "The mesh id provided to mesh_set_points_device is not valid!\n");
377
+ fprintf(stderr, "The mesh id provided to wp_mesh_set_points_device is not valid!\n");
378
378
  return;
379
379
  }
380
380
  }
381
381
 
382
- void mesh_set_velocities_device(uint64_t id, wp::array_t<wp::vec3> velocities)
382
+ void wp_mesh_set_velocities_device(uint64_t id, wp::array_t<wp::vec3> velocities)
383
383
  {
384
384
  wp::Mesh m;
385
385
  if (mesh_get_descriptor(id, m))
386
386
  {
387
387
  if (velocities.ndim != 1 || velocities.shape[0] != m.velocities.shape[0])
388
388
  {
389
- fprintf(stderr, "The new velocities input for mesh_set_velocities_device does not match the shape of the original velocities\n");
389
+ fprintf(stderr, "The new velocities input for wp_mesh_set_velocities_device does not match the shape of the original velocities\n");
390
390
  return;
391
391
  }
392
392
 
393
393
  m.velocities = velocities;
394
394
 
395
395
  wp::Mesh* mesh_device = (wp::Mesh*)id;
396
- memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &m, sizeof(wp::Mesh));
396
+ wp_memcpy_h2d(WP_CURRENT_CONTEXT, mesh_device, &m, sizeof(wp::Mesh));
397
397
  mesh_set_descriptor(id, m);
398
398
  }
399
399
  else
400
400
  {
401
- fprintf(stderr, "The mesh id provided to mesh_set_velocities_device is not valid!\n");
401
+ fprintf(stderr, "The mesh id provided to wp_mesh_set_velocities_device is not valid!\n");
402
402
  return;
403
403
  }
404
404
  }
warp/native/mesh.h CHANGED
@@ -58,6 +58,7 @@ struct Mesh
58
58
  context = nullptr;
59
59
  solid_angle_props = nullptr;
60
60
  average_edge_length = 0.0f;
61
+ bvh = BVH{};
61
62
  }
62
63
 
63
64
  inline CUDA_CALLABLE Mesh(
@@ -73,6 +74,7 @@ struct Mesh
73
74
  uppers = nullptr;
74
75
  solid_angle_props = nullptr;
75
76
  average_edge_length = 0.0f;
77
+ bvh = BVH{};
76
78
  }
77
79
  };
78
80
 
@@ -1630,7 +1632,7 @@ CUDA_CALLABLE inline mesh_query_aabb_t mesh_query_aabb(
1630
1632
  BVHPackedNodeHalf node_lower = bvh_load_node(mesh.bvh.node_lowers, nodeIndex);
1631
1633
  BVHPackedNodeHalf node_upper = bvh_load_node(mesh.bvh.node_uppers, nodeIndex);
1632
1634
 
1633
- if (!input_bounds.overlaps((vec3&)node_lower, (vec3&)node_upper))
1635
+ if (!input_bounds.overlaps(reinterpret_cast<vec3&>(node_lower), reinterpret_cast<vec3&>(node_upper)))
1634
1636
  {
1635
1637
  // Skip this box, it doesn't overlap with our target box.
1636
1638
  continue;
@@ -1715,7 +1717,7 @@ CUDA_CALLABLE inline bool mesh_query_aabb_next(mesh_query_aabb_t& query, int& in
1715
1717
  BVHPackedNodeHalf node_lower = bvh_load_node(mesh.bvh.node_lowers, node_index);
1716
1718
  BVHPackedNodeHalf node_upper = bvh_load_node(mesh.bvh.node_uppers, node_index);
1717
1719
 
1718
- if (!input_bounds.overlaps((vec3&)node_lower, (vec3&)node_upper))
1720
+ if (!input_bounds.overlaps(reinterpret_cast<vec3&>(node_lower), reinterpret_cast<vec3&>(node_upper)))
1719
1721
  {
1720
1722
  // Skip this box, it doesn't overlap with our target box.
1721
1723
  continue;