@woosh/meep-engine 3.61.1 → 3.61.3

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 (474) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/package.json +1 -1
  3. package/src/engine/network/sim/SimActionExecutor.d.ts +4 -0
  4. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  5. package/src/engine/network/sim/SimActionExecutor.js +4 -0
  6. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  7. package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -1
  8. package/src/generation/foliage/material/foliage_atlas_cutout.js +21 -5
  9. package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -0
  10. package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
  11. package/src/generation/foliage/mesh/tree_cluster_representatives.js +178 -78
  12. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  13. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +178 -97
  14. package/src/generation/foliage/skeleton/ShootLightField.d.ts +1 -0
  15. package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -1
  16. package/src/generation/foliage/skeleton/ShootLightField.js +88 -17
  17. package/src/generation/foliage/skeleton/ShootWoodHash.d.ts +5 -2
  18. package/src/generation/foliage/skeleton/ShootWoodHash.d.ts.map +1 -1
  19. package/src/generation/foliage/skeleton/ShootWoodHash.js +191 -25
  20. package/src/shade/playground/probe_clipmap/README.md +3 -4
  21. package/src/shade/playground/probe_clipmap/index.html +5 -13
  22. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  23. package/src/shade/playground/probe_clipmap/main.js +4 -5
  24. package/src/shade/playground/probe_clipmap_box/README.md +55 -0
  25. package/src/shade/playground/probe_clipmap_box/index.html +185 -0
  26. package/src/shade/playground/probe_clipmap_box/main.d.ts +8 -0
  27. package/src/shade/playground/probe_clipmap_box/main.d.ts.map +1 -0
  28. package/src/shade/playground/probe_clipmap_box/main.js +323 -0
  29. package/src/shade/playground/probe_clipmap_box/scene.d.ts +93 -0
  30. package/src/shade/playground/probe_clipmap_box/scene.d.ts.map +1 -0
  31. package/src/shade/playground/probe_clipmap_box/scene.js +256 -0
  32. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  33. package/src/shade/renderer/Renderer.js +56 -12
  34. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  35. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  36. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  37. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  38. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  39. package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts +10 -0
  40. package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts.map +1 -0
  41. package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.js +54 -0
  42. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +85 -36
  43. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  44. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +813 -412
  45. package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts +7 -0
  46. package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts.map +1 -1
  47. package/src/shade/renderer/geometry/sdf/MESH_SDF.js +8 -0
  48. package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts +14 -0
  49. package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts.map +1 -0
  50. package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.js +35 -0
  51. package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts.map +1 -1
  52. package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js +0 -4
  53. package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts +55 -10
  54. package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts.map +1 -1
  55. package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js +86 -16
  56. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts +2 -2
  57. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts.map +1 -1
  58. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js +28 -2
  59. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts +54 -0
  60. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts.map +1 -0
  61. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.js +146 -0
  62. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts +1 -1
  63. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  64. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +2 -1
  65. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts +18 -0
  66. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts.map +1 -0
  67. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.js +66 -0
  68. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts +17 -0
  69. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts.map +1 -0
  70. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.js +66 -0
  71. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts +5 -3
  72. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  73. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +15 -14
  74. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts +2 -1
  75. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts.map +1 -1
  76. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.js +12 -3
  77. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts +21 -0
  78. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts.map +1 -0
  79. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.js +84 -0
  80. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts +53 -0
  81. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts.map +1 -0
  82. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.js +343 -0
  83. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts +3 -3
  84. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts.map +1 -1
  85. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js +9 -5
  86. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts +2 -2
  87. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js +3 -2
  89. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts +69 -0
  90. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts.map +1 -0
  91. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.js +294 -0
  92. package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts +16 -0
  93. package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts.map +1 -0
  94. package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.js +36 -0
  95. package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts +126 -0
  96. package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts.map +1 -0
  97. package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.js +148 -0
  98. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts +10 -0
  99. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts.map +1 -0
  100. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.js +140 -0
  101. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts +8 -0
  102. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts.map +1 -0
  103. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.js +76 -0
  104. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts +9 -0
  105. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts.map +1 -1
  106. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js +23 -0
  107. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts +13 -0
  108. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts.map +1 -0
  109. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.js +23 -0
  110. package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts +262 -0
  111. package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts.map +1 -0
  112. package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.js +1819 -0
  113. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts +118 -0
  114. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts.map +1 -0
  115. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.js +204 -0
  116. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts +66 -0
  117. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts.map +1 -0
  118. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.js +103 -0
  119. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts +19 -0
  120. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts.map +1 -0
  121. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.js +23 -0
  122. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts +15 -0
  123. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts.map +1 -0
  124. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.js +70 -0
  125. package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts +13 -0
  126. package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts.map +1 -0
  127. package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.js +35 -0
  128. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts +32 -0
  129. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts.map +1 -0
  130. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.js +111 -0
  131. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts +17 -0
  132. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts.map +1 -0
  133. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.js +49 -0
  134. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts +13 -0
  135. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts.map +1 -0
  136. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.js +35 -0
  137. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts +24 -0
  138. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts.map +1 -0
  139. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.js +169 -0
  140. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts +19 -0
  141. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts.map +1 -0
  142. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.js +49 -0
  143. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts +19 -0
  144. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts.map +1 -0
  145. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.js +67 -0
  146. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts +78 -0
  147. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts.map +1 -0
  148. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.js +320 -0
  149. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts +15 -0
  150. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts.map +1 -0
  151. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.js +48 -0
  152. package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts +51 -0
  153. package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts.map +1 -0
  154. package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.js +109 -0
  155. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts +11 -0
  156. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts.map +1 -0
  157. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.js +51 -0
  158. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts +26 -0
  159. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts.map +1 -0
  160. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.js +453 -0
  161. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts +12 -0
  162. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts.map +1 -0
  163. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.js +99 -0
  164. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts +22 -0
  165. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts.map +1 -0
  166. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.js +140 -0
  167. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts +32 -0
  168. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +261 -0
  170. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +2 -2
  171. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +2 -2
  172. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +6 -6
  173. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +7 -7
  174. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_decode.d.ts +12 -0
  175. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_decode.d.ts.map +1 -1
  176. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_decode.js +49 -24
  177. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_encode.d.ts +12 -0
  178. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_encode.d.ts.map +1 -1
  179. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_encode.js +50 -19
  180. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_sh3_compress.d.ts.map +1 -1
  181. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_sh3_compress.js +6 -2
  182. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -8
  183. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  184. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +89 -20
  185. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +26 -19
  186. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  187. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +226 -148
  188. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +25 -52
  189. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  190. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +29 -69
  191. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +19 -16
  192. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  193. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +24 -21
  194. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +46 -22
  195. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  196. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +49 -36
  197. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +3 -2
  198. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  199. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +7 -6
  200. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +8 -22
  201. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  202. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +15 -51
  203. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +1 -6
  204. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  205. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +6 -13
  206. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
  207. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +0 -2
  208. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +4 -4
  209. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -1
  210. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +9 -34
  211. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +4 -6
  212. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -1
  213. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +15 -39
  214. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts +1 -1
  215. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js +1 -1
  216. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts +1 -2
  217. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
  218. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +2 -6
  219. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts +2 -2
  220. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
  221. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +5 -2
  222. package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts +5 -1
  223. package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js +16 -2
  224. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts +45 -0
  225. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts.map +1 -0
  226. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js +208 -0
  227. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts +24 -0
  228. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts.map +1 -0
  229. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.js +40 -0
  230. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts +34 -0
  231. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts.map +1 -0
  232. package/src/shade/renderer/global_illumination/probe_clipmap/debug/{graph_probe_clipmap_debug_mesh_cards.js → graph_probe_clipmap_debug_mesh_surfaces.js} +38 -57
  233. package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts +61 -0
  234. package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts.map +1 -0
  235. package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js +193 -0
  236. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts +67 -0
  237. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts.map +1 -0
  238. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js +142 -0
  239. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts +32 -0
  240. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts.map +1 -0
  241. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.js +70 -0
  242. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts +30 -0
  243. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts.map +1 -0
  244. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.js +71 -0
  245. package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts +26 -0
  246. package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts.map +1 -0
  247. package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js +176 -0
  248. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +23 -12
  249. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  250. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +72 -52
  251. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +32 -0
  252. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  253. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +37 -0
  254. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts +10 -0
  255. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts.map +1 -0
  256. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.js +11 -0
  257. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts +11 -0
  258. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts.map +1 -0
  259. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.js +15 -0
  260. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +55 -23
  261. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  262. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +134 -69
  263. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts +43 -0
  264. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts.map +1 -0
  265. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.js +138 -0
  266. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts +21 -0
  267. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts.map +1 -0
  268. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.js +49 -0
  269. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +4 -3
  270. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
  271. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +19 -24
  272. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +2 -2
  273. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  274. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +14 -19
  275. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts +22 -0
  276. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts.map +1 -0
  277. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.js +50 -0
  278. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +4 -4
  279. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -1
  280. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +8 -8
  281. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +1 -1
  282. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  283. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +8 -4
  284. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +1 -1
  285. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +5 -4
  286. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts.map +1 -1
  287. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +18 -23
  288. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts +1 -1
  289. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts.map +1 -1
  290. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.js +4 -2
  291. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -1
  292. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +4 -6
  293. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +2 -0
  294. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -1
  295. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +9 -8
  296. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +1 -1
  297. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +2 -2
  298. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +4 -3
  299. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  300. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +14 -13
  301. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +7 -4
  302. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  303. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +30 -26
  304. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +6 -6
  305. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  306. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +19 -21
  307. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
  308. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +6 -2
  309. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +2 -2
  310. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +6 -6
  311. package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts +14 -0
  312. package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts.map +1 -0
  313. package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.js +22 -0
  314. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts +37 -0
  315. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts.map +1 -0
  316. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.js +122 -0
  317. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.d.ts.map +1 -1
  318. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.js +1 -11
  319. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +8 -0
  320. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
  321. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +6 -4
  322. package/src/shade/renderer/light/environment/shader_downsample_environment_map.d.ts.map +1 -1
  323. package/src/shade/renderer/light/environment/shader_downsample_environment_map.js +5 -1
  324. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  325. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +1 -1
  326. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  327. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +2 -18
  328. package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts +17 -0
  329. package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts.map +1 -0
  330. package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.js +16 -0
  331. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +1 -1
  332. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +1 -1
  333. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +1 -1
  334. package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts +20 -0
  335. package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts.map +1 -0
  336. package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.js +65 -0
  337. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +26 -8
  338. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  339. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +170 -142
  340. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  341. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +1 -1
  342. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -1
  343. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +5 -8
  344. package/src/shade/renderer/scene/GPUSceneContext.d.ts +1 -1
  345. package/src/shade/renderer/scene/GPUSceneContext.js +1 -1
  346. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +15 -4
  347. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -1
  348. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +33 -7
  349. package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts +12 -0
  350. package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts.map +1 -0
  351. package/src/shade/renderer/shader/chunk/material/albedo_compress.js +26 -0
  352. package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts +16 -0
  353. package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts.map +1 -0
  354. package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.js +22 -0
  355. package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts +15 -0
  356. package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts.map +1 -0
  357. package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.js +23 -0
  358. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts +16 -0
  359. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts.map +1 -0
  360. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.js +25 -0
  361. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts +25 -0
  362. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts.map +1 -0
  363. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.js +36 -0
  364. package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts +11 -0
  365. package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts.map +1 -0
  366. package/src/shade/renderer/shader/chunk/material/metal_rough_compress.js +38 -0
  367. package/src/shade/renderer/shader/chunk/noise/chunk_sobol_sample_vec2.d.ts +40 -0
  368. package/src/shade/renderer/shader/chunk/noise/chunk_sobol_sample_vec2.d.ts.map +1 -0
  369. package/src/shade/renderer/shader/chunk/noise/chunk_sobol_sample_vec2.js +75 -0
  370. package/src/shade/renderer/shader/chunk/noise/chunk_vdc_radical_inverse.d.ts.map +1 -1
  371. package/src/shade/renderer/shader/chunk/noise/chunk_vdc_radical_inverse.js +3 -1
  372. package/src/shade/renderer/shader/chunk/random/chunk_hash_lk.d.ts +28 -0
  373. package/src/shade/renderer/shader/chunk/random/chunk_hash_lk.d.ts.map +1 -0
  374. package/src/shade/renderer/shader/chunk/random/chunk_hash_lk.js +41 -0
  375. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.d.ts +12 -0
  376. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.d.ts.map +1 -0
  377. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.js +24 -0
  378. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts +20 -0
  379. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts.map +1 -0
  380. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.js +35 -0
  381. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts +28 -0
  382. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts.map +1 -0
  383. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.js +79 -0
  384. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts +25 -0
  385. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts.map +1 -0
  386. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.js +89 -0
  387. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts +31 -0
  388. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts.map +1 -0
  389. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.js +66 -0
  390. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.d.ts.map +1 -1
  391. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.js +2 -0
  392. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts +17 -0
  393. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts.map +1 -0
  394. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.js +34 -0
  395. package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts +18 -0
  396. package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts.map +1 -1
  397. package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.js +31 -23
  398. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +3 -2
  399. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
  400. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +4 -0
  401. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +2 -5
  402. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
  403. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +3 -20
  404. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  405. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +5 -6
  406. package/src/shade/renderer/water/chunk_water_gi.d.ts +1 -1
  407. package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
  408. package/src/shade/renderer/water/chunk_water_gi.js +6 -8
  409. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  410. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  411. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  412. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +76 -32
  413. package/src/core/math/hash/squirrel3.d.ts +0 -17
  414. package/src/core/math/hash/squirrel3.d.ts.map +0 -1
  415. package/src/core/math/hash/squirrel3.js +0 -30
  416. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +0 -213
  417. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +0 -1
  418. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +0 -1468
  419. package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts +0 -82
  420. package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts.map +0 -1
  421. package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.js +0 -127
  422. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts +0 -24
  423. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts.map +0 -1
  424. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.js +0 -29
  425. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts +0 -12
  426. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts.map +0 -1
  427. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.js +0 -31
  428. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +0 -11
  429. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +0 -1
  430. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +0 -21
  431. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts +0 -29
  432. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts.map +0 -1
  433. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.js +0 -179
  434. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts +0 -17
  435. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts.map +0 -1
  436. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.js +0 -107
  437. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +0 -65
  438. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +0 -1
  439. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +0 -376
  440. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +0 -40
  441. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +0 -1
  442. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +0 -301
  443. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts +0 -19
  444. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts.map +0 -1
  445. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.js +0 -61
  446. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +0 -18
  447. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts.map +0 -1
  448. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +0 -102
  449. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts +0 -15
  450. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts.map +0 -1
  451. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.js +0 -65
  452. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts +0 -22
  453. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts.map +0 -1
  454. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.js +0 -136
  455. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts +0 -20
  456. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts.map +0 -1
  457. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js +0 -104
  458. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +0 -20
  459. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +0 -1
  460. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +0 -80
  461. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +0 -18
  462. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +0 -1
  463. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +0 -113
  464. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts +0 -30
  465. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts.map +0 -1
  466. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js +0 -146
  467. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts +0 -34
  468. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts.map +0 -1
  469. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +0 -31
  470. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +0 -1
  471. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +0 -82
  472. package/src/shade/renderer/shader/chunk/random/chunk_hash_squirrel3.d.ts +0 -12
  473. package/src/shade/renderer/shader/chunk/random/chunk_hash_squirrel3.d.ts.map +0 -1
  474. package/src/shade/renderer/shader/chunk/random/chunk_hash_squirrel3.js +0 -30
@@ -38,6 +38,13 @@ export const MESH_SDF_EMPTY: number;
38
38
  * @type {number}
39
39
  */
40
40
  export const MESH_SDF_EMPTY_INSIDE: number;
41
+ /**
42
+ * A brick's number when it holds no slot. A brick given a slot is numbered among its geometry's
43
+ * stored bricks, 0 up, in the order the bake stored them: what a payload kept per stored brick, as
44
+ * a surface cache's tiles, is laid out by.
45
+ * @type {number}
46
+ */
47
+ export const MESH_SDF_UNNUMBERED: number;
41
48
  /**
42
49
  * What a geometry's header says about its field.
43
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MESH_SDF.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/MESH_SDF.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,yCAFU,MAAM,CAEgG;AAEhH;;;;;GAKG;AACH,mCAFU,MAAM,CAEsB;AAEtC;;;;;GAKG;AACH,6BAFU,MAAM,CAEyB;AAEzC;;;GAGG;AACH,oCAFU,MAAM,CAEwC;;;;2BAK9C,MAAM;AAHhB;;;;GAIG;AACH;IACI,0FAA0F;;IAE1F,wFAAwF;;IAExF,sCAAsC;;IAEtC,4GAA4G;;GAE7G"}
1
+ {"version":3,"file":"MESH_SDF.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/MESH_SDF.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,yCAFU,MAAM,CAEgG;AAEhH;;;;;GAKG;AACH,mCAFU,MAAM,CAEsB;AAEtC;;;;;GAKG;AACH,6BAFU,MAAM,CAEyB;AAEzC;;;GAGG;AACH,oCAFU,MAAM,CAEwC;AAExD;;;;;GAKG;AACH,kCAFU,MAAM,CAE8B;;;;2BAKpC,MAAM;AAHhB;;;;GAIG;AACH;IACI,0FAA0F;;IAE1F,wFAAwF;;IAExF,sCAAsC;;IAEtC,4GAA4G;;GAE7G"}
@@ -45,6 +45,14 @@ export const MESH_SDF_EMPTY = 0x80000000;
45
45
  */
46
46
  export const MESH_SDF_EMPTY_INSIDE = MESH_SDF_EMPTY + 1;
47
47
 
48
+ /**
49
+ * A brick's number when it holds no slot. A brick given a slot is numbered among its geometry's
50
+ * stored bricks, 0 up, in the order the bake stored them: what a payload kept per stored brick, as
51
+ * a surface cache's tiles, is laid out by.
52
+ * @type {number}
53
+ */
54
+ export const MESH_SDF_UNNUMBERED = 0xffffffff;
55
+
48
56
  /**
49
57
  * What a geometry's header says about its field.
50
58
  * @readonly
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A brick's content key, from its 512 bytes, texel x + 8y + 64z.
3
+ *
4
+ * @param {Uint8Array} bytes
5
+ * @param {number} offset the brick's first byte
6
+ * @returns {number} u32
7
+ */
8
+ export function mesh_sdf_brick_key(bytes: Uint8Array, offset: number): number;
9
+ /**
10
+ * The seed of the key's hash.
11
+ * @type {number}
12
+ */
13
+ export const MESH_SDF_BRICK_KEY_SEED: number;
14
+ //# sourceMappingURL=MESH_SDF_BRICK_KEY.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MESH_SDF_BRICK_KEY.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.js"],"names":[],"mappings":"AAmBA;;;;;;GAMG;AACH,0CAJW,UAAU,UACV,MAAM,GACJ,MAAM,CAUlB;AArBD;;;GAGG;AACH,sCAFU,MAAM,CAEkC"}
@@ -0,0 +1,35 @@
1
+ import { lowbias32 } from "../../../../core/math/hash/lowbias32.js";
2
+ import { MESH_SDF_BRICK_TEXEL_COUNT } from "./MESH_SDF.js";
3
+
4
+ /*
5
+ A brick's content key: a u32, the sum over the brick's texels of a hash of (texel, byte), mod 2^32.
6
+
7
+ term(t, b) = lowbias32(((t << 8) | b) ^ seed) t: texel x + 8y + 64z, b: its byte
8
+
9
+ A key finds the slots that may hold a brick's bytes; it never says that they do. Two bricks share a slot
10
+ only once their 512 bytes compare equal, so keys that agree for different bytes cost a share, never a
11
+ brick its bytes. A sum, the terms add in any order, on any thread.
12
+ */
13
+
14
+ /**
15
+ * The seed of the key's hash.
16
+ * @type {number}
17
+ */
18
+ export const MESH_SDF_BRICK_KEY_SEED = 0x9e3779b9;
19
+
20
+ /**
21
+ * A brick's content key, from its 512 bytes, texel x + 8y + 64z.
22
+ *
23
+ * @param {Uint8Array} bytes
24
+ * @param {number} offset the brick's first byte
25
+ * @returns {number} u32
26
+ */
27
+ export function mesh_sdf_brick_key(bytes, offset) {
28
+ let key = 0;
29
+
30
+ for (let t = 0; t < MESH_SDF_BRICK_TEXEL_COUNT; t++) {
31
+ key = (key + lowbias32((((t << 8) | bytes[offset + t]) ^ MESH_SDF_BRICK_KEY_SEED) >>> 0)) >>> 0;
32
+ }
33
+
34
+ return key;
35
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"MESH_SDF_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,8BAFU,YAAY,CA0CR;6BAnDe,mCAAmC"}
1
+ {"version":3,"file":"MESH_SDF_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,8BAFU,YAAY,CAsCR;6BA/Ce,mCAAmC"}
@@ -28,10 +28,6 @@ export const MESH_SDF_STRUCT = WebGPUStruct.from({
28
28
  * The first entry of level 0 in the indirection.
29
29
  */
30
30
  indirection: u32,
31
- /**
32
- * The first word of the geometry's card layout, `GPU_DATABASE_NULL` until its cards are placed.
33
- */
34
- cards: u32,
35
31
  /**
36
32
  * `MeshSDFState`.
37
33
  */
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Records of the frame's claims, which name one brick of the frame for each content key no slot is
3
+ * listed under, for a frame of `bricks` bricks taken: twice as many, so that a key's probes pass an
4
+ * empty record within a few, and no fewer than the probe limit, so that they meet no record twice; a
5
+ * power of two.
6
+ *
7
+ * @param {number} bricks
8
+ * @returns {number}
9
+ */
10
+ export function mesh_sdf_claim_size(bricks: number): number;
1
11
  /**
2
12
  * Lanes of every bake workgroup: a block of a brick's texels in evaluate and store, and a run of
3
13
  * classify or free threads.
@@ -39,10 +49,39 @@ export const MESH_SDF_COUNTER_WORDS: 4;
39
49
  export const MESH_SDF_TAKE_DISPATCH: 0;
40
50
  /** `take`: the ring position of the first brick taken. */
41
51
  export const MESH_SDF_TAKE_START: 3;
42
- /** `take`: the dispatch of card placement's page pass, three words: a thread a column, as its merge found. */
43
- export const MESH_SDF_TAKE_PLACE_DISPATCH: 4;
52
+ /** `take`: the bricks taken. */
53
+ export const MESH_SDF_TAKE_COUNT: 4;
44
54
  /** `take`, in words. */
45
- export const MESH_SDF_TAKE_WORDS: 8;
55
+ export const MESH_SDF_TAKE_WORDS: 5;
56
+ /**
57
+ * A brick's entry from evaluate to resolve in the frame it is taken: a texel of it is within the band,
58
+ * and which slot holds its bytes is resolve's to say. Past EMPTY, so it holds no slot.
59
+ * @type {number}
60
+ */
61
+ export const MESH_SDF_PENDING: number;
62
+ /**
63
+ * No slot: what a brick taken's record holds for its slot until it has one, and what a find of the
64
+ * slots by content returns when it finds none (`chunk_mesh_sdf_contents`).
65
+ * @type {number}
66
+ */
67
+ export const MESH_SDF_NO_CONTENT: number;
68
+ /** A brick taken's record: the tally of its workgroups ({@link MESH_SDF_TALLY_BAND_UNIT}). */
69
+ export const MESH_SDF_TAKEN_TALLY: 0;
70
+ /** A brick taken's record: its content key, the sum of key's terms. */
71
+ export const MESH_SDF_TAKEN_KEY: 1;
72
+ /** A brick taken's record: the slot find found under its key, then the slot resolve gave it. */
73
+ export const MESH_SDF_TAKEN_SLOT: 2;
74
+ /** A brick taken's record: 1 when its slot is fresh, which store fills. */
75
+ export const MESH_SDF_TAKEN_FRESH: 3;
76
+ /**
77
+ * A brick taken's record: the brick of the frame, by its place in the take, that first claimed its
78
+ * key, when find found no slot under it.
79
+ */
80
+ export const MESH_SDF_TAKEN_REP: 4;
81
+ /** A brick taken's record: its texels whose bytes differ from the slot's it found, or its representative's. */
82
+ export const MESH_SDF_TAKEN_DIFFERS: 5;
83
+ /** Words of a brick taken's record. */
84
+ export const MESH_SDF_TAKEN_WORDS: 6;
46
85
  /** `log`: bricks left on the ring after the frame's take, stale ones included. */
47
86
  export const MESH_SDF_LOG_QUEUED: 0;
48
87
  /** `log`: 1 when the take was held back by the free slots, which asks the host for more. */
@@ -53,19 +92,25 @@ export const MESH_SDF_LOG_FREE_SLOTS: 2;
53
92
  export const MESH_SDF_LOG_TAKEN: 3;
54
93
  /** `log`: geometries completed this frame; their records follow the header. */
55
94
  export const MESH_SDF_LOG_COMPLETIONS: 4;
95
+ /** `log`: bricks resolve gave a slot already holding their bytes. */
96
+ export const MESH_SDF_LOG_SHARED: 5;
97
+ /**
98
+ * `log`: bricks whose content key was that of a slot, or of their representative, holding other
99
+ * bytes, and which took a slot of their own.
100
+ */
101
+ export const MESH_SDF_LOG_COLLIDED: 6;
56
102
  /** `log`: words before the first record. */
57
- export const MESH_SDF_LOG_HEADER_WORDS: 5;
103
+ export const MESH_SDF_LOG_HEADER_WORDS: 7;
58
104
  /**
59
- * `log`: words a record: the geometry id, the generation it was baked at, and what the record
60
- * reports. A completion reports nothing; a placement, marked by MESH_SDF_LOG_PLACED on the id,
61
- * reports the columns and the pages its cards took.
105
+ * `log`: words a completion record: the geometry id, the generation it was baked at, and the bricks
106
+ * given a slot, which count writes ({@link MESH_SDF_LOG_STORED}).
62
107
  */
63
- export const MESH_SDF_LOG_RECORD_WORDS: 4;
108
+ export const MESH_SDF_LOG_RECORD_WORDS: 3;
64
109
  /**
65
- * `log`: the mark on a record's geometry id that says its cards were placed. Geometry ids stay below it.
110
+ * `log`: the word of a completion record that holds its geometry's stored bricks.
66
111
  * @type {number}
67
112
  */
68
- export const MESH_SDF_LOG_PLACED: number;
113
+ export const MESH_SDF_LOG_STORED: number;
69
114
  /**
70
115
  * A tally, a workgroup's of its lanes and a brick's of its workgroups: the low half counts those
71
116
  * finished, the high half those with a texel within the band, in this unit.
@@ -1 +1 @@
1
- {"version":3,"file":"MESH_SDF_BAKE.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js"],"names":[],"mappings":"AA2BA;;;;GAIG;AACH,2CAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,wCAFU,MAAM,CAEmF;AAEnG;;;;GAIG;AACH,qCAFU,MAAM,CAEiD;AAEjE;;;GAGG;AACH,qCAFU,MAAM,CAEiD;AAEjE;;;;;GAKG;AACH,2CAFU,MAAM,CAE0F;AAE1G,kEAAkE;AAClE,uCAAwC;AACxC,uEAAuE;AACvE,sCAAuC;AACvC,mEAAmE;AACnE,sCAAuC;AACvC,4DAA4D;AAC5D,uCAAwC;AAExC,2GAA2G;AAC3G,uCAAwC;AACxC,0DAA0D;AAC1D,oCAAqC;AACrC,8GAA8G;AAC9G,6CAA8C;AAC9C,wBAAwB;AACxB,oCAAqC;AAErC,kFAAkF;AAClF,oCAAqC;AACrC,4FAA4F;AAC5F,qCAAsC;AACtC,yCAAyC;AACzC,wCAAyC;AACzC,iDAAiD;AACjD,mCAAoC;AACpC,+EAA+E;AAC/E,yCAA0C;AAC1C,4CAA4C;AAC5C,0CAA2C;AAC3C;;;;GAIG;AACH,0CAA2C;AAE3C;;;GAGG;AACH,kCAFU,MAAM,CAE8B;AAE9C;;;;GAIG;AACH,uCAFU,MAAM,CAE8B"}
1
+ {"version":3,"file":"MESH_SDF_BAKE.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js"],"names":[],"mappings":"AAkIA;;;;;;;;GAQG;AACH,4CAHW,MAAM,GACJ,MAAM,CAIlB;AA/FD;;;;GAIG;AACH,2CAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,wCAFU,MAAM,CAEmF;AAEnG;;;;GAIG;AACH,qCAFU,MAAM,CAEiD;AAEjE;;;GAGG;AACH,qCAFU,MAAM,CAEiD;AAEjE;;;;;GAKG;AACH,2CAFU,MAAM,CAE0F;AAE1G,kEAAkE;AAClE,uCAAwC;AACxC,uEAAuE;AACvE,sCAAuC;AACvC,mEAAmE;AACnE,sCAAuC;AACvC,4DAA4D;AAC5D,uCAAwC;AAExC,2GAA2G;AAC3G,uCAAwC;AACxC,0DAA0D;AAC1D,oCAAqC;AACrC,gCAAgC;AAChC,oCAAqC;AACrC,wBAAwB;AACxB,oCAAqC;AAErC;;;;GAIG;AACH,+BAFU,MAAM,CAEmC;AAEnD;;;;GAIG;AACH,kCAFU,MAAM,CAE8B;AAE9C,8FAA8F;AAC9F,qCAAsC;AACtC,uEAAuE;AACvE,mCAAoC;AACpC,gGAAgG;AAChG,oCAAqC;AACrC,2EAA2E;AAC3E,qCAAsC;AACtC;;;GAGG;AACH,mCAAoC;AACpC,+GAA+G;AAC/G,uCAAwC;AACxC,uCAAuC;AACvC,qCAAsC;AAetC,kFAAkF;AAClF,oCAAqC;AACrC,4FAA4F;AAC5F,qCAAsC;AACtC,yCAAyC;AACzC,wCAAyC;AACzC,iDAAiD;AACjD,mCAAoC;AACpC,+EAA+E;AAC/E,yCAA0C;AAC1C,qEAAqE;AACrE,oCAAqC;AACrC;;;GAGG;AACH,sCAAuC;AACvC,4CAA4C;AAC5C,0CAA2C;AAC3C;;;GAGG;AACH,0CAA2C;AAE3C;;;GAGG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;;GAIG;AACH,uCAFU,MAAM,CAE8B"}
@@ -1,15 +1,31 @@
1
- import { MESH_SDF_BRICK_TEXEL_COUNT, MESH_SDF_BRICK_VOXELS } from "../MESH_SDF.js";
1
+ import { ceilPowerOfTwo } from "../../../../../core/binary/operations/ceilPowerOfTwo.js";
2
+ import { HASH_TABLE_PROBE_LIMIT } from "../../../gpu_primitive/hash_table/cpu_build_hash_table.js";
3
+ import { MESH_SDF_BRICK_TEXEL_COUNT, MESH_SDF_BRICK_VOXELS, MESH_SDF_EMPTY } from "../MESH_SDF.js";
2
4
 
3
5
  /*
4
6
  The bake's device state (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §6.4), shared by its passes:
5
7
 
8
+ free: a thread an entry of the ranges freed since the last bake: a slot one entry fewer holds,
9
+ given back when no entry holds it.
6
10
  classify: one thread a brick of the geometries admitted this frame. A brick no texel of which can
7
11
  be within the band is EMPTY; the rest go onto the ring.
8
12
  take: one thread. Up to the budget off the ring, and no more than the stack has free slots, so
9
13
  that no pop below can fail.
10
14
  evaluate: a thread a texel of each brick taken, MESH_SDF_GROUPS_PER_BRICK workgroups a brick, into
11
- staging. The brick's last thread to finish gives it a slot or EMPTY.
12
- store: a thread a texel of each brick taken, from staging into the brick's slot.
15
+ staging. The brick's last thread to finish makes it PENDING or EMPTY, and a PENDING brick
16
+ takes the next number of its geometry's stored bricks.
17
+ key: a thread a texel of each PENDING brick: its term of the brick's content key
18
+ (`MESH_SDF_BRICK_KEY.js`), added into the brick's record.
19
+ resolve: four passes. Find, a thread a brick taken: a PENDING brick finds a slot listed under its key
20
+ (`chunk_mesh_sdf_contents`), and one that finds none claims its key in the frame's claims,
21
+ the first to claim it the key's representative. Compare, a thread a texel: a brick's bytes
22
+ against the slot's it found, or its representative's, a texel that differs marking it. Fresh,
23
+ a thread a brick: a representative pops a slot and lists it under its key, and a brick whose
24
+ bytes differ pops one of its own. Hold, a thread a brick: every PENDING brick takes its slot,
25
+ its representative's when it has none, and its entry holds it.
26
+ store: a thread a texel of each brick that took a fresh slot, from staging into it.
27
+ count: a thread a record of the frame's log: a completion's stored bricks, read once every brick
28
+ of the frame has settled.
13
29
 
14
30
  A geometry's bricks are counted down in its pending word from its brick count, one as classify drops
15
31
  a brick and one as evaluate settles it, and the one that reaches zero logs the geometry complete.
@@ -18,9 +34,12 @@ import { MESH_SDF_BRICK_TEXEL_COUNT, MESH_SDF_BRICK_VOXELS } from "../MESH_SDF.j
18
34
  SHADE_DEVICE_FLOOR beside the five a BLAS query reads. Two of them carry more than their name:
19
35
 
20
36
  mesh_sdf_indirection, the arena of every brick's entry, which the bake views as atomics, holds at
21
- word 0 the counters (MESH_SDF_COUNTER_*); at `log_offset` the frame's log (MESH_SDF_LOG_*), and
22
- at `tally_offset` the frame's tallies, a word a brick taken; and a geometry's pending word just
23
- before its first entry, `header.indirection - 1`;
37
+ word 0 the counters (MESH_SDF_COUNTER_*); at `log_offset` the frame's log (MESH_SDF_LOG_*), at
38
+ `tally_offset` a record of MESH_SDF_TAKEN_WORDS for each brick taken (MESH_SDF_TAKEN_*), and at
39
+ `claim_offset` the frame's claims, `claim_size` words each 0 or a brick's place in the take + 1;
40
+ and a geometry's range (`chunk_mesh_sdf`): its stored count at `header.indirection - 2`, its
41
+ pending word at `header.indirection - 1`, its entries, then the numbers of its bricks and its
42
+ bricks by number;
24
43
  mesh_sdf_ring holds the ring's entries, then from `ring_capacity` on the frame's staging,
25
44
  MESH_SDF_STAGING_VEC4S a brick taken.
26
45
  */
@@ -72,10 +91,55 @@ export const MESH_SDF_COUNTER_WORDS = 4;
72
91
  export const MESH_SDF_TAKE_DISPATCH = 0;
73
92
  /** `take`: the ring position of the first brick taken. */
74
93
  export const MESH_SDF_TAKE_START = 3;
75
- /** `take`: the dispatch of card placement's page pass, three words: a thread a column, as its merge found. */
76
- export const MESH_SDF_TAKE_PLACE_DISPATCH = 4;
94
+ /** `take`: the bricks taken. */
95
+ export const MESH_SDF_TAKE_COUNT = 4;
77
96
  /** `take`, in words. */
78
- export const MESH_SDF_TAKE_WORDS = 8;
97
+ export const MESH_SDF_TAKE_WORDS = 5;
98
+
99
+ /**
100
+ * A brick's entry from evaluate to resolve in the frame it is taken: a texel of it is within the band,
101
+ * and which slot holds its bytes is resolve's to say. Past EMPTY, so it holds no slot.
102
+ * @type {number}
103
+ */
104
+ export const MESH_SDF_PENDING = MESH_SDF_EMPTY + 2;
105
+
106
+ /**
107
+ * No slot: what a brick taken's record holds for its slot until it has one, and what a find of the
108
+ * slots by content returns when it finds none (`chunk_mesh_sdf_contents`).
109
+ * @type {number}
110
+ */
111
+ export const MESH_SDF_NO_CONTENT = 0xffffffff;
112
+
113
+ /** A brick taken's record: the tally of its workgroups ({@link MESH_SDF_TALLY_BAND_UNIT}). */
114
+ export const MESH_SDF_TAKEN_TALLY = 0;
115
+ /** A brick taken's record: its content key, the sum of key's terms. */
116
+ export const MESH_SDF_TAKEN_KEY = 1;
117
+ /** A brick taken's record: the slot find found under its key, then the slot resolve gave it. */
118
+ export const MESH_SDF_TAKEN_SLOT = 2;
119
+ /** A brick taken's record: 1 when its slot is fresh, which store fills. */
120
+ export const MESH_SDF_TAKEN_FRESH = 3;
121
+ /**
122
+ * A brick taken's record: the brick of the frame, by its place in the take, that first claimed its
123
+ * key, when find found no slot under it.
124
+ */
125
+ export const MESH_SDF_TAKEN_REP = 4;
126
+ /** A brick taken's record: its texels whose bytes differ from the slot's it found, or its representative's. */
127
+ export const MESH_SDF_TAKEN_DIFFERS = 5;
128
+ /** Words of a brick taken's record. */
129
+ export const MESH_SDF_TAKEN_WORDS = 6;
130
+
131
+ /**
132
+ * Records of the frame's claims, which name one brick of the frame for each content key no slot is
133
+ * listed under, for a frame of `bricks` bricks taken: twice as many, so that a key's probes pass an
134
+ * empty record within a few, and no fewer than the probe limit, so that they meet no record twice; a
135
+ * power of two.
136
+ *
137
+ * @param {number} bricks
138
+ * @returns {number}
139
+ */
140
+ export function mesh_sdf_claim_size(bricks) {
141
+ return ceilPowerOfTwo(Math.max(HASH_TABLE_PROBE_LIMIT, 2 * bricks));
142
+ }
79
143
 
80
144
  /** `log`: bricks left on the ring after the frame's take, stale ones included. */
81
145
  export const MESH_SDF_LOG_QUEUED = 0;
@@ -87,20 +151,26 @@ export const MESH_SDF_LOG_FREE_SLOTS = 2;
87
151
  export const MESH_SDF_LOG_TAKEN = 3;
88
152
  /** `log`: geometries completed this frame; their records follow the header. */
89
153
  export const MESH_SDF_LOG_COMPLETIONS = 4;
154
+ /** `log`: bricks resolve gave a slot already holding their bytes. */
155
+ export const MESH_SDF_LOG_SHARED = 5;
156
+ /**
157
+ * `log`: bricks whose content key was that of a slot, or of their representative, holding other
158
+ * bytes, and which took a slot of their own.
159
+ */
160
+ export const MESH_SDF_LOG_COLLIDED = 6;
90
161
  /** `log`: words before the first record. */
91
- export const MESH_SDF_LOG_HEADER_WORDS = 5;
162
+ export const MESH_SDF_LOG_HEADER_WORDS = 7;
92
163
  /**
93
- * `log`: words a record: the geometry id, the generation it was baked at, and what the record
94
- * reports. A completion reports nothing; a placement, marked by MESH_SDF_LOG_PLACED on the id,
95
- * reports the columns and the pages its cards took.
164
+ * `log`: words a completion record: the geometry id, the generation it was baked at, and the bricks
165
+ * given a slot, which count writes ({@link MESH_SDF_LOG_STORED}).
96
166
  */
97
- export const MESH_SDF_LOG_RECORD_WORDS = 4;
167
+ export const MESH_SDF_LOG_RECORD_WORDS = 3;
98
168
 
99
169
  /**
100
- * `log`: the mark on a record's geometry id that says its cards were placed. Geometry ids stay below it.
170
+ * `log`: the word of a completion record that holds its geometry's stored bricks.
101
171
  * @type {number}
102
172
  */
103
- export const MESH_SDF_LOG_PLACED = 0x80000000;
173
+ export const MESH_SDF_LOG_STORED = 2;
104
174
 
105
175
  /**
106
176
  * A tally, a workgroup's of its lanes and a brick's of its workgroups: the low half counts those
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The indirection arena as the bake sees it: every word an atomic, the counters at word 0, the
3
- * frame's log at `log_offset` and its tallies at `tally_offset`, and a geometry's pending word before its
4
- * entries (`MESH_SDF_BAKE.js`).
3
+ * frame's log at `log_offset` and its tallies at `tally_offset`, and each geometry's range, its stored
4
+ * count and pending word before its entries (`MESH_SDF_BAKE.js`, `chunk_mesh_sdf`).
5
5
  * Readers bind the same buffer as plain words, through `MESH_SDF_INDIRECTION_RESOURCE`.
6
6
  * @type {ShaderResourceDescriptor}
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_mesh_sdf_bake.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js"],"names":[],"mappings":"AA0BA;;;;;;GAMG;AACH,sCAFU,wBAAwB,CAEwG;AAE1I;;;;GAIG;AACH,uCAFU,wBAAwB,CAEyF;AAE3H;;;;;GAKG;AACH,kCAFU,SAAS,CA2BZ;AAEP;;;;;;;;;;;GAWG;AACH,yCAFU,SAAS,CAwBZ;AAIP;;;;;;;;;GASG;AACH,wCAFU,SAAS,CAsBhB;yCA9IsC,sDAAsD;0BADrE,uCAAuC"}
1
+ {"version":3,"file":"chunk_mesh_sdf_bake.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js"],"names":[],"mappings":"AAsCA;;;;;;GAMG;AACH,sCAFU,wBAAwB,CAEwG;AAE1I;;;;GAIG;AACH,uCAFU,wBAAwB,CAEyF;AAE3H;;;;;GAKG;AACH,kCAFU,SAAS,CAyCZ;AAEP;;;;;;;;;;;GAWG;AACH,yCAFU,SAAS,CAwBZ;AAIP;;;;;;;;;GASG;AACH,wCAFU,SAAS,CAsBhB;yCAxKsC,sDAAsD;0BADrE,uCAAuC"}
@@ -10,24 +10,36 @@ import {
10
10
  MESH_SDF_COUNTER_HEAD,
11
11
  MESH_SDF_COUNTER_SLOTS,
12
12
  MESH_SDF_COUNTER_TAIL,
13
+ MESH_SDF_LOG_COLLIDED,
13
14
  MESH_SDF_LOG_COMPLETIONS,
14
15
  MESH_SDF_LOG_FREE_SLOTS,
15
16
  MESH_SDF_LOG_HEADER_WORDS,
16
17
  MESH_SDF_LOG_QUEUED,
17
18
  MESH_SDF_LOG_RECORD_WORDS,
19
+ MESH_SDF_LOG_SHARED,
18
20
  MESH_SDF_LOG_STARVED,
19
21
  MESH_SDF_LOG_TAKEN,
20
22
  MESH_SDF_GROUPS_PER_BRICK,
23
+ MESH_SDF_NO_CONTENT,
24
+ MESH_SDF_PENDING,
21
25
  MESH_SDF_STAGING_VEC4S,
26
+ MESH_SDF_TAKE_COUNT,
22
27
  MESH_SDF_TAKE_DISPATCH,
23
28
  MESH_SDF_TAKE_START,
29
+ MESH_SDF_TAKEN_DIFFERS,
30
+ MESH_SDF_TAKEN_FRESH,
31
+ MESH_SDF_TAKEN_KEY,
32
+ MESH_SDF_TAKEN_REP,
33
+ MESH_SDF_TAKEN_SLOT,
34
+ MESH_SDF_TAKEN_TALLY,
35
+ MESH_SDF_TAKEN_WORDS,
24
36
  MESH_SDF_TALLY_BAND_UNIT
25
37
  } from "./MESH_SDF_BAKE.js";
26
38
 
27
39
  /**
28
40
  * The indirection arena as the bake sees it: every word an atomic, the counters at word 0, the
29
- * frame's log at `log_offset` and its tallies at `tally_offset`, and a geometry's pending word before its
30
- * entries (`MESH_SDF_BAKE.js`).
41
+ * frame's log at `log_offset` and its tallies at `tally_offset`, and each geometry's range, its stored
42
+ * count and pending word before its entries (`MESH_SDF_BAKE.js`, `chunk_mesh_sdf`).
31
43
  * Readers bind the same buffer as plain words, through `MESH_SDF_INDIRECTION_RESOURCE`.
32
44
  * @type {ShaderResourceDescriptor}
33
45
  */
@@ -61,12 +73,26 @@ const MESH_SDF_COUNTER_TAIL = ${MESH_SDF_COUNTER_TAIL}u;
61
73
 
62
74
  const MESH_SDF_TAKE_DISPATCH = ${MESH_SDF_TAKE_DISPATCH}u;
63
75
  const MESH_SDF_TAKE_START = ${MESH_SDF_TAKE_START}u;
76
+ const MESH_SDF_TAKE_COUNT = ${MESH_SDF_TAKE_COUNT}u;
77
+
78
+ const MESH_SDF_PENDING = ${MESH_SDF_PENDING}u;
79
+ const MESH_SDF_NO_CONTENT = ${MESH_SDF_NO_CONTENT}u;
80
+
81
+ const MESH_SDF_TAKEN_TALLY = ${MESH_SDF_TAKEN_TALLY}u;
82
+ const MESH_SDF_TAKEN_KEY = ${MESH_SDF_TAKEN_KEY}u;
83
+ const MESH_SDF_TAKEN_SLOT = ${MESH_SDF_TAKEN_SLOT}u;
84
+ const MESH_SDF_TAKEN_FRESH = ${MESH_SDF_TAKEN_FRESH}u;
85
+ const MESH_SDF_TAKEN_REP = ${MESH_SDF_TAKEN_REP}u;
86
+ const MESH_SDF_TAKEN_DIFFERS = ${MESH_SDF_TAKEN_DIFFERS}u;
87
+ const MESH_SDF_TAKEN_WORDS = ${MESH_SDF_TAKEN_WORDS}u;
64
88
 
65
89
  const MESH_SDF_LOG_QUEUED = ${MESH_SDF_LOG_QUEUED}u;
66
90
  const MESH_SDF_LOG_STARVED = ${MESH_SDF_LOG_STARVED}u;
67
91
  const MESH_SDF_LOG_FREE_SLOTS = ${MESH_SDF_LOG_FREE_SLOTS}u;
68
92
  const MESH_SDF_LOG_TAKEN = ${MESH_SDF_LOG_TAKEN}u;
69
93
  const MESH_SDF_LOG_COMPLETIONS = ${MESH_SDF_LOG_COMPLETIONS}u;
94
+ const MESH_SDF_LOG_SHARED = ${MESH_SDF_LOG_SHARED}u;
95
+ const MESH_SDF_LOG_COLLIDED = ${MESH_SDF_LOG_COLLIDED}u;
70
96
  const MESH_SDF_LOG_HEADER_WORDS = ${MESH_SDF_LOG_HEADER_WORDS}u;
71
97
  const MESH_SDF_LOG_RECORD_WORDS = ${MESH_SDF_LOG_RECORD_WORDS}u;
72
98
  `, [
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Records of the content table for a slot capacity: twice the slots, so the table is at most half
3
+ * full and a key's sequence passes an empty record within a few probes, and no fewer than the probe
4
+ * limit, which a table holds (`chunk_hash_table_atomic`); a power of two.
5
+ *
6
+ * @param {number} slot_capacity
7
+ * @returns {number}
8
+ */
9
+ export function mesh_sdf_content_table_size(slot_capacity: number): number;
10
+ /**
11
+ * Words a slot's contents take in `mesh_sdf_contents`: the entries holding it, then the content key
12
+ * (`MESH_SDF_BRICK_KEY.js`) it is listed under.
13
+ * @type {number}
14
+ */
15
+ export const MESH_SDF_CONTENT_WORDS: number;
16
+ /**
17
+ * What each slot of the atlas holds, {@link MESH_SDF_CONTENT_WORDS} a slot, by slot.
18
+ * @type {ShaderResourceDescriptor}
19
+ */
20
+ export const MESH_SDF_CONTENTS_RESOURCE: ShaderResourceDescriptor;
21
+ /**
22
+ * The slots by content: a `chunk_hash_table_atomic` table at word 0, keyed by a content key's high 31
23
+ * bits, a record's value the slot.
24
+ * @type {ShaderResourceDescriptor}
25
+ */
26
+ export const MESH_SDF_CONTENT_TABLE_RESOURCE: ShaderResourceDescriptor;
27
+ /**
28
+ * The atlas's slots by what they hold, so that bricks of the same bytes share one slot. Each slot
29
+ * counts the entries holding it, and the content table lists slots under the content keys of their
30
+ * bytes, for bricks to find.
31
+ *
32
+ * A key names the slots that may hold a brick's bytes and never says that one does: a brick takes a
33
+ * slot it found only once its bytes and the slot's compare equal, so keys that agree for different
34
+ * bytes cost a share, never a brick its bytes. Every slot the table lists is held, free taking a
35
+ * slot's record out with its last entry. A slot listed nowhere, its insert refused (no record free
36
+ * within the probe limit) or its bytes never offered for sharing, is held all the same and never found.
37
+ *
38
+ * ```wgsl
39
+ * fn mesh_sdf_content_find(key: u32) -> u32 // the first slot listed under the key, or MESH_SDF_NO_CONTENT
40
+ * fn mesh_sdf_content_list(slot: u32, key: u32) // a slot about to hold bytes of the key, listed under it
41
+ * fn mesh_sdf_content_hold(slot: u32) // one entry more
42
+ * fn mesh_sdf_content_release(slot: u32) -> bool // one entry fewer: true for the last, its record gone
43
+ * ```
44
+ *
45
+ * The table keys a record by the key's high 31 bits, so a slot found counts only when the key it is
46
+ * listed under is the key. No find shares a dispatch with a list or a release: each meets the table
47
+ * as the dispatches before it left it.
48
+ *
49
+ * @type {CodeChunk}
50
+ */
51
+ export const chunk_mesh_sdf_contents: CodeChunk;
52
+ import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
53
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
54
+ //# sourceMappingURL=chunk_mesh_sdf_contents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_sdf_contents.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.js"],"names":[],"mappings":"AA6BA;;;;;;;GAOG;AACH,2DAHW,MAAM,GACJ,MAAM,CAIlB;AA9BD;;;;GAIG;AACH,qCAFU,MAAM,CAEwB;AAExC;;;GAGG;AACH,yCAFU,wBAAwB,CAEwG;AAE1I;;;;GAIG;AACH,8CAFU,wBAAwB,CAEkH;AAcpJ;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,sCAFU,SAAS,CA+EZ;yCA1IkC,sDAAsD;0BADrE,uCAAuC"}
@@ -0,0 +1,146 @@
1
+ import { ceilPowerOfTwo } from "../../../../../core/binary/operations/ceilPowerOfTwo.js";
2
+ import { chunk_hash_table_atomic } from "../../../gpu_primitive/hash_table/chunk_hash_table_atomic.js";
3
+ import { HASH_TABLE_PROBE_LIMIT } from "../../../gpu_primitive/hash_table/cpu_build_hash_table.js";
4
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
5
+ import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
6
+ import { atomic_u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
7
+ import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
8
+ import { chunk_mesh_sdf_bake } from "./chunk_mesh_sdf_bake.js";
9
+
10
+ /**
11
+ * Words a slot's contents take in `mesh_sdf_contents`: the entries holding it, then the content key
12
+ * (`MESH_SDF_BRICK_KEY.js`) it is listed under.
13
+ * @type {number}
14
+ */
15
+ export const MESH_SDF_CONTENT_WORDS = 2;
16
+
17
+ /**
18
+ * What each slot of the atlas holds, {@link MESH_SDF_CONTENT_WORDS} a slot, by slot.
19
+ * @type {ShaderResourceDescriptor}
20
+ */
21
+ export const MESH_SDF_CONTENTS_RESOURCE = ShaderResourceDescriptor.storageBuffer("mesh_sdf_contents", WebGPUArray.from(atomic_u32), true);
22
+
23
+ /**
24
+ * The slots by content: a `chunk_hash_table_atomic` table at word 0, keyed by a content key's high 31
25
+ * bits, a record's value the slot.
26
+ * @type {ShaderResourceDescriptor}
27
+ */
28
+ export const MESH_SDF_CONTENT_TABLE_RESOURCE = ShaderResourceDescriptor.storageBuffer("mesh_sdf_content_table", WebGPUArray.from(atomic_u32), true);
29
+
30
+ /**
31
+ * Records of the content table for a slot capacity: twice the slots, so the table is at most half
32
+ * full and a key's sequence passes an empty record within a few probes, and no fewer than the probe
33
+ * limit, which a table holds (`chunk_hash_table_atomic`); a power of two.
34
+ *
35
+ * @param {number} slot_capacity
36
+ * @returns {number}
37
+ */
38
+ export function mesh_sdf_content_table_size(slot_capacity) {
39
+ return ceilPowerOfTwo(Math.max(HASH_TABLE_PROBE_LIMIT, 2 * slot_capacity));
40
+ }
41
+
42
+ /**
43
+ * The atlas's slots by what they hold, so that bricks of the same bytes share one slot. Each slot
44
+ * counts the entries holding it, and the content table lists slots under the content keys of their
45
+ * bytes, for bricks to find.
46
+ *
47
+ * A key names the slots that may hold a brick's bytes and never says that one does: a brick takes a
48
+ * slot it found only once its bytes and the slot's compare equal, so keys that agree for different
49
+ * bytes cost a share, never a brick its bytes. Every slot the table lists is held, free taking a
50
+ * slot's record out with its last entry. A slot listed nowhere, its insert refused (no record free
51
+ * within the probe limit) or its bytes never offered for sharing, is held all the same and never found.
52
+ *
53
+ * ```wgsl
54
+ * fn mesh_sdf_content_find(key: u32) -> u32 // the first slot listed under the key, or MESH_SDF_NO_CONTENT
55
+ * fn mesh_sdf_content_list(slot: u32, key: u32) // a slot about to hold bytes of the key, listed under it
56
+ * fn mesh_sdf_content_hold(slot: u32) // one entry more
57
+ * fn mesh_sdf_content_release(slot: u32) -> bool // one entry fewer: true for the last, its record gone
58
+ * ```
59
+ *
60
+ * The table keys a record by the key's high 31 bits, so a slot found counts only when the key it is
61
+ * listed under is the key. No find shares a dispatch with a list or a release: each meets the table
62
+ * as the dispatches before it left it.
63
+ *
64
+ * @type {CodeChunk}
65
+ */
66
+ export const chunk_mesh_sdf_contents = CodeChunk.from(
67
+ //language=WGSL
68
+ `
69
+ const MESH_SDF_CONTENT_WORDS = ${MESH_SDF_CONTENT_WORDS}u;
70
+
71
+ /** the key's records in the content table, whose keys stay below 0xFFFFFFFE: its high 31 bits */
72
+ fn mesh_sdf_content_table_key(key: u32) -> u32 {
73
+ return key >> 1u;
74
+ }
75
+
76
+ /** the key a slot is listed under: of no meaning for a slot listed nowhere */
77
+ fn mesh_sdf_content_key(slot: u32) -> u32 {
78
+ return atomicLoad(&mesh_sdf_contents[slot * MESH_SDF_CONTENT_WORDS + 1u]);
79
+ }
80
+
81
+ fn mesh_sdf_content_find(key: u32) -> u32 {
82
+ let table_key = mesh_sdf_content_table_key(key);
83
+
84
+ var cursor = hash_table_atomic_start(&mesh_sdf_content_table, 0u, table_key);
85
+
86
+ // the probe limit bounds the records a find meets
87
+ for (var i = 0u; i < HASH_TABLE_PROBE_LIMIT; i++) {
88
+ let record = hash_table_atomic_find(&mesh_sdf_content_table, 0u, table_key, &cursor);
89
+
90
+ if (record == HASH_TABLE_MISS) {
91
+ break;
92
+ }
93
+
94
+ let slot = hash_table_atomic_value(&mesh_sdf_content_table, record);
95
+
96
+ if (mesh_sdf_content_key(slot) == key) {
97
+ return slot;
98
+ }
99
+ }
100
+
101
+ return MESH_SDF_NO_CONTENT;
102
+ }
103
+
104
+ fn mesh_sdf_content_list(slot: u32, key: u32) {
105
+ atomicStore(&mesh_sdf_contents[slot * MESH_SDF_CONTENT_WORDS + 1u], key);
106
+
107
+ // refused, the slot is held all the same and never found
108
+ hash_table_atomic_insert(&mesh_sdf_content_table, 0u, mesh_sdf_content_table_key(key), slot);
109
+ }
110
+
111
+ fn mesh_sdf_content_hold(slot: u32) {
112
+ atomicAdd(&mesh_sdf_contents[slot * MESH_SDF_CONTENT_WORDS], 1u);
113
+ }
114
+
115
+ fn mesh_sdf_content_release(slot: u32) -> bool {
116
+ if (atomicSub(&mesh_sdf_contents[slot * MESH_SDF_CONTENT_WORDS], 1u) != 1u) {
117
+ return false;
118
+ }
119
+
120
+ // the slot's record, when it has one: no other record names it
121
+ let table_key = mesh_sdf_content_table_key(mesh_sdf_content_key(slot));
122
+
123
+ var cursor = hash_table_atomic_start(&mesh_sdf_content_table, 0u, table_key);
124
+
125
+ for (var i = 0u; i < HASH_TABLE_PROBE_LIMIT; i++) {
126
+ let record = hash_table_atomic_find(&mesh_sdf_content_table, 0u, table_key, &cursor);
127
+
128
+ if (record == HASH_TABLE_MISS) {
129
+ break;
130
+ }
131
+
132
+ if (hash_table_atomic_value(&mesh_sdf_content_table, record) == slot) {
133
+ hash_table_atomic_remove(&mesh_sdf_content_table, 0u, record);
134
+ break;
135
+ }
136
+ }
137
+
138
+ return true;
139
+ }
140
+ `, [
141
+ chunk_hash_table_atomic,
142
+ chunk_mesh_sdf_bake,
143
+ ]);
144
+
145
+ chunk_mesh_sdf_contents.requireResource(MESH_SDF_CONTENTS_RESOURCE);
146
+ chunk_mesh_sdf_contents.requireResource(MESH_SDF_CONTENT_TABLE_RESOURCE);
@@ -18,7 +18,7 @@ export const MESH_SDF_CLASSIFY_SETTINGS: WebGPUStruct;
18
18
  * whichever side of the surface it is on, since the vote casts no ray where the surface is not within
19
19
  * the band (UE 5.4's). Otherwise the brick goes onto the ring as `(geometry, generation, brick, 0)`,
20
20
  * for evaluate to settle. Either way its entry starts EMPTY, which is what a freed range must find in
21
- * an entry never stored.
21
+ * an entry never stored, and its number `MESH_SDF_UNNUMBERED`, until evaluate gives it a slot.
22
22
  *
23
23
  * A dropped brick is settled here: it counts its geometry's pending word down, and the last brick of
24
24
  * a geometry to settle logs it complete.