warp-lang 1.9.1__py3-none-win_amd64.whl → 1.10.0rc2__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of warp-lang might be problematic. Click here for more details.

Files changed (346) hide show
  1. warp/__init__.py +301 -287
  2. warp/__init__.pyi +794 -305
  3. warp/_src/__init__.py +14 -0
  4. warp/_src/autograd.py +1075 -0
  5. warp/_src/build.py +618 -0
  6. warp/_src/build_dll.py +640 -0
  7. warp/{builtins.py → _src/builtins.py} +1382 -377
  8. warp/_src/codegen.py +4359 -0
  9. warp/{config.py → _src/config.py} +178 -169
  10. warp/_src/constants.py +57 -0
  11. warp/_src/context.py +8294 -0
  12. warp/_src/dlpack.py +462 -0
  13. warp/_src/fabric.py +355 -0
  14. warp/_src/fem/__init__.py +14 -0
  15. warp/_src/fem/adaptivity.py +508 -0
  16. warp/_src/fem/cache.py +687 -0
  17. warp/_src/fem/dirichlet.py +188 -0
  18. warp/{fem → _src/fem}/domain.py +40 -30
  19. warp/_src/fem/field/__init__.py +131 -0
  20. warp/_src/fem/field/field.py +701 -0
  21. warp/{fem → _src/fem}/field/nodal_field.py +30 -15
  22. warp/{fem → _src/fem}/field/restriction.py +1 -1
  23. warp/{fem → _src/fem}/field/virtual.py +53 -27
  24. warp/_src/fem/geometry/__init__.py +32 -0
  25. warp/{fem → _src/fem}/geometry/adaptive_nanogrid.py +77 -163
  26. warp/_src/fem/geometry/closest_point.py +97 -0
  27. warp/{fem → _src/fem}/geometry/deformed_geometry.py +14 -22
  28. warp/{fem → _src/fem}/geometry/element.py +32 -10
  29. warp/{fem → _src/fem}/geometry/geometry.py +48 -20
  30. warp/{fem → _src/fem}/geometry/grid_2d.py +12 -23
  31. warp/{fem → _src/fem}/geometry/grid_3d.py +12 -23
  32. warp/{fem → _src/fem}/geometry/hexmesh.py +40 -63
  33. warp/{fem → _src/fem}/geometry/nanogrid.py +255 -248
  34. warp/{fem → _src/fem}/geometry/partition.py +121 -63
  35. warp/{fem → _src/fem}/geometry/quadmesh.py +26 -45
  36. warp/{fem → _src/fem}/geometry/tetmesh.py +40 -63
  37. warp/{fem → _src/fem}/geometry/trimesh.py +26 -45
  38. warp/{fem → _src/fem}/integrate.py +164 -158
  39. warp/_src/fem/linalg.py +383 -0
  40. warp/_src/fem/operator.py +396 -0
  41. warp/_src/fem/polynomial.py +229 -0
  42. warp/{fem → _src/fem}/quadrature/pic_quadrature.py +15 -20
  43. warp/{fem → _src/fem}/quadrature/quadrature.py +95 -47
  44. warp/_src/fem/space/__init__.py +248 -0
  45. warp/{fem → _src/fem}/space/basis_function_space.py +20 -11
  46. warp/_src/fem/space/basis_space.py +679 -0
  47. warp/{fem → _src/fem}/space/dof_mapper.py +3 -3
  48. warp/{fem → _src/fem}/space/function_space.py +14 -13
  49. warp/{fem → _src/fem}/space/grid_2d_function_space.py +4 -7
  50. warp/{fem → _src/fem}/space/grid_3d_function_space.py +4 -4
  51. warp/{fem → _src/fem}/space/hexmesh_function_space.py +4 -10
  52. warp/{fem → _src/fem}/space/nanogrid_function_space.py +3 -9
  53. warp/{fem → _src/fem}/space/partition.py +117 -60
  54. warp/{fem → _src/fem}/space/quadmesh_function_space.py +4 -10
  55. warp/{fem → _src/fem}/space/restriction.py +66 -33
  56. warp/_src/fem/space/shape/__init__.py +152 -0
  57. warp/{fem → _src/fem}/space/shape/cube_shape_function.py +9 -9
  58. warp/{fem → _src/fem}/space/shape/shape_function.py +8 -9
  59. warp/{fem → _src/fem}/space/shape/square_shape_function.py +6 -6
  60. warp/{fem → _src/fem}/space/shape/tet_shape_function.py +3 -3
  61. warp/{fem → _src/fem}/space/shape/triangle_shape_function.py +3 -3
  62. warp/{fem → _src/fem}/space/tetmesh_function_space.py +3 -9
  63. warp/_src/fem/space/topology.py +459 -0
  64. warp/{fem → _src/fem}/space/trimesh_function_space.py +3 -9
  65. warp/_src/fem/types.py +112 -0
  66. warp/_src/fem/utils.py +486 -0
  67. warp/_src/jax.py +186 -0
  68. warp/_src/jax_experimental/__init__.py +14 -0
  69. warp/_src/jax_experimental/custom_call.py +387 -0
  70. warp/_src/jax_experimental/ffi.py +1284 -0
  71. warp/_src/jax_experimental/xla_ffi.py +656 -0
  72. warp/_src/marching_cubes.py +708 -0
  73. warp/_src/math.py +414 -0
  74. warp/_src/optim/__init__.py +14 -0
  75. warp/_src/optim/adam.py +163 -0
  76. warp/_src/optim/linear.py +1606 -0
  77. warp/_src/optim/sgd.py +112 -0
  78. warp/_src/paddle.py +406 -0
  79. warp/_src/render/__init__.py +14 -0
  80. warp/_src/render/imgui_manager.py +289 -0
  81. warp/_src/render/render_opengl.py +3636 -0
  82. warp/_src/render/render_usd.py +937 -0
  83. warp/_src/render/utils.py +160 -0
  84. warp/_src/sparse.py +2716 -0
  85. warp/_src/tape.py +1206 -0
  86. warp/{thirdparty → _src/thirdparty}/unittest_parallel.py +9 -2
  87. warp/_src/torch.py +391 -0
  88. warp/_src/types.py +5870 -0
  89. warp/_src/utils.py +1693 -0
  90. warp/autograd.py +12 -1054
  91. warp/bin/warp-clang.dll +0 -0
  92. warp/bin/warp.dll +0 -0
  93. warp/build.py +8 -588
  94. warp/build_dll.py +6 -721
  95. warp/codegen.py +6 -4251
  96. warp/constants.py +6 -39
  97. warp/context.py +12 -8062
  98. warp/dlpack.py +6 -444
  99. warp/examples/distributed/example_jacobi_mpi.py +4 -5
  100. warp/examples/fem/example_adaptive_grid.py +1 -1
  101. warp/examples/fem/example_apic_fluid.py +1 -1
  102. warp/examples/fem/example_burgers.py +8 -8
  103. warp/examples/fem/example_diffusion.py +1 -1
  104. warp/examples/fem/example_distortion_energy.py +1 -1
  105. warp/examples/fem/example_mixed_elasticity.py +2 -2
  106. warp/examples/fem/example_navier_stokes.py +1 -1
  107. warp/examples/fem/example_nonconforming_contact.py +7 -7
  108. warp/examples/fem/example_stokes.py +1 -1
  109. warp/examples/fem/example_stokes_transfer.py +1 -1
  110. warp/examples/fem/utils.py +2 -2
  111. warp/examples/interop/example_jax_callable.py +1 -1
  112. warp/examples/interop/example_jax_ffi_callback.py +1 -1
  113. warp/examples/interop/example_jax_kernel.py +1 -1
  114. warp/examples/tile/example_tile_mcgp.py +191 -0
  115. warp/fabric.py +6 -337
  116. warp/fem/__init__.py +159 -97
  117. warp/fem/adaptivity.py +7 -489
  118. warp/fem/cache.py +9 -648
  119. warp/fem/dirichlet.py +6 -184
  120. warp/fem/field/__init__.py +8 -109
  121. warp/fem/field/field.py +7 -652
  122. warp/fem/geometry/__init__.py +7 -18
  123. warp/fem/geometry/closest_point.py +11 -77
  124. warp/fem/linalg.py +18 -366
  125. warp/fem/operator.py +11 -369
  126. warp/fem/polynomial.py +9 -209
  127. warp/fem/space/__init__.py +5 -211
  128. warp/fem/space/basis_space.py +6 -662
  129. warp/fem/space/shape/__init__.py +41 -118
  130. warp/fem/space/topology.py +6 -437
  131. warp/fem/types.py +6 -81
  132. warp/fem/utils.py +11 -444
  133. warp/jax.py +8 -165
  134. warp/jax_experimental/__init__.py +14 -1
  135. warp/jax_experimental/custom_call.py +8 -365
  136. warp/jax_experimental/ffi.py +17 -873
  137. warp/jax_experimental/xla_ffi.py +5 -605
  138. warp/marching_cubes.py +5 -689
  139. warp/math.py +16 -393
  140. warp/native/array.h +385 -37
  141. warp/native/builtin.h +314 -37
  142. warp/native/bvh.cpp +43 -9
  143. warp/native/bvh.cu +62 -27
  144. warp/native/bvh.h +310 -309
  145. warp/native/clang/clang.cpp +102 -97
  146. warp/native/coloring.cpp +0 -1
  147. warp/native/crt.h +208 -0
  148. warp/native/exports.h +156 -0
  149. warp/native/hashgrid.cu +2 -0
  150. warp/native/intersect.h +24 -1
  151. warp/native/intersect_tri.h +44 -35
  152. warp/native/mat.h +1456 -276
  153. warp/native/mesh.cpp +4 -4
  154. warp/native/mesh.cu +4 -2
  155. warp/native/mesh.h +176 -61
  156. warp/native/quat.h +0 -52
  157. warp/native/scan.cu +2 -0
  158. warp/native/sparse.cu +7 -3
  159. warp/native/spatial.h +12 -0
  160. warp/native/tile.h +681 -89
  161. warp/native/tile_radix_sort.h +1 -1
  162. warp/native/tile_reduce.h +394 -46
  163. warp/native/tile_scan.h +4 -4
  164. warp/native/vec.h +469 -0
  165. warp/native/version.h +23 -0
  166. warp/native/volume.cpp +1 -1
  167. warp/native/volume.cu +1 -0
  168. warp/native/volume.h +1 -1
  169. warp/native/volume_builder.cu +2 -0
  170. warp/native/warp.cpp +57 -29
  171. warp/native/warp.cu +253 -171
  172. warp/native/warp.h +11 -8
  173. warp/optim/__init__.py +6 -3
  174. warp/optim/adam.py +6 -145
  175. warp/optim/linear.py +14 -1585
  176. warp/optim/sgd.py +6 -94
  177. warp/paddle.py +6 -388
  178. warp/render/__init__.py +8 -4
  179. warp/render/imgui_manager.py +7 -267
  180. warp/render/render_opengl.py +6 -3618
  181. warp/render/render_usd.py +6 -919
  182. warp/render/utils.py +6 -142
  183. warp/sparse.py +37 -2563
  184. warp/tape.py +6 -1188
  185. warp/tests/__main__.py +1 -1
  186. warp/tests/cuda/test_async.py +4 -4
  187. warp/tests/cuda/test_conditional_captures.py +1 -1
  188. warp/tests/cuda/test_multigpu.py +1 -1
  189. warp/tests/cuda/test_streams.py +58 -1
  190. warp/tests/geometry/test_bvh.py +157 -22
  191. warp/tests/geometry/test_marching_cubes.py +0 -1
  192. warp/tests/geometry/test_mesh.py +5 -3
  193. warp/tests/geometry/test_mesh_query_aabb.py +5 -12
  194. warp/tests/geometry/test_mesh_query_point.py +5 -2
  195. warp/tests/geometry/test_mesh_query_ray.py +15 -3
  196. warp/tests/geometry/test_volume_write.py +5 -5
  197. warp/tests/interop/test_dlpack.py +14 -14
  198. warp/tests/interop/test_jax.py +772 -49
  199. warp/tests/interop/test_paddle.py +1 -1
  200. warp/tests/test_adam.py +0 -1
  201. warp/tests/test_arithmetic.py +9 -9
  202. warp/tests/test_array.py +527 -100
  203. warp/tests/test_array_reduce.py +3 -3
  204. warp/tests/test_atomic.py +12 -8
  205. warp/tests/test_atomic_bitwise.py +209 -0
  206. warp/tests/test_atomic_cas.py +4 -4
  207. warp/tests/test_bool.py +2 -2
  208. warp/tests/test_builtins_resolution.py +5 -571
  209. warp/tests/test_codegen.py +33 -14
  210. warp/tests/test_conditional.py +1 -1
  211. warp/tests/test_context.py +6 -6
  212. warp/tests/test_copy.py +242 -161
  213. warp/tests/test_ctypes.py +3 -3
  214. warp/tests/test_devices.py +24 -2
  215. warp/tests/test_examples.py +16 -84
  216. warp/tests/test_fabricarray.py +35 -35
  217. warp/tests/test_fast_math.py +0 -2
  218. warp/tests/test_fem.py +56 -10
  219. warp/tests/test_fixedarray.py +3 -3
  220. warp/tests/test_func.py +8 -5
  221. warp/tests/test_generics.py +1 -1
  222. warp/tests/test_indexedarray.py +24 -24
  223. warp/tests/test_intersect.py +39 -9
  224. warp/tests/test_large.py +1 -1
  225. warp/tests/test_lerp.py +3 -1
  226. warp/tests/test_linear_solvers.py +1 -1
  227. warp/tests/test_map.py +35 -4
  228. warp/tests/test_mat.py +52 -62
  229. warp/tests/test_mat_constructors.py +4 -5
  230. warp/tests/test_mat_lite.py +1 -1
  231. warp/tests/test_mat_scalar_ops.py +121 -121
  232. warp/tests/test_math.py +34 -0
  233. warp/tests/test_module_aot.py +4 -4
  234. warp/tests/test_modules_lite.py +28 -2
  235. warp/tests/test_print.py +11 -11
  236. warp/tests/test_quat.py +93 -58
  237. warp/tests/test_runlength_encode.py +1 -1
  238. warp/tests/test_scalar_ops.py +38 -10
  239. warp/tests/test_smoothstep.py +1 -1
  240. warp/tests/test_sparse.py +126 -15
  241. warp/tests/test_spatial.py +105 -87
  242. warp/tests/test_special_values.py +6 -6
  243. warp/tests/test_static.py +7 -7
  244. warp/tests/test_struct.py +13 -2
  245. warp/tests/test_triangle_closest_point.py +48 -1
  246. warp/tests/test_types.py +27 -15
  247. warp/tests/test_utils.py +52 -52
  248. warp/tests/test_vec.py +29 -29
  249. warp/tests/test_vec_constructors.py +5 -5
  250. warp/tests/test_vec_scalar_ops.py +97 -97
  251. warp/tests/test_version.py +75 -0
  252. warp/tests/tile/test_tile.py +178 -0
  253. warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
  254. warp/tests/tile/test_tile_cholesky.py +7 -4
  255. warp/tests/tile/test_tile_load.py +26 -2
  256. warp/tests/tile/test_tile_mathdx.py +3 -3
  257. warp/tests/tile/test_tile_matmul.py +1 -1
  258. warp/tests/tile/test_tile_mlp.py +2 -4
  259. warp/tests/tile/test_tile_reduce.py +214 -13
  260. warp/tests/unittest_suites.py +6 -14
  261. warp/tests/unittest_utils.py +10 -9
  262. warp/tests/walkthrough_debug.py +3 -1
  263. warp/torch.py +6 -373
  264. warp/types.py +29 -5764
  265. warp/utils.py +10 -1659
  266. {warp_lang-1.9.1.dist-info → warp_lang-1.10.0rc2.dist-info}/METADATA +46 -99
  267. warp_lang-1.10.0rc2.dist-info/RECORD +468 -0
  268. warp_lang-1.10.0rc2.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
  269. warp_lang-1.10.0rc2.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
  270. warp_lang-1.10.0rc2.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
  271. warp_lang-1.10.0rc2.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
  272. warp_lang-1.10.0rc2.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
  273. warp_lang-1.10.0rc2.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
  274. warp_lang-1.10.0rc2.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
  275. warp_lang-1.10.0rc2.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
  276. warp_lang-1.10.0rc2.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
  277. warp_lang-1.10.0rc2.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
  278. warp_lang-1.10.0rc2.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
  279. warp_lang-1.10.0rc2.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
  280. warp_lang-1.10.0rc2.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
  281. warp_lang-1.10.0rc2.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
  282. warp_lang-1.10.0rc2.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
  283. warp/examples/assets/cartpole.urdf +0 -110
  284. warp/examples/assets/crazyflie.usd +0 -0
  285. warp/examples/assets/nv_ant.xml +0 -92
  286. warp/examples/assets/nv_humanoid.xml +0 -183
  287. warp/examples/assets/quadruped.urdf +0 -268
  288. warp/examples/optim/example_bounce.py +0 -266
  289. warp/examples/optim/example_cloth_throw.py +0 -228
  290. warp/examples/optim/example_drone.py +0 -870
  291. warp/examples/optim/example_inverse_kinematics.py +0 -182
  292. warp/examples/optim/example_inverse_kinematics_torch.py +0 -191
  293. warp/examples/optim/example_softbody_properties.py +0 -400
  294. warp/examples/optim/example_spring_cage.py +0 -245
  295. warp/examples/optim/example_trajectory.py +0 -227
  296. warp/examples/sim/example_cartpole.py +0 -143
  297. warp/examples/sim/example_cloth.py +0 -225
  298. warp/examples/sim/example_cloth_self_contact.py +0 -316
  299. warp/examples/sim/example_granular.py +0 -130
  300. warp/examples/sim/example_granular_collision_sdf.py +0 -202
  301. warp/examples/sim/example_jacobian_ik.py +0 -244
  302. warp/examples/sim/example_particle_chain.py +0 -124
  303. warp/examples/sim/example_quadruped.py +0 -203
  304. warp/examples/sim/example_rigid_chain.py +0 -203
  305. warp/examples/sim/example_rigid_contact.py +0 -195
  306. warp/examples/sim/example_rigid_force.py +0 -133
  307. warp/examples/sim/example_rigid_gyroscopic.py +0 -115
  308. warp/examples/sim/example_rigid_soft_contact.py +0 -140
  309. warp/examples/sim/example_soft_body.py +0 -196
  310. warp/examples/tile/example_tile_walker.py +0 -327
  311. warp/sim/__init__.py +0 -74
  312. warp/sim/articulation.py +0 -793
  313. warp/sim/collide.py +0 -2570
  314. warp/sim/graph_coloring.py +0 -307
  315. warp/sim/import_mjcf.py +0 -791
  316. warp/sim/import_snu.py +0 -227
  317. warp/sim/import_urdf.py +0 -579
  318. warp/sim/import_usd.py +0 -898
  319. warp/sim/inertia.py +0 -357
  320. warp/sim/integrator.py +0 -245
  321. warp/sim/integrator_euler.py +0 -2000
  322. warp/sim/integrator_featherstone.py +0 -2101
  323. warp/sim/integrator_vbd.py +0 -2487
  324. warp/sim/integrator_xpbd.py +0 -3295
  325. warp/sim/model.py +0 -4821
  326. warp/sim/particles.py +0 -121
  327. warp/sim/render.py +0 -431
  328. warp/sim/utils.py +0 -431
  329. warp/tests/sim/disabled_kinematics.py +0 -244
  330. warp/tests/sim/test_cloth.py +0 -863
  331. warp/tests/sim/test_collision.py +0 -743
  332. warp/tests/sim/test_coloring.py +0 -347
  333. warp/tests/sim/test_inertia.py +0 -161
  334. warp/tests/sim/test_model.py +0 -226
  335. warp/tests/sim/test_sim_grad.py +0 -287
  336. warp/tests/sim/test_sim_grad_bounce_linear.py +0 -212
  337. warp/tests/sim/test_sim_kinematics.py +0 -98
  338. warp/thirdparty/__init__.py +0 -0
  339. warp_lang-1.9.1.dist-info/RECORD +0 -456
  340. /warp/{fem → _src/fem}/quadrature/__init__.py +0 -0
  341. /warp/{tests/sim → _src/thirdparty}/__init__.py +0 -0
  342. /warp/{thirdparty → _src/thirdparty}/appdirs.py +0 -0
  343. /warp/{thirdparty → _src/thirdparty}/dlpack.py +0 -0
  344. {warp_lang-1.9.1.dist-info → warp_lang-1.10.0rc2.dist-info}/WHEEL +0 -0
  345. {warp_lang-1.9.1.dist-info → warp_lang-1.10.0rc2.dist-info}/licenses/LICENSE.md +0 -0
  346. {warp_lang-1.9.1.dist-info → warp_lang-1.10.0rc2.dist-info}/top_level.txt +0 -0
warp/native/exports.h CHANGED
@@ -369,6 +369,18 @@ WP_API void wp_builtin_exp_float64(float64 x, float64* ret) { *ret = wp::exp(x);
369
369
  WP_API void wp_builtin_pow_float16_float16(float16 x, float16 y, float16* ret) { *ret = wp::pow(x, y); }
370
370
  WP_API void wp_builtin_pow_float32_float32(float32 x, float32 y, float32* ret) { *ret = wp::pow(x, y); }
371
371
  WP_API void wp_builtin_pow_float64_float64(float64 x, float64 y, float64* ret) { *ret = wp::pow(x, y); }
372
+ WP_API void wp_builtin_erf_float16(float16 x, float16* ret) { *ret = wp::erf(x); }
373
+ WP_API void wp_builtin_erf_float32(float32 x, float32* ret) { *ret = wp::erf(x); }
374
+ WP_API void wp_builtin_erf_float64(float64 x, float64* ret) { *ret = wp::erf(x); }
375
+ WP_API void wp_builtin_erfc_float16(float16 x, float16* ret) { *ret = wp::erfc(x); }
376
+ WP_API void wp_builtin_erfc_float32(float32 x, float32* ret) { *ret = wp::erfc(x); }
377
+ WP_API void wp_builtin_erfc_float64(float64 x, float64* ret) { *ret = wp::erfc(x); }
378
+ WP_API void wp_builtin_erfinv_float16(float16 x, float16* ret) { *ret = wp::erfinv(x); }
379
+ WP_API void wp_builtin_erfinv_float32(float32 x, float32* ret) { *ret = wp::erfinv(x); }
380
+ WP_API void wp_builtin_erfinv_float64(float64 x, float64* ret) { *ret = wp::erfinv(x); }
381
+ WP_API void wp_builtin_erfcinv_float16(float16 x, float16* ret) { *ret = wp::erfcinv(x); }
382
+ WP_API void wp_builtin_erfcinv_float32(float32 x, float32* ret) { *ret = wp::erfcinv(x); }
383
+ WP_API void wp_builtin_erfcinv_float64(float64 x, float64* ret) { *ret = wp::erfcinv(x); }
372
384
  WP_API void wp_builtin_round_float16(float16 x, float16* ret) { *ret = wp::round(x); }
373
385
  WP_API void wp_builtin_round_float32(float32 x, float32* ret) { *ret = wp::round(x); }
374
386
  WP_API void wp_builtin_round_float64(float64 x, float64* ret) { *ret = wp::round(x); }
@@ -1356,6 +1368,30 @@ WP_API void wp_builtin_bit_and_uint16_uint16(uint16 a, uint16 b, uint16* ret) {
1356
1368
  WP_API void wp_builtin_bit_and_uint32_uint32(uint32 a, uint32 b, uint32* ret) { *ret = wp::bit_and(a, b); }
1357
1369
  WP_API void wp_builtin_bit_and_uint64_uint64(uint64 a, uint64 b, uint64* ret) { *ret = wp::bit_and(a, b); }
1358
1370
  WP_API void wp_builtin_bit_and_uint8_uint8(uint8 a, uint8 b, uint8* ret) { *ret = wp::bit_and(a, b); }
1371
+ WP_API void wp_builtin_bit_and_vec2s_vec2s(vec2s& a, vec2s& b, vec2s* ret) { *ret = wp::bit_and(a, b); }
1372
+ WP_API void wp_builtin_bit_and_vec3s_vec3s(vec3s& a, vec3s& b, vec3s* ret) { *ret = wp::bit_and(a, b); }
1373
+ WP_API void wp_builtin_bit_and_vec4s_vec4s(vec4s& a, vec4s& b, vec4s* ret) { *ret = wp::bit_and(a, b); }
1374
+ WP_API void wp_builtin_bit_and_vec2i_vec2i(vec2i& a, vec2i& b, vec2i* ret) { *ret = wp::bit_and(a, b); }
1375
+ WP_API void wp_builtin_bit_and_vec3i_vec3i(vec3i& a, vec3i& b, vec3i* ret) { *ret = wp::bit_and(a, b); }
1376
+ WP_API void wp_builtin_bit_and_vec4i_vec4i(vec4i& a, vec4i& b, vec4i* ret) { *ret = wp::bit_and(a, b); }
1377
+ WP_API void wp_builtin_bit_and_vec2l_vec2l(vec2l& a, vec2l& b, vec2l* ret) { *ret = wp::bit_and(a, b); }
1378
+ WP_API void wp_builtin_bit_and_vec3l_vec3l(vec3l& a, vec3l& b, vec3l* ret) { *ret = wp::bit_and(a, b); }
1379
+ WP_API void wp_builtin_bit_and_vec4l_vec4l(vec4l& a, vec4l& b, vec4l* ret) { *ret = wp::bit_and(a, b); }
1380
+ WP_API void wp_builtin_bit_and_vec2b_vec2b(vec2b& a, vec2b& b, vec2b* ret) { *ret = wp::bit_and(a, b); }
1381
+ WP_API void wp_builtin_bit_and_vec3b_vec3b(vec3b& a, vec3b& b, vec3b* ret) { *ret = wp::bit_and(a, b); }
1382
+ WP_API void wp_builtin_bit_and_vec4b_vec4b(vec4b& a, vec4b& b, vec4b* ret) { *ret = wp::bit_and(a, b); }
1383
+ WP_API void wp_builtin_bit_and_vec2us_vec2us(vec2us& a, vec2us& b, vec2us* ret) { *ret = wp::bit_and(a, b); }
1384
+ WP_API void wp_builtin_bit_and_vec3us_vec3us(vec3us& a, vec3us& b, vec3us* ret) { *ret = wp::bit_and(a, b); }
1385
+ WP_API void wp_builtin_bit_and_vec4us_vec4us(vec4us& a, vec4us& b, vec4us* ret) { *ret = wp::bit_and(a, b); }
1386
+ WP_API void wp_builtin_bit_and_vec2ui_vec2ui(vec2ui& a, vec2ui& b, vec2ui* ret) { *ret = wp::bit_and(a, b); }
1387
+ WP_API void wp_builtin_bit_and_vec3ui_vec3ui(vec3ui& a, vec3ui& b, vec3ui* ret) { *ret = wp::bit_and(a, b); }
1388
+ WP_API void wp_builtin_bit_and_vec4ui_vec4ui(vec4ui& a, vec4ui& b, vec4ui* ret) { *ret = wp::bit_and(a, b); }
1389
+ WP_API void wp_builtin_bit_and_vec2ul_vec2ul(vec2ul& a, vec2ul& b, vec2ul* ret) { *ret = wp::bit_and(a, b); }
1390
+ WP_API void wp_builtin_bit_and_vec3ul_vec3ul(vec3ul& a, vec3ul& b, vec3ul* ret) { *ret = wp::bit_and(a, b); }
1391
+ WP_API void wp_builtin_bit_and_vec4ul_vec4ul(vec4ul& a, vec4ul& b, vec4ul* ret) { *ret = wp::bit_and(a, b); }
1392
+ WP_API void wp_builtin_bit_and_vec2ub_vec2ub(vec2ub& a, vec2ub& b, vec2ub* ret) { *ret = wp::bit_and(a, b); }
1393
+ WP_API void wp_builtin_bit_and_vec3ub_vec3ub(vec3ub& a, vec3ub& b, vec3ub* ret) { *ret = wp::bit_and(a, b); }
1394
+ WP_API void wp_builtin_bit_and_vec4ub_vec4ub(vec4ub& a, vec4ub& b, vec4ub* ret) { *ret = wp::bit_and(a, b); }
1359
1395
  WP_API void wp_builtin_bit_or_int16_int16(int16 a, int16 b, int16* ret) { *ret = wp::bit_or(a, b); }
1360
1396
  WP_API void wp_builtin_bit_or_int32_int32(int32 a, int32 b, int32* ret) { *ret = wp::bit_or(a, b); }
1361
1397
  WP_API void wp_builtin_bit_or_int64_int64(int64 a, int64 b, int64* ret) { *ret = wp::bit_or(a, b); }
@@ -1364,6 +1400,30 @@ WP_API void wp_builtin_bit_or_uint16_uint16(uint16 a, uint16 b, uint16* ret) { *
1364
1400
  WP_API void wp_builtin_bit_or_uint32_uint32(uint32 a, uint32 b, uint32* ret) { *ret = wp::bit_or(a, b); }
1365
1401
  WP_API void wp_builtin_bit_or_uint64_uint64(uint64 a, uint64 b, uint64* ret) { *ret = wp::bit_or(a, b); }
1366
1402
  WP_API void wp_builtin_bit_or_uint8_uint8(uint8 a, uint8 b, uint8* ret) { *ret = wp::bit_or(a, b); }
1403
+ WP_API void wp_builtin_bit_or_vec2s_vec2s(vec2s& a, vec2s& b, vec2s* ret) { *ret = wp::bit_or(a, b); }
1404
+ WP_API void wp_builtin_bit_or_vec3s_vec3s(vec3s& a, vec3s& b, vec3s* ret) { *ret = wp::bit_or(a, b); }
1405
+ WP_API void wp_builtin_bit_or_vec4s_vec4s(vec4s& a, vec4s& b, vec4s* ret) { *ret = wp::bit_or(a, b); }
1406
+ WP_API void wp_builtin_bit_or_vec2i_vec2i(vec2i& a, vec2i& b, vec2i* ret) { *ret = wp::bit_or(a, b); }
1407
+ WP_API void wp_builtin_bit_or_vec3i_vec3i(vec3i& a, vec3i& b, vec3i* ret) { *ret = wp::bit_or(a, b); }
1408
+ WP_API void wp_builtin_bit_or_vec4i_vec4i(vec4i& a, vec4i& b, vec4i* ret) { *ret = wp::bit_or(a, b); }
1409
+ WP_API void wp_builtin_bit_or_vec2l_vec2l(vec2l& a, vec2l& b, vec2l* ret) { *ret = wp::bit_or(a, b); }
1410
+ WP_API void wp_builtin_bit_or_vec3l_vec3l(vec3l& a, vec3l& b, vec3l* ret) { *ret = wp::bit_or(a, b); }
1411
+ WP_API void wp_builtin_bit_or_vec4l_vec4l(vec4l& a, vec4l& b, vec4l* ret) { *ret = wp::bit_or(a, b); }
1412
+ WP_API void wp_builtin_bit_or_vec2b_vec2b(vec2b& a, vec2b& b, vec2b* ret) { *ret = wp::bit_or(a, b); }
1413
+ WP_API void wp_builtin_bit_or_vec3b_vec3b(vec3b& a, vec3b& b, vec3b* ret) { *ret = wp::bit_or(a, b); }
1414
+ WP_API void wp_builtin_bit_or_vec4b_vec4b(vec4b& a, vec4b& b, vec4b* ret) { *ret = wp::bit_or(a, b); }
1415
+ WP_API void wp_builtin_bit_or_vec2us_vec2us(vec2us& a, vec2us& b, vec2us* ret) { *ret = wp::bit_or(a, b); }
1416
+ WP_API void wp_builtin_bit_or_vec3us_vec3us(vec3us& a, vec3us& b, vec3us* ret) { *ret = wp::bit_or(a, b); }
1417
+ WP_API void wp_builtin_bit_or_vec4us_vec4us(vec4us& a, vec4us& b, vec4us* ret) { *ret = wp::bit_or(a, b); }
1418
+ WP_API void wp_builtin_bit_or_vec2ui_vec2ui(vec2ui& a, vec2ui& b, vec2ui* ret) { *ret = wp::bit_or(a, b); }
1419
+ WP_API void wp_builtin_bit_or_vec3ui_vec3ui(vec3ui& a, vec3ui& b, vec3ui* ret) { *ret = wp::bit_or(a, b); }
1420
+ WP_API void wp_builtin_bit_or_vec4ui_vec4ui(vec4ui& a, vec4ui& b, vec4ui* ret) { *ret = wp::bit_or(a, b); }
1421
+ WP_API void wp_builtin_bit_or_vec2ul_vec2ul(vec2ul& a, vec2ul& b, vec2ul* ret) { *ret = wp::bit_or(a, b); }
1422
+ WP_API void wp_builtin_bit_or_vec3ul_vec3ul(vec3ul& a, vec3ul& b, vec3ul* ret) { *ret = wp::bit_or(a, b); }
1423
+ WP_API void wp_builtin_bit_or_vec4ul_vec4ul(vec4ul& a, vec4ul& b, vec4ul* ret) { *ret = wp::bit_or(a, b); }
1424
+ WP_API void wp_builtin_bit_or_vec2ub_vec2ub(vec2ub& a, vec2ub& b, vec2ub* ret) { *ret = wp::bit_or(a, b); }
1425
+ WP_API void wp_builtin_bit_or_vec3ub_vec3ub(vec3ub& a, vec3ub& b, vec3ub* ret) { *ret = wp::bit_or(a, b); }
1426
+ WP_API void wp_builtin_bit_or_vec4ub_vec4ub(vec4ub& a, vec4ub& b, vec4ub* ret) { *ret = wp::bit_or(a, b); }
1367
1427
  WP_API void wp_builtin_bit_xor_int16_int16(int16 a, int16 b, int16* ret) { *ret = wp::bit_xor(a, b); }
1368
1428
  WP_API void wp_builtin_bit_xor_int32_int32(int32 a, int32 b, int32* ret) { *ret = wp::bit_xor(a, b); }
1369
1429
  WP_API void wp_builtin_bit_xor_int64_int64(int64 a, int64 b, int64* ret) { *ret = wp::bit_xor(a, b); }
@@ -1372,6 +1432,30 @@ WP_API void wp_builtin_bit_xor_uint16_uint16(uint16 a, uint16 b, uint16* ret) {
1372
1432
  WP_API void wp_builtin_bit_xor_uint32_uint32(uint32 a, uint32 b, uint32* ret) { *ret = wp::bit_xor(a, b); }
1373
1433
  WP_API void wp_builtin_bit_xor_uint64_uint64(uint64 a, uint64 b, uint64* ret) { *ret = wp::bit_xor(a, b); }
1374
1434
  WP_API void wp_builtin_bit_xor_uint8_uint8(uint8 a, uint8 b, uint8* ret) { *ret = wp::bit_xor(a, b); }
1435
+ WP_API void wp_builtin_bit_xor_vec2s_vec2s(vec2s& a, vec2s& b, vec2s* ret) { *ret = wp::bit_xor(a, b); }
1436
+ WP_API void wp_builtin_bit_xor_vec3s_vec3s(vec3s& a, vec3s& b, vec3s* ret) { *ret = wp::bit_xor(a, b); }
1437
+ WP_API void wp_builtin_bit_xor_vec4s_vec4s(vec4s& a, vec4s& b, vec4s* ret) { *ret = wp::bit_xor(a, b); }
1438
+ WP_API void wp_builtin_bit_xor_vec2i_vec2i(vec2i& a, vec2i& b, vec2i* ret) { *ret = wp::bit_xor(a, b); }
1439
+ WP_API void wp_builtin_bit_xor_vec3i_vec3i(vec3i& a, vec3i& b, vec3i* ret) { *ret = wp::bit_xor(a, b); }
1440
+ WP_API void wp_builtin_bit_xor_vec4i_vec4i(vec4i& a, vec4i& b, vec4i* ret) { *ret = wp::bit_xor(a, b); }
1441
+ WP_API void wp_builtin_bit_xor_vec2l_vec2l(vec2l& a, vec2l& b, vec2l* ret) { *ret = wp::bit_xor(a, b); }
1442
+ WP_API void wp_builtin_bit_xor_vec3l_vec3l(vec3l& a, vec3l& b, vec3l* ret) { *ret = wp::bit_xor(a, b); }
1443
+ WP_API void wp_builtin_bit_xor_vec4l_vec4l(vec4l& a, vec4l& b, vec4l* ret) { *ret = wp::bit_xor(a, b); }
1444
+ WP_API void wp_builtin_bit_xor_vec2b_vec2b(vec2b& a, vec2b& b, vec2b* ret) { *ret = wp::bit_xor(a, b); }
1445
+ WP_API void wp_builtin_bit_xor_vec3b_vec3b(vec3b& a, vec3b& b, vec3b* ret) { *ret = wp::bit_xor(a, b); }
1446
+ WP_API void wp_builtin_bit_xor_vec4b_vec4b(vec4b& a, vec4b& b, vec4b* ret) { *ret = wp::bit_xor(a, b); }
1447
+ WP_API void wp_builtin_bit_xor_vec2us_vec2us(vec2us& a, vec2us& b, vec2us* ret) { *ret = wp::bit_xor(a, b); }
1448
+ WP_API void wp_builtin_bit_xor_vec3us_vec3us(vec3us& a, vec3us& b, vec3us* ret) { *ret = wp::bit_xor(a, b); }
1449
+ WP_API void wp_builtin_bit_xor_vec4us_vec4us(vec4us& a, vec4us& b, vec4us* ret) { *ret = wp::bit_xor(a, b); }
1450
+ WP_API void wp_builtin_bit_xor_vec2ui_vec2ui(vec2ui& a, vec2ui& b, vec2ui* ret) { *ret = wp::bit_xor(a, b); }
1451
+ WP_API void wp_builtin_bit_xor_vec3ui_vec3ui(vec3ui& a, vec3ui& b, vec3ui* ret) { *ret = wp::bit_xor(a, b); }
1452
+ WP_API void wp_builtin_bit_xor_vec4ui_vec4ui(vec4ui& a, vec4ui& b, vec4ui* ret) { *ret = wp::bit_xor(a, b); }
1453
+ WP_API void wp_builtin_bit_xor_vec2ul_vec2ul(vec2ul& a, vec2ul& b, vec2ul* ret) { *ret = wp::bit_xor(a, b); }
1454
+ WP_API void wp_builtin_bit_xor_vec3ul_vec3ul(vec3ul& a, vec3ul& b, vec3ul* ret) { *ret = wp::bit_xor(a, b); }
1455
+ WP_API void wp_builtin_bit_xor_vec4ul_vec4ul(vec4ul& a, vec4ul& b, vec4ul* ret) { *ret = wp::bit_xor(a, b); }
1456
+ WP_API void wp_builtin_bit_xor_vec2ub_vec2ub(vec2ub& a, vec2ub& b, vec2ub* ret) { *ret = wp::bit_xor(a, b); }
1457
+ WP_API void wp_builtin_bit_xor_vec3ub_vec3ub(vec3ub& a, vec3ub& b, vec3ub* ret) { *ret = wp::bit_xor(a, b); }
1458
+ WP_API void wp_builtin_bit_xor_vec4ub_vec4ub(vec4ub& a, vec4ub& b, vec4ub* ret) { *ret = wp::bit_xor(a, b); }
1375
1459
  WP_API void wp_builtin_lshift_int16_int16(int16 a, int16 b, int16* ret) { *ret = wp::lshift(a, b); }
1376
1460
  WP_API void wp_builtin_lshift_int32_int32(int32 a, int32 b, int32* ret) { *ret = wp::lshift(a, b); }
1377
1461
  WP_API void wp_builtin_lshift_int64_int64(int64 a, int64 b, int64* ret) { *ret = wp::lshift(a, b); }
@@ -1380,6 +1464,30 @@ WP_API void wp_builtin_lshift_uint16_uint16(uint16 a, uint16 b, uint16* ret) { *
1380
1464
  WP_API void wp_builtin_lshift_uint32_uint32(uint32 a, uint32 b, uint32* ret) { *ret = wp::lshift(a, b); }
1381
1465
  WP_API void wp_builtin_lshift_uint64_uint64(uint64 a, uint64 b, uint64* ret) { *ret = wp::lshift(a, b); }
1382
1466
  WP_API void wp_builtin_lshift_uint8_uint8(uint8 a, uint8 b, uint8* ret) { *ret = wp::lshift(a, b); }
1467
+ WP_API void wp_builtin_lshift_vec2s_vec2s(vec2s& a, vec2s& b, vec2s* ret) { *ret = wp::lshift(a, b); }
1468
+ WP_API void wp_builtin_lshift_vec3s_vec3s(vec3s& a, vec3s& b, vec3s* ret) { *ret = wp::lshift(a, b); }
1469
+ WP_API void wp_builtin_lshift_vec4s_vec4s(vec4s& a, vec4s& b, vec4s* ret) { *ret = wp::lshift(a, b); }
1470
+ WP_API void wp_builtin_lshift_vec2i_vec2i(vec2i& a, vec2i& b, vec2i* ret) { *ret = wp::lshift(a, b); }
1471
+ WP_API void wp_builtin_lshift_vec3i_vec3i(vec3i& a, vec3i& b, vec3i* ret) { *ret = wp::lshift(a, b); }
1472
+ WP_API void wp_builtin_lshift_vec4i_vec4i(vec4i& a, vec4i& b, vec4i* ret) { *ret = wp::lshift(a, b); }
1473
+ WP_API void wp_builtin_lshift_vec2l_vec2l(vec2l& a, vec2l& b, vec2l* ret) { *ret = wp::lshift(a, b); }
1474
+ WP_API void wp_builtin_lshift_vec3l_vec3l(vec3l& a, vec3l& b, vec3l* ret) { *ret = wp::lshift(a, b); }
1475
+ WP_API void wp_builtin_lshift_vec4l_vec4l(vec4l& a, vec4l& b, vec4l* ret) { *ret = wp::lshift(a, b); }
1476
+ WP_API void wp_builtin_lshift_vec2b_vec2b(vec2b& a, vec2b& b, vec2b* ret) { *ret = wp::lshift(a, b); }
1477
+ WP_API void wp_builtin_lshift_vec3b_vec3b(vec3b& a, vec3b& b, vec3b* ret) { *ret = wp::lshift(a, b); }
1478
+ WP_API void wp_builtin_lshift_vec4b_vec4b(vec4b& a, vec4b& b, vec4b* ret) { *ret = wp::lshift(a, b); }
1479
+ WP_API void wp_builtin_lshift_vec2us_vec2us(vec2us& a, vec2us& b, vec2us* ret) { *ret = wp::lshift(a, b); }
1480
+ WP_API void wp_builtin_lshift_vec3us_vec3us(vec3us& a, vec3us& b, vec3us* ret) { *ret = wp::lshift(a, b); }
1481
+ WP_API void wp_builtin_lshift_vec4us_vec4us(vec4us& a, vec4us& b, vec4us* ret) { *ret = wp::lshift(a, b); }
1482
+ WP_API void wp_builtin_lshift_vec2ui_vec2ui(vec2ui& a, vec2ui& b, vec2ui* ret) { *ret = wp::lshift(a, b); }
1483
+ WP_API void wp_builtin_lshift_vec3ui_vec3ui(vec3ui& a, vec3ui& b, vec3ui* ret) { *ret = wp::lshift(a, b); }
1484
+ WP_API void wp_builtin_lshift_vec4ui_vec4ui(vec4ui& a, vec4ui& b, vec4ui* ret) { *ret = wp::lshift(a, b); }
1485
+ WP_API void wp_builtin_lshift_vec2ul_vec2ul(vec2ul& a, vec2ul& b, vec2ul* ret) { *ret = wp::lshift(a, b); }
1486
+ WP_API void wp_builtin_lshift_vec3ul_vec3ul(vec3ul& a, vec3ul& b, vec3ul* ret) { *ret = wp::lshift(a, b); }
1487
+ WP_API void wp_builtin_lshift_vec4ul_vec4ul(vec4ul& a, vec4ul& b, vec4ul* ret) { *ret = wp::lshift(a, b); }
1488
+ WP_API void wp_builtin_lshift_vec2ub_vec2ub(vec2ub& a, vec2ub& b, vec2ub* ret) { *ret = wp::lshift(a, b); }
1489
+ WP_API void wp_builtin_lshift_vec3ub_vec3ub(vec3ub& a, vec3ub& b, vec3ub* ret) { *ret = wp::lshift(a, b); }
1490
+ WP_API void wp_builtin_lshift_vec4ub_vec4ub(vec4ub& a, vec4ub& b, vec4ub* ret) { *ret = wp::lshift(a, b); }
1383
1491
  WP_API void wp_builtin_rshift_int16_int16(int16 a, int16 b, int16* ret) { *ret = wp::rshift(a, b); }
1384
1492
  WP_API void wp_builtin_rshift_int32_int32(int32 a, int32 b, int32* ret) { *ret = wp::rshift(a, b); }
1385
1493
  WP_API void wp_builtin_rshift_int64_int64(int64 a, int64 b, int64* ret) { *ret = wp::rshift(a, b); }
@@ -1388,6 +1496,30 @@ WP_API void wp_builtin_rshift_uint16_uint16(uint16 a, uint16 b, uint16* ret) { *
1388
1496
  WP_API void wp_builtin_rshift_uint32_uint32(uint32 a, uint32 b, uint32* ret) { *ret = wp::rshift(a, b); }
1389
1497
  WP_API void wp_builtin_rshift_uint64_uint64(uint64 a, uint64 b, uint64* ret) { *ret = wp::rshift(a, b); }
1390
1498
  WP_API void wp_builtin_rshift_uint8_uint8(uint8 a, uint8 b, uint8* ret) { *ret = wp::rshift(a, b); }
1499
+ WP_API void wp_builtin_rshift_vec2s_vec2s(vec2s& a, vec2s& b, vec2s* ret) { *ret = wp::rshift(a, b); }
1500
+ WP_API void wp_builtin_rshift_vec3s_vec3s(vec3s& a, vec3s& b, vec3s* ret) { *ret = wp::rshift(a, b); }
1501
+ WP_API void wp_builtin_rshift_vec4s_vec4s(vec4s& a, vec4s& b, vec4s* ret) { *ret = wp::rshift(a, b); }
1502
+ WP_API void wp_builtin_rshift_vec2i_vec2i(vec2i& a, vec2i& b, vec2i* ret) { *ret = wp::rshift(a, b); }
1503
+ WP_API void wp_builtin_rshift_vec3i_vec3i(vec3i& a, vec3i& b, vec3i* ret) { *ret = wp::rshift(a, b); }
1504
+ WP_API void wp_builtin_rshift_vec4i_vec4i(vec4i& a, vec4i& b, vec4i* ret) { *ret = wp::rshift(a, b); }
1505
+ WP_API void wp_builtin_rshift_vec2l_vec2l(vec2l& a, vec2l& b, vec2l* ret) { *ret = wp::rshift(a, b); }
1506
+ WP_API void wp_builtin_rshift_vec3l_vec3l(vec3l& a, vec3l& b, vec3l* ret) { *ret = wp::rshift(a, b); }
1507
+ WP_API void wp_builtin_rshift_vec4l_vec4l(vec4l& a, vec4l& b, vec4l* ret) { *ret = wp::rshift(a, b); }
1508
+ WP_API void wp_builtin_rshift_vec2b_vec2b(vec2b& a, vec2b& b, vec2b* ret) { *ret = wp::rshift(a, b); }
1509
+ WP_API void wp_builtin_rshift_vec3b_vec3b(vec3b& a, vec3b& b, vec3b* ret) { *ret = wp::rshift(a, b); }
1510
+ WP_API void wp_builtin_rshift_vec4b_vec4b(vec4b& a, vec4b& b, vec4b* ret) { *ret = wp::rshift(a, b); }
1511
+ WP_API void wp_builtin_rshift_vec2us_vec2us(vec2us& a, vec2us& b, vec2us* ret) { *ret = wp::rshift(a, b); }
1512
+ WP_API void wp_builtin_rshift_vec3us_vec3us(vec3us& a, vec3us& b, vec3us* ret) { *ret = wp::rshift(a, b); }
1513
+ WP_API void wp_builtin_rshift_vec4us_vec4us(vec4us& a, vec4us& b, vec4us* ret) { *ret = wp::rshift(a, b); }
1514
+ WP_API void wp_builtin_rshift_vec2ui_vec2ui(vec2ui& a, vec2ui& b, vec2ui* ret) { *ret = wp::rshift(a, b); }
1515
+ WP_API void wp_builtin_rshift_vec3ui_vec3ui(vec3ui& a, vec3ui& b, vec3ui* ret) { *ret = wp::rshift(a, b); }
1516
+ WP_API void wp_builtin_rshift_vec4ui_vec4ui(vec4ui& a, vec4ui& b, vec4ui* ret) { *ret = wp::rshift(a, b); }
1517
+ WP_API void wp_builtin_rshift_vec2ul_vec2ul(vec2ul& a, vec2ul& b, vec2ul* ret) { *ret = wp::rshift(a, b); }
1518
+ WP_API void wp_builtin_rshift_vec3ul_vec3ul(vec3ul& a, vec3ul& b, vec3ul* ret) { *ret = wp::rshift(a, b); }
1519
+ WP_API void wp_builtin_rshift_vec4ul_vec4ul(vec4ul& a, vec4ul& b, vec4ul* ret) { *ret = wp::rshift(a, b); }
1520
+ WP_API void wp_builtin_rshift_vec2ub_vec2ub(vec2ub& a, vec2ub& b, vec2ub* ret) { *ret = wp::rshift(a, b); }
1521
+ WP_API void wp_builtin_rshift_vec3ub_vec3ub(vec3ub& a, vec3ub& b, vec3ub* ret) { *ret = wp::rshift(a, b); }
1522
+ WP_API void wp_builtin_rshift_vec4ub_vec4ub(vec4ub& a, vec4ub& b, vec4ub* ret) { *ret = wp::rshift(a, b); }
1391
1523
  WP_API void wp_builtin_invert_int16(int16 a, int16* ret) { *ret = wp::invert(a); }
1392
1524
  WP_API void wp_builtin_invert_int32(int32 a, int32* ret) { *ret = wp::invert(a); }
1393
1525
  WP_API void wp_builtin_invert_int64(int64 a, int64* ret) { *ret = wp::invert(a); }
@@ -1396,6 +1528,30 @@ WP_API void wp_builtin_invert_uint16(uint16 a, uint16* ret) { *ret = wp::invert(
1396
1528
  WP_API void wp_builtin_invert_uint32(uint32 a, uint32* ret) { *ret = wp::invert(a); }
1397
1529
  WP_API void wp_builtin_invert_uint64(uint64 a, uint64* ret) { *ret = wp::invert(a); }
1398
1530
  WP_API void wp_builtin_invert_uint8(uint8 a, uint8* ret) { *ret = wp::invert(a); }
1531
+ WP_API void wp_builtin_invert_vec2s(vec2s& a, vec2s* ret) { *ret = wp::invert(a); }
1532
+ WP_API void wp_builtin_invert_vec3s(vec3s& a, vec3s* ret) { *ret = wp::invert(a); }
1533
+ WP_API void wp_builtin_invert_vec4s(vec4s& a, vec4s* ret) { *ret = wp::invert(a); }
1534
+ WP_API void wp_builtin_invert_vec2i(vec2i& a, vec2i* ret) { *ret = wp::invert(a); }
1535
+ WP_API void wp_builtin_invert_vec3i(vec3i& a, vec3i* ret) { *ret = wp::invert(a); }
1536
+ WP_API void wp_builtin_invert_vec4i(vec4i& a, vec4i* ret) { *ret = wp::invert(a); }
1537
+ WP_API void wp_builtin_invert_vec2l(vec2l& a, vec2l* ret) { *ret = wp::invert(a); }
1538
+ WP_API void wp_builtin_invert_vec3l(vec3l& a, vec3l* ret) { *ret = wp::invert(a); }
1539
+ WP_API void wp_builtin_invert_vec4l(vec4l& a, vec4l* ret) { *ret = wp::invert(a); }
1540
+ WP_API void wp_builtin_invert_vec2b(vec2b& a, vec2b* ret) { *ret = wp::invert(a); }
1541
+ WP_API void wp_builtin_invert_vec3b(vec3b& a, vec3b* ret) { *ret = wp::invert(a); }
1542
+ WP_API void wp_builtin_invert_vec4b(vec4b& a, vec4b* ret) { *ret = wp::invert(a); }
1543
+ WP_API void wp_builtin_invert_vec2us(vec2us& a, vec2us* ret) { *ret = wp::invert(a); }
1544
+ WP_API void wp_builtin_invert_vec3us(vec3us& a, vec3us* ret) { *ret = wp::invert(a); }
1545
+ WP_API void wp_builtin_invert_vec4us(vec4us& a, vec4us* ret) { *ret = wp::invert(a); }
1546
+ WP_API void wp_builtin_invert_vec2ui(vec2ui& a, vec2ui* ret) { *ret = wp::invert(a); }
1547
+ WP_API void wp_builtin_invert_vec3ui(vec3ui& a, vec3ui* ret) { *ret = wp::invert(a); }
1548
+ WP_API void wp_builtin_invert_vec4ui(vec4ui& a, vec4ui* ret) { *ret = wp::invert(a); }
1549
+ WP_API void wp_builtin_invert_vec2ul(vec2ul& a, vec2ul* ret) { *ret = wp::invert(a); }
1550
+ WP_API void wp_builtin_invert_vec3ul(vec3ul& a, vec3ul* ret) { *ret = wp::invert(a); }
1551
+ WP_API void wp_builtin_invert_vec4ul(vec4ul& a, vec4ul* ret) { *ret = wp::invert(a); }
1552
+ WP_API void wp_builtin_invert_vec2ub(vec2ub& a, vec2ub* ret) { *ret = wp::invert(a); }
1553
+ WP_API void wp_builtin_invert_vec3ub(vec3ub& a, vec3ub* ret) { *ret = wp::invert(a); }
1554
+ WP_API void wp_builtin_invert_vec4ub(vec4ub& a, vec4ub* ret) { *ret = wp::invert(a); }
1399
1555
  WP_API void wp_builtin_mul_float16_float16(float16 a, float16 b, float16* ret) { *ret = wp::mul(a, b); }
1400
1556
  WP_API void wp_builtin_mul_float32_float32(float32 a, float32 b, float32* ret) { *ret = wp::mul(a, b); }
1401
1557
  WP_API void wp_builtin_mul_float64_float64(float64 a, float64 b, float64* ret) { *ret = wp::mul(a, b); }
warp/native/hashgrid.cu CHANGED
@@ -20,6 +20,8 @@
20
20
  #include "hashgrid.h"
21
21
  #include "sort.h"
22
22
 
23
+ extern CUcontext get_current_context();
24
+
23
25
  namespace wp
24
26
  {
25
27
 
warp/native/intersect.h CHANGED
@@ -613,7 +613,15 @@ CUDA_CALLABLE inline int intersect_tri_tri(
613
613
  vec3& v0, vec3& v1, vec3& v2,
614
614
  vec3& u0, vec3& u1, vec3& u2)
615
615
  {
616
- return NoDivTriTriIsect(&v0[0], &v1[0], &v2[0], &u0[0], &u1[0], &u2[0]);
616
+ return NoDivTriTriIsect<float>(&v0[0], &v1[0], &v2[0], &u0[0], &u1[0], &u2[0]);
617
+ }
618
+
619
+
620
+ CUDA_CALLABLE inline int intersect_tri_tri(
621
+ vec3d& v0, vec3d& v1, vec3d& v2,
622
+ vec3d& u0, vec3d& u1, vec3d& u2)
623
+ {
624
+ return NoDivTriTriIsect<double>(&v0[0], &v1[0], &v2[0], &u0[0], &u1[0], &u2[0]);
617
625
  }
618
626
 
619
627
  CUDA_CALLABLE inline void adj_intersect_tri_tri(const vec3& var_v0,
@@ -631,6 +639,21 @@ CUDA_CALLABLE inline void adj_intersect_tri_tri(const vec3& var_v0,
631
639
  int adj_ret) {}
632
640
 
633
641
 
642
+ CUDA_CALLABLE inline void adj_intersect_tri_tri(const vec3d& var_v0,
643
+ const vec3d& var_v1,
644
+ const vec3d& var_v2,
645
+ const vec3d& var_u0,
646
+ const vec3d& var_u1,
647
+ const vec3d& var_u2,
648
+ vec3d& adj_v0,
649
+ vec3d& adj_v1,
650
+ vec3d& adj_v2,
651
+ vec3d& adj_u0,
652
+ vec3d& adj_u1,
653
+ vec3d& adj_u2,
654
+ int adj_ret) {}
655
+
656
+
634
657
  CUDA_CALLABLE inline void adj_closest_point_to_triangle(
635
658
  const vec3& var_a, const vec3& var_b, const vec3& var_c, const vec3& var_p,
636
659
  vec3& adj_a, vec3& adj_b, vec3& adj_c, vec3& adj_p, vec2& adj_ret)
@@ -23,8 +23,8 @@
23
23
  * Updated June 1999: removed the divisions -- a little faster now!
24
24
  * Updated October 1999: added {} to CROSS and SUB macros
25
25
  *
26
- * int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
27
- * float U0[3],float U1[3],float U2[3])
26
+ * int NoDivTriTriIsect(T V0[3],T V1[3],T V2[3],
27
+ * T U0[3],T U1[3],T U2[3])
28
28
  *
29
29
  * parameters: vertices of triangle 1: V0,V1,V2
30
30
  * vertices of triangle 2: U0,U1,U2
@@ -74,7 +74,7 @@
74
74
  #define SORT(a,b) \
75
75
  if(a>b) \
76
76
  { \
77
- float c; \
77
+ T c; \
78
78
  c=a; \
79
79
  a=b; \
80
80
  b=c; \
@@ -106,7 +106,7 @@
106
106
 
107
107
  #define EDGE_AGAINST_TRI_EDGES(V0,V1,U0,U1,U2) \
108
108
  { \
109
- float Ax,Ay,Bx,By,Cx,Cy,e,d,f; \
109
+ T Ax,Ay,Bx,By,Cx,Cy,e,d,f; \
110
110
  Ax=V1[i0]-V0[i0]; \
111
111
  Ay=V1[i1]-V0[i1]; \
112
112
  /* test edge U0,U1 against V0,V1 */ \
@@ -119,7 +119,7 @@
119
119
 
120
120
  #define POINT_IN_TRI(V0,U0,U1,U2) \
121
121
  { \
122
- float a,b,c,d0,d1,d2; \
122
+ T a,b,c,d0,d1,d2; \
123
123
  /* is T1 completely inside T2? */ \
124
124
  /* check if V0 is inside tri(U0,U1,U2) */ \
125
125
  a=U1[i1]-U0[i1]; \
@@ -142,16 +142,25 @@
142
142
  } \
143
143
  }
144
144
 
145
- CUDA_CALLABLE inline int coplanar_tri_tri(float N[3],float V0[3],float V1[3],float V2[3],
146
- float U0[3],float U1[3],float U2[3])
145
+
146
+ // Type-generic abs that works on device & host without relying on std overloads
147
+ CUDA_CALLABLE inline float abs_t(float x) { return fabsf(x); }
148
+ CUDA_CALLABLE inline double abs_t(double x) { return fabs(x); }
149
+
150
+ template <typename T>
151
+ CUDA_CALLABLE inline T abs_t(T x) { return x < T(0) ? -x : x; }
152
+
153
+ template<typename T>
154
+ CUDA_CALLABLE inline int coplanar_tri_tri(T N[3],T V0[3],T V1[3],T V2[3],
155
+ T U0[3],T U1[3],T U2[3])
147
156
  {
148
- float A[3];
157
+ T A[3];
149
158
  short i0,i1;
150
159
  /* first project onto an axis-aligned plane, that maximizes the area */
151
160
  /* of the triangles, compute indices: i0,i1. */
152
- A[0]=fabsf(N[0]);
153
- A[1]=fabsf(N[1]);
154
- A[2]=fabsf(N[2]);
161
+ A[0]=abs_t(N[0]);
162
+ A[1]=abs_t(N[1]);
163
+ A[2]=abs_t(N[2]);
155
164
  if(A[0]>A[1])
156
165
  {
157
166
  if(A[0]>A[2])
@@ -227,20 +236,20 @@ CUDA_CALLABLE inline int coplanar_tri_tri(float N[3],float V0[3],float V1[3],flo
227
236
  }
228
237
 
229
238
 
230
-
231
- CUDA_CALLABLE inline int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
232
- float U0[3],float U1[3],float U2[3])
239
+ template<typename T>
240
+ CUDA_CALLABLE inline int NoDivTriTriIsect(T V0[3], T V1[3], T V2[3],
241
+ T U0[3], T U1[3], T U2[3])
233
242
  {
234
- float E1[3],E2[3];
235
- float N1[3],N2[3],d1,d2;
236
- float du0,du1,du2,dv0,dv1,dv2;
237
- float D[3];
238
- float isect1[2], isect2[2];
239
- float du0du1,du0du2,dv0dv1,dv0dv2;
243
+ T E1[3],E2[3];
244
+ T N1[3],N2[3],d1,d2;
245
+ T du0,du1,du2,dv0,dv1,dv2;
246
+ T D[3];
247
+ T isect1[2], isect2[2];
248
+ T du0du1,du0du2,dv0dv1,dv0dv2;
240
249
  short index;
241
- float vp0,vp1,vp2;
242
- float up0,up1,up2;
243
- float bb,cc,max;
250
+ T vp0,vp1,vp2;
251
+ T up0,up1,up2;
252
+ T bb,cc,max;
244
253
 
245
254
  /* compute plane equation of triangle(V0,V1,V2) */
246
255
  SUB(E1,V1,V0);
@@ -256,9 +265,9 @@ CUDA_CALLABLE inline int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
256
265
 
257
266
  /* coplanarity robustness check */
258
267
  #if USE_EPSILON_TEST==TRUE
259
- if(fabsf(du0)<EPSILON) du0=0.0;
260
- if(fabsf(du1)<EPSILON) du1=0.0;
261
- if(fabsf(du2)<EPSILON) du2=0.0;
268
+ if(abs_t(du0)<EPSILON) du0=0.0;
269
+ if(abs_t(du1)<EPSILON) du1=0.0;
270
+ if(abs_t(du2)<EPSILON) du2=0.0;
262
271
  #endif
263
272
  du0du1=du0*du1;
264
273
  du0du2=du0*du2;
@@ -279,9 +288,9 @@ CUDA_CALLABLE inline int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
279
288
  dv2=DOT(N2,V2)+d2;
280
289
 
281
290
  #if USE_EPSILON_TEST==TRUE
282
- if(fabsf(dv0)<EPSILON) dv0=0.0;
283
- if(fabsf(dv1)<EPSILON) dv1=0.0;
284
- if(fabsf(dv2)<EPSILON) dv2=0.0;
291
+ if(abs_t(dv0)<EPSILON) dv0=0.0;
292
+ if(abs_t(dv1)<EPSILON) dv1=0.0;
293
+ if(abs_t(dv2)<EPSILON) dv2=0.0;
285
294
  #endif
286
295
 
287
296
  dv0dv1=dv0*dv1;
@@ -294,10 +303,10 @@ CUDA_CALLABLE inline int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
294
303
  CROSS(D,N1,N2);
295
304
 
296
305
  /* compute and index to the largest component of D */
297
- max=fabsf(D[0]);
306
+ max=abs_t(D[0]);
298
307
  index=0;
299
- bb=fabsf(D[1]);
300
- cc=fabsf(D[2]);
308
+ bb=abs_t(D[1]);
309
+ cc=abs_t(D[2]);
301
310
  if(bb>max) max=bb,index=1;
302
311
  if(cc>max) max=cc,index=2;
303
312
 
@@ -311,14 +320,14 @@ CUDA_CALLABLE inline int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
311
320
  up2=U2[index];
312
321
 
313
322
  /* compute interval for triangle 1 */
314
- float a,b,c,x0,x1;
323
+ T a,b,c,x0,x1;
315
324
  NEWCOMPUTE_INTERVALS(vp0,vp1,vp2,dv0,dv1,dv2,dv0dv1,dv0dv2,a,b,c,x0,x1);
316
325
 
317
326
  /* compute interval for triangle 2 */
318
- float d,e,f,y0,y1;
327
+ T d,e,f,y0,y1;
319
328
  NEWCOMPUTE_INTERVALS(up0,up1,up2,du0,du1,du2,du0du1,du0du2,d,e,f,y0,y1);
320
329
 
321
- float xx,yy,xxyy,tmp;
330
+ T xx,yy,xxyy,tmp;
322
331
  xx=x0*x1;
323
332
  yy=y0*y1;
324
333
  xxyy=xx*yy;