@woosh/meep-engine 3.69.0 → 3.70.0

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.
Files changed (398) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +1 -1
  4. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  5. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  6. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  7. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  8. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  9. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  10. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  11. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  12. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  13. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  14. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  15. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  16. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  17. package/src/core/bvh8/bvh8_depth.js +39 -0
  18. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  19. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  20. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  21. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  22. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  24. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  25. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  26. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  27. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  28. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  29. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  30. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  31. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  32. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  33. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  34. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  35. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  36. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  37. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  38. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  39. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  40. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  41. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  42. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  43. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  44. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  45. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  46. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  47. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  48. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  49. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  50. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  51. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  52. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  53. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  54. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  55. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  56. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  57. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  58. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  59. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  60. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  61. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  62. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  63. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  64. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  65. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  66. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  67. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  68. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  69. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  70. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  71. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  72. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  73. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  74. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  75. package/src/shade/playground/bvh_repro/README.md +8 -6
  76. package/src/shade/playground/bvh_repro/index.html +125 -124
  77. package/src/shade/playground/bvh_repro/main.js +259 -254
  78. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  79. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  80. package/src/shade/playground/grass_surfaces/main.js +3 -2
  81. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  82. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  83. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  84. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  85. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  86. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  87. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  88. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  89. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  90. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  91. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  92. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  93. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  94. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  95. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  96. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  97. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  98. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  99. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  100. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  101. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  102. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  103. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  104. package/src/shade/playground/water_surface/main.js +6 -3
  105. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  106. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  107. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  108. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  109. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  110. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  111. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  112. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  113. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  114. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  115. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  116. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  117. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  118. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  119. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  120. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  121. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  122. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  123. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  124. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  125. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  126. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  127. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  128. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  129. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  130. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  131. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  132. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  133. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  134. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  135. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  136. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  137. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  138. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  139. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  140. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  141. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  142. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  143. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  144. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  145. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  146. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +2 -1
  147. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  148. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  149. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  150. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  151. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  152. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  153. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  154. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  155. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  156. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  158. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  159. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  160. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  161. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  162. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  164. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  165. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  167. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  168. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  170. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  171. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  172. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  173. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  174. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  175. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  176. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  177. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  178. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  179. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  180. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  182. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  183. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  185. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  186. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  187. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  188. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  189. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  190. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  191. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  192. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  193. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  195. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  196. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  197. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  198. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  199. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  201. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  202. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  203. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  204. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  205. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  206. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  207. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  208. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  209. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  210. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  211. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  212. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  213. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  214. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  215. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  216. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  217. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  218. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  219. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  220. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  221. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  222. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  223. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  224. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  225. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  226. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  227. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  228. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  229. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  230. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  231. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  232. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  233. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  234. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  235. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  236. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  237. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  238. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  239. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  240. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  241. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  242. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  243. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  244. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  245. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  246. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  247. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  248. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  249. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  250. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  251. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  252. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  253. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  254. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  255. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  256. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  257. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  258. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  259. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  260. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  261. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  262. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  263. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  264. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  265. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  266. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  267. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  268. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  269. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  270. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  271. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  272. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  273. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  274. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  275. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  276. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  277. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  278. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  279. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  280. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  281. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  282. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  283. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  284. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  285. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  286. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  287. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  288. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  289. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  290. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  291. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  292. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  293. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  294. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  295. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  296. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  297. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  298. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  299. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  300. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  301. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  302. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  303. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  304. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  305. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  306. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  307. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  308. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  309. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  310. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  311. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  312. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  313. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  314. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  315. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  316. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  317. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  318. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  319. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  320. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  321. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  322. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  324. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  325. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  327. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  328. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  329. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  330. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  331. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  332. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  333. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  334. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  335. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  336. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  337. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  338. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  339. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  340. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  341. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  342. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  343. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  344. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  345. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  346. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  347. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  348. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  349. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  350. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  351. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  352. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  353. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  354. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  355. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  356. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  357. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  358. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  359. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  360. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  361. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  362. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  363. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  364. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  365. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  366. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  367. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  368. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  369. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  370. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  371. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  372. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  373. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  374. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  375. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  376. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  377. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  378. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  379. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  380. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  381. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  382. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  383. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  384. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  385. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  386. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  387. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  388. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  389. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  390. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  391. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  392. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  393. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  394. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  395. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  396. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  397. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  398. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -1,13 +1,11 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import {
3
- BVH_REFIT_DEFERRED_HEADER_BYTES,
4
- bvh_refit_deferred_byte_size
5
- } from "../../gpu_primitive/bvh/BVH_REFIT_DEFERRED_LAYOUT.js";
6
- import { shader_bvh_refit_repair } from "../../gpu_primitive/bvh/shader_bvh_refit_repair.js";
7
2
  import { write_gpu_typed_buffer } from "../../shader/type/serde/write_gpu_typed_buffer.js";
8
- import { BLAS_REFIT_TARGET_STRUCT } from "./BLAS_REFIT_TARGET_STRUCT.js";
9
- import { BLAS_REFIT_BATCH_WORKGROUP_SIZE, shader_blas_refit_batch } from "./shader_blas_refit_batch.js";
10
- import { shader_blas_refit_batch_seed } from "./shader_blas_refit_batch_seed.js";
3
+ import { BLAS8_REFIT_TARGET_STRUCT } from "./BLAS8_REFIT_TARGET_STRUCT.js";
4
+ import {
5
+ BLAS8_REFIT_BATCH_WORKGROUP_SIZE,
6
+ BLAS8_REFIT_SPINE_STRIDE_WORDS,
7
+ shader_blas8_refit_batch
8
+ } from "./shader_blas8_refit_batch.js";
11
9
 
12
10
  /**
13
11
  * Initial capacity of the target table, in rows. Doubles as needed.
@@ -15,7 +13,7 @@ import { shader_blas_refit_batch_seed } from "./shader_blas_refit_batch_seed.js"
15
13
  const TARGETS_INITIAL_CAPACITY = 16;
16
14
 
17
15
  /**
18
- * Initial capacity of a workgroup lookup, in `(target_index, base)` pairs. Doubles as needed.
16
+ * Initial capacity of the workgroup lookup, in `(target_index, node_base)` pairs. Doubles as needed.
19
17
  */
20
18
  const LOOKUP_INITIAL_CAPACITY = 256;
21
19
 
@@ -28,35 +26,32 @@ const LOOKUP_PAIR_WORDS = 2;
28
26
  * Refit a set of BLAS trees every frame, as one batch: a fixed number of commands whatever the
29
27
  * number of trees, and no per-tree host work while the set and its residency hold still.
30
28
  *
31
- * The seam is the one the per-tree recorder had: an entry is an `owner` — the identity a tree
32
- * was registered under, per {@link GPUGeometryBVHManager#obtain} — and a `geometry_index`, the row
33
- * whose vertices the bounds come from. Nothing here knows what a clone is, or that skinning is why
34
- * the vertices moved; anything that deforms vertices in place can list its trees here.
29
+ * An entry is an `owner` — the identity a tree was registered under, per
30
+ * {@link GPUGeometryBVHManager#obtain} — and a `geometry_index`, the row whose vertices the boxes
31
+ * come from. Nothing here knows what a clone is, or that skinning is why the vertices moved; anything
32
+ * that deforms vertices in place can list its trees here.
35
33
  *
36
- * Three tables live on the GPU between frames. The target rows ({@link BLAS_REFIT_TARGET_STRUCT})
37
- * say where each tree sits in the manager's arenas and where its arrival counters sit in the
38
- * batch's own; the two lookups say, for every workgroup of a dispatch, which tree it serves and
39
- * which run of that tree's leaves — or, for the seeding pass, of its node slots. All three are
40
- * rebuilt from {@link GPUGeometryBVHManager#get_refit_target} when the entries change or the
41
- * manager's {@link GPUGeometryBVHManager#residency_version} moves, and not otherwise. Entries whose
42
- * tree is not resident yet are simply absent from the tables; the version moving is what brings
34
+ * Two tables live on the GPU between frames. The target rows ({@link BLAS8_REFIT_TARGET_STRUCT}) say
35
+ * where each tree sits in the manager's arena and where its part of the batch's spine starts; the
36
+ * lookup says, for every workgroup of the dispatch, which tree it serves and which run of that tree's
37
+ * nodes. Both are rebuilt from {@link GPUGeometryBVHManager#get_refit_target} when the entries change
38
+ * or the manager's {@link GPUGeometryBVHManager#residency_version} moves, and not otherwise. Entries
39
+ * whose tree is not resident yet are simply absent from the tables; the version moving is what brings
43
40
  * them in.
44
41
  *
45
- * Every frame is then: two transient buffers, the counters and the deferred list, with a clear
46
- * each; {@link shader_blas_refit_batch_seed} and then {@link shader_blas_refit_batch}, one dispatch
47
- * per page of workgroups under the device's per-dimension cap — one page for well over a hundred
48
- * characters of the playground's size; and one indirect {@link shader_bvh_refit_repair}, which runs
49
- * nothing unless a climb read a box before it arrived (R1 in GPU_BVH_BUILD_PLAN.md).
42
+ * Every frame is then one transient buffer, the spine, with its clear, and
43
+ * {@link shader_blas8_refit_batch}: one dispatch per page of workgroups under the device's
44
+ * per-dimension cap.
50
45
  *
51
46
  * `record` belongs inside {@link GPUMeshSkinningContext#update}, or somewhere with the same
52
- * guarantee: it binds the manager's arena buffers as they are at that moment, and those buffers are
53
- * replaced — the old ones destroyed — when an arena grows in {@link GPUGeometryBVHManager#update}.
47
+ * guarantee: it binds the manager's arena buffer as it is at that moment, and that buffer is
48
+ * replaced — the old one destroyed — when the arena grows in {@link GPUGeometryBVHManager#update}.
54
49
  * That runs before the frame's command context exists, so a refit recorded inside the frame is safe
55
50
  * by call order. A refit recorded across one of those updates would submit a destroyed buffer, and
56
51
  * the software device cannot catch it, since it executes nothing at submit.
57
52
  */
58
- export class GPUBLASRefitBatch {
59
-
53
+ export class GPUBLASRefitBatch {
54
+
60
55
  /** @type {GPUDevice} */
61
56
  #device;
62
57
 
@@ -92,22 +87,20 @@ export class GPUBLASRefitBatch {
92
87
  #targets_capacity = 0;
93
88
 
94
89
  /**
95
- * The refit's workgroup lookup: a `(target_index, leaf_base)` pair per workgroup.
90
+ * A `(target_index, node_base)` pair per workgroup.
96
91
  *
97
- * @type {{buffer: GPUBuffer|null, capacity: number, label: string}}
92
+ * @type {GPUBuffer|null}
98
93
  */
99
- #leaf_runs = { buffer: null, capacity: 0, label: 'GPUBLASRefitBatch/Lookup' };
94
+ #lookup_buffer = null;
100
95
 
101
96
  /**
102
- * The seeding pass's workgroup lookup: a `(target_index, slot_base)` pair per workgroup, over
103
- * every node slot of every tree.
104
- *
105
- * @type {{buffer: GPUBuffer|null, capacity: number, label: string}}
97
+ * Capacity of {@link #lookup_buffer}, in pairs.
98
+ * @type {number}
106
99
  */
107
- #slot_runs = { buffer: null, capacity: 0, label: 'GPUBLASRefitBatch/SlotLookup' };
100
+ #lookup_capacity = 0;
108
101
 
109
102
  /**
110
- * Workgroups the batch dispatches, across every page: one per aligned run of leaves of every
103
+ * Workgroups the batch dispatches, across every page: one per aligned run of nodes of every
111
104
  * resident tree. Zero means there is nothing to record.
112
105
  *
113
106
  * @type {number}
@@ -115,26 +108,11 @@ export class GPUBLASRefitBatch {
115
108
  #workgroup_count = 0;
116
109
 
117
110
  /**
118
- * Workgroups the seeding pass dispatches, across every page: one per aligned run of node slots of
119
- * every resident tree.
120
- *
121
- * @type {number}
122
- */
123
- #slot_workgroup_count = 0;
124
-
125
- /**
126
- * Words of arrival counters the batch needs: the sum of every resident tree's node slots.
127
- *
128
- * @type {number}
129
- */
130
- #counter_words = 0;
131
-
132
- /**
133
- * Internal nodes across every resident tree: the most the climbs can defer.
111
+ * Nodes across every resident tree: what the spine has to hold a box for.
134
112
  *
135
113
  * @type {number}
136
114
  */
137
- #internal_node_count = 0;
115
+ #node_count = 0;
138
116
 
139
117
  /**
140
118
  * @param {GPUDevice} device
@@ -149,7 +127,7 @@ export class GPUBLASRefitBatch {
149
127
  * The set of trees to refit from now on. Replaces the previous set; the tables are rebuilt on the
150
128
  * next {@link record}.
151
129
  *
152
- * An owner may appear once: two rows for one tree would be two climbs racing on its nodes.
130
+ * An owner may appear once: two rows for one tree would be two sets of lanes writing its nodes.
153
131
  *
154
132
  * @param {{owner: object, geometry_index: number}[]} entries
155
133
  */
@@ -176,8 +154,8 @@ export class GPUBLASRefitBatch {
176
154
  *
177
155
  * @param {ShadeGPUCommandContext} cmd
178
156
  * @param {Object} options
179
- * @param {GPUGeometryBVHManager} options.blas tree residency — arenas for nodes, parents and leaf lists
180
- * @param {GPUGeometryManager} options.geometries geometry metadata table the leaf boxes read vertices through
157
+ * @param {GPUGeometryBVHManager} options.blas tree residency — the node arena
158
+ * @param {GPUGeometryManager} options.geometries geometry metadata table the boxes read vertices through
181
159
  * @returns {boolean} whether anything was recorded
182
160
  */
183
161
  record(cmd, { blas, geometries }) {
@@ -195,61 +173,32 @@ export class GPUBLASRefitBatch {
195
173
  return false;
196
174
  }
197
175
 
198
- // One counter per node slot of every tree, and every one of them has to start at zero: a
199
- // leftover count lets a first arrival believe it is a second and fit a node from a sibling
200
- // nothing has written yet. The transient allocator pools its buffers, so whatever comes
201
- // back is carrying the last frame's counts and gets cleared — once, for the whole batch.
202
- const counters_size = this.#counter_words * Uint32Array.BYTES_PER_ELEMENT;
203
-
204
- const counters = cmd.allocateTransientBuffer(GPUBufferUsage.STORAGE, counters_size);
176
+ // A box per node of every tree, and every word of it has to start at zero, which reads "not
177
+ // here yet": a leftover word would be taken for a box nothing has found this frame. The
178
+ // transient allocator pools its buffers, so whatever comes back is carrying an earlier
179
+ // frame's boxes and gets cleared — once, for the whole batch.
180
+ const spine_size = this.#node_count * BLAS8_REFIT_SPINE_STRIDE_WORDS * Uint32Array.BYTES_PER_ELEMENT;
205
181
 
206
- cmd.clearBuffer(counters, 0, counters_size);
182
+ const spine = cmd.allocateTransientBuffer(GPUBufferUsage.STORAGE, spine_size);
207
183
 
208
- // What the climbs defer, with the repair's dispatch command in its first words. Only the
209
- // header has to start at zero, for the reason the counters do.
210
- const deferred = cmd.allocateTransientBuffer(
211
- GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT,
212
- bvh_refit_deferred_byte_size(this.#internal_node_count)
213
- );
214
-
215
- cmd.clearBuffer(deferred, 0, BVH_REFIT_DEFERRED_HEADER_BYTES);
184
+ cmd.clearBuffer(spine, 0, spine_size);
216
185
 
217
186
  const meshlets = geometries.meshlets;
218
187
 
219
- // The arena buffers are read off the manager here and now, every frame: they are replaced
220
- // when an arena grows, and only their contents' offsets are stable.
188
+ // The arena buffer is read off the manager here and now, every frame: it is replaced when
189
+ // the arena grows, and only its contents' offsets are stable.
221
190
  const page = this.#device.limits.maxComputeWorkgroupsPerDimension;
222
191
 
223
- // Every bound word the climbs will read, seeded a dispatch ahead of them, so a box that has
224
- // not reached its reader is one the reader can see is missing.
225
- const slot_workgroup_count = this.#slot_workgroup_count;
226
-
227
- for (let offset = 0; offset < slot_workgroup_count; offset += page) {
228
- shader_blas_refit_batch_seed.dispatch({
229
- encoder: cmd,
230
- group_count_x: Math.min(page, slot_workgroup_count - offset),
231
- bindings: {
232
- dispatch_offset: offset,
233
- targets: this.#targets_buffer,
234
- lookup: this.#slot_runs.buffer,
235
- nodes: blas.buffer_data,
236
- },
237
- });
238
- }
239
-
240
192
  for (let offset = 0; offset < workgroup_count; offset += page) {
241
- shader_blas_refit_batch.dispatch({
193
+ shader_blas8_refit_batch.dispatch({
242
194
  encoder: cmd,
243
195
  group_count_x: Math.min(page, workgroup_count - offset),
244
196
  bindings: {
245
197
  dispatch_offset: offset,
246
198
  targets: this.#targets_buffer,
247
- lookup: this.#leaf_runs.buffer,
248
- leaf_nodes: blas.buffer_leaf_nodes,
249
- parents: blas.buffer_parents,
250
- counters,
199
+ lookup: this.#lookup_buffer,
251
200
  nodes: blas.buffer_data,
252
- refit_deferred: deferred,
201
+ spine,
253
202
  geometries: geometries.buffer_metadata,
254
203
  meshlet_metadata: meshlets.buffer_metadata,
255
204
  meshlet_data: meshlets.buffer_data,
@@ -257,16 +206,6 @@ export class GPUBLASRefitBatch {
257
206
  });
258
207
  }
259
208
 
260
- shader_bvh_refit_repair.dispatchIndirect({
261
- encoder: cmd,
262
- command: deferred,
263
- bindings: {
264
- parents: blas.buffer_parents,
265
- refit_deferred: deferred,
266
- nodes: blas.buffer_data,
267
- },
268
- });
269
-
270
209
  return true;
271
210
  }
272
211
 
@@ -278,45 +217,35 @@ export class GPUBLASRefitBatch {
278
217
  #resolve(blas) {
279
218
  const rows = [];
280
219
 
281
- let counter_words = 0;
220
+ let node_count = 0;
282
221
  let workgroup_count = 0;
283
- let slot_workgroup_count = 0;
284
- let internal_node_count = 0;
285
222
 
286
223
  for (const entry of this.#entries) {
287
224
  const target = blas.get_refit_target(entry.owner);
288
225
 
289
- if (target === undefined || target.leaf_count === 0) {
226
+ if (target === undefined || target.node_count === 0) {
290
227
  // not resident yet, or nothing to fit; the version moving is what brings it in
291
228
  continue;
292
229
  }
293
230
 
294
231
  rows.push({
295
- node_word_offset: target.node_word_offset,
296
- parents_offset: target.parents_offset,
297
- leaf_nodes_offset: target.leaf_nodes_offset,
298
- leaf_count: target.leaf_count,
232
+ node_offset: target.node_offset,
299
233
  node_count: target.node_count,
300
- counters_offset: counter_words,
234
+ spine_offset: node_count,
301
235
  geometry_index: entry.geometry_index,
302
236
  });
303
237
 
304
- counter_words += target.node_count;
305
- workgroup_count += Math.ceil(target.leaf_count / BLAS_REFIT_BATCH_WORKGROUP_SIZE);
306
- slot_workgroup_count += Math.ceil(target.node_count / BLAS_REFIT_BATCH_WORKGROUP_SIZE);
307
- internal_node_count += target.leaf_count - 1;
238
+ node_count += target.node_count;
239
+ workgroup_count += Math.ceil(target.node_count / BLAS8_REFIT_BATCH_WORKGROUP_SIZE);
308
240
  }
309
241
 
310
242
  if (rows.length > 0) {
311
243
  this.#upload_targets(rows);
312
- this.#upload_runs(this.#leaf_runs, rows, row => row.leaf_count, workgroup_count);
313
- this.#upload_runs(this.#slot_runs, rows, row => row.node_count, slot_workgroup_count);
244
+ this.#upload_lookup(rows, workgroup_count);
314
245
  }
315
246
 
316
247
  this.#workgroup_count = workgroup_count;
317
- this.#slot_workgroup_count = slot_workgroup_count;
318
- this.#counter_words = counter_words;
319
- this.#internal_node_count = internal_node_count;
248
+ this.#node_count = node_count;
320
249
 
321
250
  this.#entries_dirty = false;
322
251
  this.#resolved_version = blas.residency_version;
@@ -326,45 +255,42 @@ export class GPUBLASRefitBatch {
326
255
  * @param {object[]} rows
327
256
  */
328
257
  #upload_targets(rows) {
329
- const stride = BLAS_REFIT_TARGET_STRUCT.aligned_size;
258
+ const stride = BLAS8_REFIT_TARGET_STRUCT.aligned_size;
330
259
 
331
260
  this.#ensure_targets_capacity(rows.length);
332
261
 
333
262
  const data = new ArrayBuffer(rows.length * stride);
334
263
 
335
264
  for (let i = 0; i < rows.length; i++) {
336
- write_gpu_typed_buffer(rows[i], BLAS_REFIT_TARGET_STRUCT, data, i * stride);
265
+ write_gpu_typed_buffer(rows[i], BLAS8_REFIT_TARGET_STRUCT, data, i * stride);
337
266
  }
338
267
 
339
268
  this.#device.queue.writeBuffer(this.#targets_buffer, 0, data);
340
269
  }
341
270
 
342
271
  /**
343
- * One `(target_index, base)` pair per workgroup: tree by tree, run by run of whatever
344
- * `count_of` counts in it — its leaves for the refit, its node slots for the seeding pass.
272
+ * One `(target_index, node_base)` pair per workgroup: tree by tree, run by run of its nodes.
345
273
  *
346
- * @param {{buffer: GPUBuffer|null, capacity: number, label: string}} runs
347
274
  * @param {object[]} rows
348
- * @param {function(object): number} count_of
349
275
  * @param {number} workgroup_count
350
276
  */
351
- #upload_runs(runs, rows, count_of, workgroup_count) {
352
- this.#ensure_runs_capacity(runs, workgroup_count);
277
+ #upload_lookup(rows, workgroup_count) {
278
+ this.#ensure_lookup_capacity(workgroup_count);
353
279
 
354
280
  const pairs = new Uint32Array(workgroup_count * LOOKUP_PAIR_WORDS);
355
281
 
356
282
  let cursor = 0;
357
283
 
358
284
  for (let target_index = 0; target_index < rows.length; target_index++) {
359
- const count = count_of(rows[target_index]);
285
+ const count = rows[target_index].node_count;
360
286
 
361
- for (let base = 0; base < count; base += BLAS_REFIT_BATCH_WORKGROUP_SIZE) {
287
+ for (let base = 0; base < count; base += BLAS8_REFIT_BATCH_WORKGROUP_SIZE) {
362
288
  pairs[cursor++] = target_index;
363
289
  pairs[cursor++] = base;
364
290
  }
365
291
  }
366
292
 
367
- this.#device.queue.writeBuffer(runs.buffer, 0, pairs);
293
+ this.#device.queue.writeBuffer(this.#lookup_buffer, 0, pairs);
368
294
  }
369
295
 
370
296
  /**
@@ -387,7 +313,7 @@ export class GPUBLASRefitBatch {
387
313
 
388
314
  this.#targets_buffer = this.#device.createBuffer({
389
315
  label: 'GPUBLASRefitBatch/Targets',
390
- size: capacity * BLAS_REFIT_TARGET_STRUCT.aligned_size,
316
+ size: capacity * BLAS8_REFIT_TARGET_STRUCT.aligned_size,
391
317
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
392
318
  });
393
319
 
@@ -395,31 +321,30 @@ export class GPUBLASRefitBatch {
395
321
  }
396
322
 
397
323
  /**
398
- * @param {{buffer: GPUBuffer|null, capacity: number, label: string}} runs
399
324
  * @param {number} pairs
400
325
  */
401
- #ensure_runs_capacity(runs, pairs) {
402
- if (runs.buffer !== null && pairs <= runs.capacity) {
326
+ #ensure_lookup_capacity(pairs) {
327
+ if (this.#lookup_buffer !== null && pairs <= this.#lookup_capacity) {
403
328
  return;
404
329
  }
405
330
 
406
- let capacity = Math.max(runs.capacity, LOOKUP_INITIAL_CAPACITY);
331
+ let capacity = Math.max(this.#lookup_capacity, LOOKUP_INITIAL_CAPACITY);
407
332
 
408
333
  while (capacity < pairs) {
409
334
  capacity *= 2;
410
335
  }
411
336
 
412
- if (runs.buffer !== null) {
413
- runs.buffer.destroy();
337
+ if (this.#lookup_buffer !== null) {
338
+ this.#lookup_buffer.destroy();
414
339
  }
415
340
 
416
- runs.buffer = this.#device.createBuffer({
417
- label: runs.label,
341
+ this.#lookup_buffer = this.#device.createBuffer({
342
+ label: 'GPUBLASRefitBatch/Lookup',
418
343
  size: capacity * LOOKUP_PAIR_WORDS * Uint32Array.BYTES_PER_ELEMENT,
419
344
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
420
345
  });
421
346
 
422
- runs.capacity = capacity;
347
+ this.#lookup_capacity = capacity;
423
348
  }
424
349
 
425
350
  destroy() {
@@ -428,20 +353,15 @@ export class GPUBLASRefitBatch {
428
353
  this.#targets_buffer = null;
429
354
  }
430
355
 
431
- for (const runs of [this.#leaf_runs, this.#slot_runs]) {
432
- if (runs.buffer !== null) {
433
- runs.buffer.destroy();
434
- runs.buffer = null;
435
- }
436
-
437
- runs.capacity = 0;
356
+ if (this.#lookup_buffer !== null) {
357
+ this.#lookup_buffer.destroy();
358
+ this.#lookup_buffer = null;
438
359
  }
439
360
 
440
361
  this.#targets_capacity = 0;
362
+ this.#lookup_capacity = 0;
441
363
  this.#workgroup_count = 0;
442
- this.#slot_workgroup_count = 0;
443
- this.#counter_words = 0;
444
- this.#internal_node_count = 0;
364
+ this.#node_count = 0;
445
365
  this.#entries_dirty = true;
446
366
  }
447
367
  }
@@ -12,12 +12,11 @@ export const BLAS_METADATA_STRUCT: WebGPUStruct;
12
12
  /**
13
13
  * Arena node index of the empty tree: what the lookup names for a geometry that has no tree yet.
14
14
  *
15
- * One internal node whose box is +inf below and -inf above. No ray enters it, so the ray queries
16
- * pop it and miss; no point is within any distance of it, so the point queries prune it; and it is
17
- * internal, so nothing ever fetches a triangle for it. Its children are itself, and are never
18
- * descended into. Every traversal reads `blas_lookup[geometry_index]` and starts walking without a
19
- * null check, so "no tree" has to be a tree — and it must not be whatever tree happens to sit at
20
- * the arena's end, which is what a record resident over zero bytes used to point at.
15
+ * One node with every slot empty, which is a node of zeroes: no slot holds a triangle or a child, so
16
+ * a query finds nothing in it and has nowhere to go from it. Every traversal reads
17
+ * `blas_lookup[geometry_index]` and starts walking without a null check, so "no tree" has to be a
18
+ * tree — and it must not be whatever tree happens to sit at the arena's end, which is what a record
19
+ * resident over zero bytes used to point at.
21
20
  *
22
21
  * @type {number}
23
22
  */
@@ -53,14 +52,6 @@ export class GPUGeometryBVHManager {
53
52
  * @returns {GPUBuffer}
54
53
  */
55
54
  get buffer_data(): GPUBuffer;
56
- /**
57
- * @returns {GPUBuffer}
58
- */
59
- get buffer_parents(): GPUBuffer;
60
- /**
61
- * @returns {GPUBuffer}
62
- */
63
- get buffer_leaf_nodes(): GPUBuffer;
64
55
  /**
65
56
  * @returns {number}
66
57
  */
@@ -76,48 +67,40 @@ export class GPUGeometryBVHManager {
76
67
  * Bytes of the node arena that trees actually occupy: its capacity, less every region
77
68
  * {@link #allocator} still holds free.
78
69
  *
79
- * Beside {@link gpu_memory_usage}, which is what the arenas cost whether or not anything is
80
- * in them. The gap between the two is what a released tree gives back and what the next tree
70
+ * Beside {@link gpu_memory_usage}, which is what the arena and the lookup cost whether or not
71
+ * anything is in them. The gap between the two is what a released tree gives back and what the next tree
81
72
  * of that size takes, so it is the one worth watching.
82
73
  *
83
74
  * @returns {number} in bytes
84
75
  */
85
76
  get gpu_memory_usage_occupied(): number;
86
77
  /**
87
- * The tree belonging to `owner`, registered against `source`'s shape if it does not exist yet.
78
+ * The tree belonging to `owner`, registered as a copy of `source`'s if it does not exist yet.
88
79
  *
89
80
  * Two arguments rather than one because those are two different questions. `owner` is the
90
81
  * identity the tree is looked up by; `source` is the geometry whose nodes it starts as. They
91
82
  * coincide for anything that owns its geometry outright, and they do not for a per-instance
92
- * copy — a skinned clone deforms its own vertices, so its bounds are its own and cannot be
93
- * written into the tree everyone else is tracing, but its *shape* is by definition the
94
- * source's. Keeping the two separate is what lets one derivation serve every copy.
83
+ * copy — a skinned clone deforms its own vertices, so its boxes are its own and cannot be
84
+ * written into the tree everyone else is tracing.
95
85
  *
96
86
  * @param {object} owner identity to look this tree up by — a geometry, a clone's metadata row
97
- * @param {MeshletGeometry} source geometry whose nodes this tree takes its shape and rest-pose
98
- * bounds from
87
+ * @param {MeshletGeometry} source geometry whose nodes this tree starts as
99
88
  * @returns {GPUGeometryMeshletsBVH}
100
89
  */
101
90
  obtain(owner: object, source: MeshletGeometry): GPUGeometryMeshletsBVH;
102
91
  /**
103
92
  * Everything a refit needs to find a resident tree, or `undefined` while it is not resident.
104
93
  *
105
- * "Resident" means the owner's nodes and its shape are both in their arenas, and that they are
106
- * the same tree. A record snapshots its geometry's bytes when it is registered, and a geometry
107
- * registered before its tree exists is uploaded as nothing — resident over zero bytes, at the
108
- * arena's end. Its shape is derived later, from the bytes as they are then. Answering with that
109
- * shape's counts at that record's address would hand a refit whichever tree was appended next,
110
- * so the answer is withheld until the nodes actually uploaded are the tree the shape describes.
94
+ * The count is of the nodes that were uploaded, not of the geometry's tree as it is now: a
95
+ * refit writes exactly the region the record holds.
111
96
  *
112
97
  * @param {object} owner the identity passed to {@link obtain}
113
- * @returns {{node_word_offset: number, node_count: number, leaf_count: number, parents_offset: number, leaf_nodes_offset: number}|undefined}
98
+ * @returns {{node_offset: number, node_count: number}|undefined} the arena node the tree's root
99
+ * sits at, and the nodes in the tree
114
100
  */
115
101
  get_refit_target(owner: object): {
116
- node_word_offset: number;
102
+ node_offset: number;
117
103
  node_count: number;
118
- leaf_count: number;
119
- parents_offset: number;
120
- leaf_nodes_offset: number;
121
104
  } | undefined;
122
105
  /**
123
106
  * Where a registered tree's root sits in the arena, or `undefined` while nothing is resident
@@ -152,16 +135,12 @@ export class GPUGeometryBVHManager {
152
135
  */
153
136
  remove(owner: object): boolean;
154
137
  /**
155
- * Bring the arenas up to date with everything registered since the last call, and move the
138
+ * Bring the arena up to date with everything registered since the last call, and move the
156
139
  * residency version if anything a refit reads has changed.
157
- *
158
- * Shapes first, and as their own question: they are not behind the node queue, so a frame in
159
- * which a shape arrives for an already-uploaded record still uploads it — and still moves the
160
- * version, because that record's refit answer has changed all the same.
161
140
  */
162
141
  update(): void;
163
142
  /**
164
- * Release the arena and its tables. For the geometry manager's own teardown: nothing is
143
+ * Release the arena and the lookup. For the geometry manager's own teardown: nothing is
165
144
  * obtained, uploaded or traced afterwards. Safe to call twice.
166
145
  */
167
146
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUGeometryBVHManager.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js"],"names":[],"mappings":"AAkBA;;;GAGG;AAEH;;;;;GAKG;AACH,gDAGG;AAEH;;;;;;;;;;;GAWG;AACH,sCAFU,MAAM,CAEyB;AA0CzC;;;;;;;;;;;;;;GAcG;AACH;IA8JI;;;OAGG;IACH,+BAoDC;IA9MD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,6BAEC;IAuCD;;OAEG;IACH,gCAEC;IAOD;;OAEG;IACH,mCAEC;IAmDD;;OAEG;IACH,gCAEC;IA6ED;;;;OAIG;IACH,iCAEC;IAED,+BAoBC;IAED;;;;;;;;;OASG;IACH,wCAIC;IAED;;;;;;;;;;;;;;OAcG;IACH,cALW,MAAM,UACN,eAAe,GAEb,sBAAsB,CAalC;IA8DD;;;;;;;;;;;;OAYG;IACH,wBAHW,MAAM,GACJ;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAC,GAAC,SAAS,CAqB3I;IAED;;;;;;OAMG;IACH,mBAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAU5B;IAED;;;;;;;;;OASG;IACH,0BAFW,WAAW,QAQrB;IAED;;;;;;;;;;;OAWG;IACH,cAHW,MAAM,GACJ,OAAO,CA8BnB;IA8RD;;;;;;;OAOG;IACH,eAOC;IAmJD;;;OAGG;IACH,gBAKC;;CACJ;8BA1+BY,OAAO,uBAAuB,EAAE,eAAe;yBAC/C,OAAO,sDAAsD,EAAE,UAAU;6BAbzD,mCAAmC;uCASzB,6BAA6B"}
1
+ {"version":3,"file":"GPUGeometryBVHManager.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js"],"names":[],"mappings":"AAYA;;;GAGG;AAEH;;;;;GAKG;AACH,gDAGG;AAEH;;;;;;;;;;GAUG;AACH,sCAFU,MAAM,CAEyB;AAmCzC;;;;;;;;;;;;;;GAcG;AACH;IAgGI;;;OAGG;IACH,+BAgCC;IA5HD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,6BAEC;IA6CD;;OAEG;IACH,gCAEC;IAyDD;;;;OAIG;IACH,iCAEC;IAED,+BAYC;IAED;;;;;;;;;OASG;IACH,wCAIC;IAED;;;;;;;;;;;;OAYG;IACH,cAJW,MAAM,UACN,eAAe,GACb,sBAAsB,CAalC;IA6BD;;;;;;;;;OASG;IACH,wBAJW,MAAM,GACJ;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,GAAC,SAAS,CAc/D;IAED;;;;;;OAMG;IACH,mBAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAU5B;IAED;;;;;;;;;OASG;IACH,0BAFW,WAAW,QAQrB;IAED;;;;;;;;;;;OAWG;IACH,cAHW,MAAM,GACJ,OAAO,CA4BnB;IAwFD;;;OAGG;IACH,eAIC;IAmJD;;;OAGG;IACH,gBAGC;;CACJ;8BAzoBY,OAAO,uBAAuB,EAAE,eAAe;yBAC/C,OAAO,sDAAsD,EAAE,UAAU;6BAPzD,mCAAmC;uCAGzB,6BAA6B"}