@woosh/meep-engine 3.59.0 → 3.60.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 (326) hide show
  1. package/package.json +1 -1
  2. package/src/shade/playground/probe_clipmap/index.html +12 -0
  3. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  4. package/src/shade/playground/probe_clipmap/main.js +5 -0
  5. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  6. package/src/shade/renderer/Renderer.js +4 -6
  7. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +63 -1
  8. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  9. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
  10. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
  11. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  12. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
  13. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
  14. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
  15. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
  16. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
  17. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
  18. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
  19. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
  20. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
  21. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
  22. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
  23. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
  24. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
  25. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
  26. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
  27. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
  28. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
  29. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
  30. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
  31. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
  32. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
  33. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
  34. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
  35. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
  36. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
  37. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
  38. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
  39. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
  40. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
  41. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
  42. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
  43. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
  44. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
  45. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +3 -9
  46. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  47. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +13 -31
  48. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +764 -48
  49. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
  50. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
  51. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  52. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
  53. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
  54. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  55. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
  56. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +11 -3
  57. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  58. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +13 -4
  59. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -18
  60. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  61. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -10
  62. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
  63. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  64. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
  65. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
  66. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  67. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
  68. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
  69. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
  70. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
  71. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -8
  72. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
  73. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -9
  74. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
  75. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
  76. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
  77. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -1
  78. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
  79. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -1
  80. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
  81. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
  82. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
  83. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
  84. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
  85. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
  86. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
  87. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
  88. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
  89. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
  90. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
  91. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
  92. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
  93. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
  94. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
  95. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
  96. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
  97. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
  98. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
  99. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
  101. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +21 -18
  102. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +254 -73
  104. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +149 -8
  105. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  106. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +181 -13
  107. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +179 -7
  108. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +412 -31
  110. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +4 -4
  111. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  112. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +4 -3
  113. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +36 -10
  114. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +218 -29
  116. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +5 -1
  117. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  118. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +24 -14
  119. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
  120. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
  121. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
  122. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
  123. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
  124. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
  125. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +18 -7
  126. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  127. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +157 -51
  128. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
  129. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
  130. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
  131. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
  132. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  133. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
  134. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +16 -3
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +55 -10
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +4 -8
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +21 -36
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +100 -30
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +3 -2
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +12 -12
  156. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
  157. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
  158. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
  159. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
  160. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
  161. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
  162. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
  163. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
  164. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
  165. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
  166. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
  167. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
  168. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
  169. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
  170. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
  171. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
  172. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
  173. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
  174. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
  175. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
  176. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
  177. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
  178. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
  179. package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
  180. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
  181. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  182. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
  183. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
  184. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  185. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
  186. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
  187. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
  188. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
  189. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
  190. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
  191. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
  192. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
  193. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  194. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
  195. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
  196. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
  197. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
  198. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
  199. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
  200. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
  201. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
  202. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
  203. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  204. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
  205. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
  206. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
  207. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
  208. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
  209. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
  210. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
  211. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
  212. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
  213. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
  214. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
  215. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
  216. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
  217. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
  218. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
  219. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
  220. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
  221. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
  222. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
  223. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
  224. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
  225. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
  226. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
  227. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
  228. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
  229. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
  230. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
  231. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
  232. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
  233. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
  234. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
  235. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
  236. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  237. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
  238. package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
  239. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
  241. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
  242. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
  243. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
  244. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
  245. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
  246. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
  247. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
  248. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
  249. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
  250. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
  251. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
  252. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
  253. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
  254. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
  255. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
  256. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  257. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
  258. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
  259. package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
  260. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  261. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +39 -18
  262. package/src/view/elements/progress/segmented/GhostTrail.d.ts +56 -0
  263. package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
  264. package/src/view/elements/progress/segmented/GhostTrail.js +98 -0
  265. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
  266. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
  267. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
  268. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
  269. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
  270. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
  271. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
  272. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
  273. package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
  274. package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
  275. package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
  276. package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
  277. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +155 -10
  278. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  279. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +427 -101
  280. package/src/view/elements/progress/segmented/playground/index.html +78 -0
  281. package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
  282. package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
  283. package/src/view/elements/progress/segmented/playground/main.js +173 -0
  284. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
  285. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
  286. package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
  287. package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
  288. package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
  289. package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
  290. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
  291. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
  292. package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
  293. package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -238
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +0 -99
  298. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +0 -1
  299. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +0 -139
  300. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +0 -65
  301. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +0 -1
  302. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +0 -393
  303. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +0 -17
  304. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +0 -1
  305. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +0 -36
  306. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +0 -29
  307. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +0 -1
  308. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +0 -108
  309. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +0 -31
  310. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +0 -1
  311. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +0 -113
  312. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +0 -36
  313. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +0 -1
  314. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +0 -85
  315. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +0 -23
  316. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +0 -1
  317. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +0 -273
  318. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +0 -13
  319. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +0 -1
  320. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +0 -151
  321. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +0 -13
  322. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +0 -1
  323. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +0 -133
  324. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +0 -22
  325. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +0 -1
  326. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +0 -135
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The arithmetic of the mesh provider's walks and records (`MESH_BRICK.js`), per invocation and pure,
3
+ * shared by its passes:
4
+ *
5
+ * ```wgsl
6
+ * fn mesh_brick_walk_spilled(start: u32, end: u32) -> u32 // nodes of an iteration past the frontier
7
+ * fn mesh_brick_walk_spill_index(slot: u32, start: u32) -> u32 // a child's place among them
8
+ * fn mesh_brick_records(entries: u32) -> u32 // records that hold that many entries
9
+ * fn mesh_brick_record(index: u32) -> u32 // a record's first word
10
+ * fn mesh_brick_accumulator(build: u32) -> u32 // a build slot's first accumulator word
11
+ * ```
12
+ *
13
+ * An iteration of a level appends the children it finds to the next level's list at places `start`
14
+ * to `end`, as their reservations came; the frontier keeps the places below
15
+ * {@link MESH_BRICK_FRONTIER}, and every child at or past it is handed on, at its place counted from
16
+ * whichever is later of `start` and the frontier. An iteration appends two children a lane at most,
17
+ * so it hands on at most twice {@link MESH_BRICK_BATCH}.
18
+ *
19
+ * @type {CodeChunk}
20
+ */
21
+ export const chunk_mesh_brick_walk: CodeChunk;
22
+ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
23
+ //# sourceMappingURL=chunk_mesh_brick_walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_brick_walk.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,oCAFU,SAAS,CAkChB;0BAjEuB,0CAA0C"}
@@ -0,0 +1,66 @@
1
+ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
2
+ import {
3
+ MESH_BRICK_ACCUMULATOR_FLAGS,
4
+ MESH_BRICK_ACCUMULATOR_OBJECTS,
5
+ MESH_BRICK_ACCUMULATOR_WORDS,
6
+ MESH_BRICK_BATCH,
7
+ MESH_BRICK_FLAG_TOUCHED,
8
+ MESH_BRICK_FLAG_UNFINISHED,
9
+ MESH_BRICK_FRONTIER,
10
+ MESH_BRICK_RECORD_HEADER_WORDS,
11
+ MESH_BRICK_RECORD_WORDS
12
+ } from "./MESH_BRICK.js";
13
+
14
+ /**
15
+ * The arithmetic of the mesh provider's walks and records (`MESH_BRICK.js`), per invocation and pure,
16
+ * shared by its passes:
17
+ *
18
+ * ```wgsl
19
+ * fn mesh_brick_walk_spilled(start: u32, end: u32) -> u32 // nodes of an iteration past the frontier
20
+ * fn mesh_brick_walk_spill_index(slot: u32, start: u32) -> u32 // a child's place among them
21
+ * fn mesh_brick_records(entries: u32) -> u32 // records that hold that many entries
22
+ * fn mesh_brick_record(index: u32) -> u32 // a record's first word
23
+ * fn mesh_brick_accumulator(build: u32) -> u32 // a build slot's first accumulator word
24
+ * ```
25
+ *
26
+ * An iteration of a level appends the children it finds to the next level's list at places `start`
27
+ * to `end`, as their reservations came; the frontier keeps the places below
28
+ * {@link MESH_BRICK_FRONTIER}, and every child at or past it is handed on, at its place counted from
29
+ * whichever is later of `start` and the frontier. An iteration appends two children a lane at most,
30
+ * so it hands on at most twice {@link MESH_BRICK_BATCH}.
31
+ *
32
+ * @type {CodeChunk}
33
+ */
34
+ export const chunk_mesh_brick_walk = CodeChunk.from(
35
+ //language=WGSL
36
+ `
37
+ const MESH_BRICK_BATCH = ${MESH_BRICK_BATCH}u;
38
+ const MESH_BRICK_FRONTIER = ${MESH_BRICK_FRONTIER}u;
39
+ const MESH_BRICK_RECORD_HEADER_WORDS = ${MESH_BRICK_RECORD_HEADER_WORDS}u;
40
+ const MESH_BRICK_RECORD_WORDS = ${MESH_BRICK_RECORD_WORDS}u;
41
+ const MESH_BRICK_ACCUMULATOR_OBJECTS = ${MESH_BRICK_ACCUMULATOR_OBJECTS}u;
42
+ const MESH_BRICK_ACCUMULATOR_FLAGS = ${MESH_BRICK_ACCUMULATOR_FLAGS}u;
43
+ const MESH_BRICK_ACCUMULATOR_WORDS = ${MESH_BRICK_ACCUMULATOR_WORDS}u;
44
+ const MESH_BRICK_FLAG_TOUCHED = ${MESH_BRICK_FLAG_TOUCHED}u;
45
+ const MESH_BRICK_FLAG_UNFINISHED = ${MESH_BRICK_FLAG_UNFINISHED}u;
46
+
47
+ fn mesh_brick_walk_spilled(start: u32, end: u32) -> u32 {
48
+ return select(0u, end - max(MESH_BRICK_FRONTIER, start), end > MESH_BRICK_FRONTIER);
49
+ }
50
+
51
+ fn mesh_brick_walk_spill_index(slot: u32, start: u32) -> u32 {
52
+ return slot - max(MESH_BRICK_FRONTIER, start);
53
+ }
54
+
55
+ fn mesh_brick_records(entries: u32) -> u32 {
56
+ return (entries + MESH_BRICK_BATCH - 1u) / MESH_BRICK_BATCH;
57
+ }
58
+
59
+ fn mesh_brick_record(index: u32) -> u32 {
60
+ return index * MESH_BRICK_RECORD_WORDS;
61
+ }
62
+
63
+ fn mesh_brick_accumulator(build: u32) -> u32 {
64
+ return build * MESH_BRICK_ACCUMULATOR_WORDS;
65
+ }
66
+ `);
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @type {WebGPUStruct}
3
+ */
4
+ export const MESH_BRICK_BATCH_SETTINGS: WebGPUStruct;
5
+ /**
6
+ * The mesh provider's batches (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): a workgroup
7
+ * a batch record the walks wrote, dispatched by its command (`shader_mesh_brick_command`).
8
+ *
9
+ * Its up to {@link MESH_BRICK_BATCH} rows, sorted ascending (a bitonic network, a lane a pair), become
10
+ * instances in workgroup memory, a lane each (`mesh_brick_instance`), and its cell's 512 texels are
11
+ * sampled over them in that order, eight a lane
12
+ * (`mesh_brick_texel`: the least distance and its row, the box test first). Each texel's byte goes into
13
+ * the cell's accumulators by an atomic maximum of 255 less it, and each 2³ object cell's nearest texel
14
+ * bids its key by another (`brick_object_key`): the least byte and the nearest row over every batch
15
+ * of the cell, whatever order the batches ran in. The staging is the resolve's to write.
16
+ *
17
+ * The order is what keeps a cell of up to {@link MESH_BRICK_BATCH} rows, one batch, the same however the walk
18
+ * found its rows: the box test is exact only where an instance's field is not negative outside its box,
19
+ * and where it is, which instances it passes over depends on the order it meets them in.
20
+ *
21
+ * Per lane, 21 steps of the sort at most, then eight texels, each at most {@link MESH_BRICK_BATCH} box tests and
22
+ * as many taps.
23
+ *
24
+ * @type {ComputeShader}
25
+ */
26
+ export const shader_mesh_brick_batch: ComputeShader;
27
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
28
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
29
+ //# sourceMappingURL=shader_mesh_brick_batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_mesh_brick_batch.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js"],"names":[],"mappings":"AAyBA;;GAEG;AACH,wCAFU,YAAY,CAOO;AAuJ7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,sCAFU,aAAa,CAMpB;6BAnM0B,yCAAyC;8BAJxC,qCAAqC"}
@@ -0,0 +1,210 @@
1
+ import {
2
+ MESH_SDF_ATLAS_RESOURCE,
3
+ MESH_SDF_HEADERS_RESOURCE,
4
+ MESH_SDF_INDIRECTION_RESOURCE,
5
+ MESH_SDF_SAMPLER_RESOURCE
6
+ } from "../../../../geometry/sdf/MESH_SDF_RESOURCES.js";
7
+ import { chunk_sort_bitonic_comparator } from "../../../../gpu_primitive/sort/chunk_sort_bitonic_comparator.js";
8
+ import { CLIPMAP_LEVEL_ARRAY } from "../../../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
9
+ import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
10
+ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
11
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
12
+ import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
13
+ import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
14
+ import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
15
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
16
+ import { BRICK_CELL_WORKGROUP_SIZE, BRICK_OBJECT_CELLS_PER_AXIS } from "../BRICK_CLIPMAP.js";
17
+ import { chunk_brick_object } from "../chunk_brick_object.js";
18
+ import { chunk_brick_provider } from "../chunk_brick_provider.js";
19
+ import { BRICK_RING_RESOURCE, BRICK_TAKE_RESOURCE, chunk_brick_clipmap } from "../chunk_brick_clipmap.js";
20
+ import { chunk_mesh_brick_instance } from "./chunk_mesh_brick_instance.js";
21
+ import { chunk_mesh_brick_texel } from "./chunk_mesh_brick_texel.js";
22
+ import { chunk_mesh_brick_walk } from "./chunk_mesh_brick_walk.js";
23
+ import { MESH_BRICK_COUNTER_BATCH_GROUPS } from "./MESH_BRICK.js";
24
+ import { MESH_BRICK_INSTANCE_STRUCT } from "./MESH_BRICK_INSTANCE_STRUCT.js";
25
+
26
+ /**
27
+ * @type {WebGPUStruct}
28
+ */
29
+ export const MESH_BRICK_BATCH_SETTINGS = WebGPUStruct.from({
30
+ /** keys `brick_ring` holds, a power of two */
31
+ ring_capacity: u32,
32
+ /** cells a cascade's window has a side */
33
+ resolution: u32,
34
+ }, "MeshBrickBatchSettings");
35
+
36
+ const resources = new ShaderResourceSetDescriptor();
37
+
38
+ resources.setImmediate("settings", MESH_BRICK_BATCH_SETTINGS);
39
+
40
+ resources.createGroup()
41
+ .add(BRICK_TAKE_RESOURCE)
42
+ .add(BRICK_RING_RESOURCE)
43
+ .addUniform("brick_levels", CLIPMAP_LEVEL_ARRAY)
44
+ .addStorageBuffer("mesh_brick_counters", WebGPUArray.from(atomic_u32), true)
45
+ .addStorageBuffer("mesh_brick_batches", WebGPUArray.u32)
46
+ .addStorageBuffer("mesh_brick_accumulators", WebGPUArray.from(atomic_u32), true);
47
+
48
+ resources.createGroup()
49
+ .addStorageBuffer("scene_database", WebGPUArray.from(u32))
50
+ .add(MESH_SDF_HEADERS_RESOURCE)
51
+ .add(MESH_SDF_INDIRECTION_RESOURCE)
52
+ .add(MESH_SDF_ATLAS_RESOURCE)
53
+ .add(MESH_SDF_SAMPLER_RESOURCE);
54
+
55
+ const body = CodeChunk.from(
56
+ //language=WGSL
57
+ `
58
+ var<workgroup> instances: array<${MESH_BRICK_INSTANCE_STRUCT.wgsl_ref}, MESH_BRICK_BATCH>;
59
+
60
+ /** the batch's rows, ascending */
61
+ var<workgroup> batch_rows: array<u32, MESH_BRICK_BATCH>;
62
+
63
+ /** per object cell: its nearest texel's key over the batch, and its lanes done */
64
+ var<workgroup> object_best: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
65
+ var<workgroup> object_lanes: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
66
+
67
+ /** lane 0's: the batches, and this one's build slot and rows */
68
+ var<workgroup> batch_header: vec3<u32>;
69
+
70
+ fn mesh_brick_instance_at(i: u32) -> ${MESH_BRICK_INSTANCE_STRUCT.wgsl_ref} {
71
+ return instances[i];
72
+ }
73
+
74
+ @compute @workgroup_size(${BRICK_CELL_WORKGROUP_SIZE})
75
+ fn main(
76
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
77
+ @builtin(local_invocation_index) lane: u32,
78
+ ) {
79
+ let index = folded_workgroup_index(workgroup_id);
80
+
81
+ if (lane == 0u) {
82
+ let batches = atomicLoad(&mesh_brick_counters[${MESH_BRICK_COUNTER_BATCH_GROUPS}u]);
83
+ var build = 0u;
84
+ var rows = 0u;
85
+
86
+ if (index < batches) {
87
+ build = mesh_brick_batches[mesh_brick_record(index)];
88
+ rows = mesh_brick_batches[mesh_brick_record(index) + 1u];
89
+ }
90
+
91
+ batch_header = vec3<u32>(batches, build, rows);
92
+ }
93
+
94
+ let header = workgroupUniformLoad(&batch_header);
95
+
96
+ // a folded dispatch's tail leaves whole
97
+ if (index >= header.x) {
98
+ return;
99
+ }
100
+
101
+ let build = header.y;
102
+ let count = header.z;
103
+ let at = brick_provider_cell(brick_provider_key(build, settings.ring_capacity), settings.resolution);
104
+
105
+ // the rows in ascending order, the slots past them last: a texel meets them in the same order however the walk
106
+ // found them, and its box test with them
107
+ batch_rows[lane] = select(0xffffffffu, mesh_brick_batches[mesh_brick_record(index) + MESH_BRICK_RECORD_HEADER_WORDS + lane], lane < count);
108
+
109
+ workgroupBarrier();
110
+
111
+ let size = sort_bitonic_size(count);
112
+
113
+ for (var block = 2u; block <= size; block <<= 1u) {
114
+ for (var stride = block >> 1u; stride > 0u; stride >>= 1u) {
115
+ if (lane < (size >> 1u)) {
116
+ let slots = sort_bitonic_comparator(lane, block, stride);
117
+ let low = batch_rows[slots.x];
118
+ let high = batch_rows[slots.y];
119
+
120
+ if (high < low) {
121
+ batch_rows[slots.x] = high;
122
+ batch_rows[slots.y] = low;
123
+ }
124
+ }
125
+
126
+ workgroupBarrier();
127
+ }
128
+ }
129
+
130
+ if (lane < count) {
131
+ instances[lane] = mesh_brick_instance(batch_rows[lane], at.voxel);
132
+ }
133
+
134
+ workgroupBarrier();
135
+
136
+ // eight texels a lane, x fastest, at y = lane mod 8 and z = lane / 8
137
+ let y = lane % 8u;
138
+ let z = lane / 8u;
139
+ let accumulator = mesh_brick_accumulator(build);
140
+
141
+ var best = vec4<u32>(0u);
142
+
143
+ for (var x = 0u; x < 8u; x++) {
144
+ let texel = mesh_brick_texel(at.corner + vec3<f32>(f32(x), f32(y), f32(z)) * at.voxel, count, at.band);
145
+ let byte = brick_encode(texel.distance, at.band);
146
+
147
+ // the cell's least byte over its batches, as the most of 255 less each; +R raises nothing
148
+ if (byte < 255u) {
149
+ atomicMax(&mesh_brick_accumulators[accumulator + x + 8u * (y + 8u * z)], 255u - byte);
150
+ }
151
+
152
+ let o = x / 2u;
153
+
154
+ best[o] = max(best[o], brick_object_key(byte, texel.row));
155
+ }
156
+
157
+ // per object cell, its four lanes fold in their texels, and the last bids the batch's nearest
158
+ for (var o = 0u; o < ${BRICK_OBJECT_CELLS_PER_AXIS}u; o++) {
159
+ let object = o + ${BRICK_OBJECT_CELLS_PER_AXIS}u * ((y / 2u) + ${BRICK_OBJECT_CELLS_PER_AXIS}u * (z / 2u));
160
+
161
+ atomicMax(&object_best[object], best[o]);
162
+
163
+ if (atomicAdd(&object_lanes[object], 1u) != 3u) {
164
+ continue;
165
+ }
166
+
167
+ let nearest = atomicLoad(&object_best[object]);
168
+
169
+ if (brick_object_key_byte(nearest) < 255u) {
170
+ atomicMax(&mesh_brick_accumulators[accumulator + MESH_BRICK_ACCUMULATOR_OBJECTS + object], nearest);
171
+ }
172
+ }
173
+ }
174
+ `, [
175
+ chunk_brick_clipmap,
176
+ chunk_brick_provider,
177
+ chunk_folded_workgroup_index,
178
+ chunk_mesh_brick_walk,
179
+ chunk_mesh_brick_instance,
180
+ chunk_mesh_brick_texel,
181
+ chunk_brick_object,
182
+ chunk_sort_bitonic_comparator,
183
+ ]);
184
+
185
+ /**
186
+ * The mesh provider's batches (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): a workgroup
187
+ * a batch record the walks wrote, dispatched by its command (`shader_mesh_brick_command`).
188
+ *
189
+ * Its up to {@link MESH_BRICK_BATCH} rows, sorted ascending (a bitonic network, a lane a pair), become
190
+ * instances in workgroup memory, a lane each (`mesh_brick_instance`), and its cell's 512 texels are
191
+ * sampled over them in that order, eight a lane
192
+ * (`mesh_brick_texel`: the least distance and its row, the box test first). Each texel's byte goes into
193
+ * the cell's accumulators by an atomic maximum of 255 less it, and each 2³ object cell's nearest texel
194
+ * bids its key by another (`brick_object_key`): the least byte and the nearest row over every batch
195
+ * of the cell, whatever order the batches ran in. The staging is the resolve's to write.
196
+ *
197
+ * The order is what keeps a cell of up to {@link MESH_BRICK_BATCH} rows, one batch, the same however the walk
198
+ * found its rows: the box test is exact only where an instance's field is not negative outside its box,
199
+ * and where it is, which instances it passes over depends on the order it meets them in.
200
+ *
201
+ * Per lane, 21 steps of the sort at most, then eight texels, each at most {@link MESH_BRICK_BATCH} box tests and
202
+ * as many taps.
203
+ *
204
+ * @type {ComputeShader}
205
+ */
206
+ export const shader_mesh_brick_batch = ComputeShader.from({
207
+ label: "Brick Clipmap Mesh Batch",
208
+ resources,
209
+ body,
210
+ });
@@ -0,0 +1,29 @@
1
+ /**
2
+ * No counter to clear.
3
+ * @type {number}
4
+ */
5
+ export const MESH_BRICK_COMMAND_CLEAR_NONE: number;
6
+ /**
7
+ * Words a command takes in `mesh_brick_commands`: the three workgroup counts, and a word of padding.
8
+ * @type {number}
9
+ */
10
+ export const MESH_BRICK_COMMAND_WORDS: number;
11
+ /**
12
+ * @type {WebGPUStruct}
13
+ */
14
+ export const MESH_BRICK_COMMAND_SETTINGS: WebGPUStruct;
15
+ /**
16
+ * The mesh provider's command for a round of walks or for the batches (§7.7, as S9 built it): one
17
+ * thread, between the pass that asked for the records and the pass that runs a workgroup a record.
18
+ *
19
+ * It reads how many records were asked for, writes how many the capacity holds where the dispatched
20
+ * pass reads its workgroups, keeps the most ever asked for for the host to grow on, clears the counter
21
+ * the dispatched pass appends to, and writes the folded dispatch (`folded_dispatch`). A pass never
22
+ * writes the command it is dispatched through.
23
+ *
24
+ * @type {ComputeShader}
25
+ */
26
+ export const shader_mesh_brick_command: ComputeShader;
27
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
28
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
29
+ //# sourceMappingURL=shader_mesh_brick_command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_mesh_brick_command.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,4CAFU,MAAM,CAEwC;AAExD;;;GAGG;AACH,uCAFU,MAAM,CAE0B;AAE1C;;GAEG;AACH,0CAFU,YAAY,CAeS;AAU/B;;;;;;;;;;GAUG;AACH,wCAFU,aAAa,CA8BpB;6BA/E0B,yCAAyC;8BAJxC,qCAAqC"}
@@ -0,0 +1,86 @@
1
+ import { chunk_folded_dispatch } from "../../../../gpu_primitive/indirect/chunk_folded_dispatch.js";
2
+ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
3
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
4
+ import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
5
+ import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
6
+ import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
7
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
8
+
9
+ /**
10
+ * No counter to clear.
11
+ * @type {number}
12
+ */
13
+ export const MESH_BRICK_COMMAND_CLEAR_NONE = 0xffffffff;
14
+
15
+ /**
16
+ * Words a command takes in `mesh_brick_commands`: the three workgroup counts, and a word of padding.
17
+ * @type {number}
18
+ */
19
+ export const MESH_BRICK_COMMAND_WORDS = 4;
20
+
21
+ /**
22
+ * @type {WebGPUStruct}
23
+ */
24
+ export const MESH_BRICK_COMMAND_SETTINGS = WebGPUStruct.from({
25
+ /** the counter of the records asked for */
26
+ asked: u32,
27
+ /** where the workgroups go: the records asked for, as many as the capacity holds */
28
+ groups: u32,
29
+ /** records the buffer holds */
30
+ capacity: u32,
31
+ /** the statistic that keeps the most ever asked for */
32
+ peak: u32,
33
+ /** a counter the dispatched pass appends to from 0, or {@link MESH_BRICK_COMMAND_CLEAR_NONE} */
34
+ clear: u32,
35
+ /** the command's first word in `mesh_brick_commands` */
36
+ command: u32,
37
+ }, "MeshBrickCommandSettings");
38
+
39
+ const resources = new ShaderResourceSetDescriptor();
40
+
41
+ resources.setImmediate("settings", MESH_BRICK_COMMAND_SETTINGS);
42
+
43
+ resources.createGroup()
44
+ .addStorageBuffer("mesh_brick_counters", WebGPUArray.from(atomic_u32), true)
45
+ .addStorageBuffer("mesh_brick_commands", WebGPUArray.u32, true);
46
+
47
+ /**
48
+ * The mesh provider's command for a round of walks or for the batches (§7.7, as S9 built it): one
49
+ * thread, between the pass that asked for the records and the pass that runs a workgroup a record.
50
+ *
51
+ * It reads how many records were asked for, writes how many the capacity holds where the dispatched
52
+ * pass reads its workgroups, keeps the most ever asked for for the host to grow on, clears the counter
53
+ * the dispatched pass appends to, and writes the folded dispatch (`folded_dispatch`). A pass never
54
+ * writes the command it is dispatched through.
55
+ *
56
+ * @type {ComputeShader}
57
+ */
58
+ export const shader_mesh_brick_command = ComputeShader.from({
59
+ label: "Brick Clipmap Mesh Command",
60
+ resources,
61
+ body: CodeChunk.from(
62
+ //language=WGSL
63
+ `
64
+ @compute @workgroup_size(1)
65
+ fn main() {
66
+ let asked = atomicLoad(&mesh_brick_counters[settings.asked]);
67
+ let groups = min(asked, settings.capacity);
68
+
69
+ atomicStore(&mesh_brick_counters[settings.groups], groups);
70
+ atomicMax(&mesh_brick_counters[settings.peak], asked);
71
+
72
+ if (settings.clear != ${MESH_BRICK_COMMAND_CLEAR_NONE}u) {
73
+ atomicStore(&mesh_brick_counters[settings.clear], 0u);
74
+ }
75
+
76
+ let folded = folded_dispatch(groups);
77
+
78
+ // word by word: the emulator drops a whole-value store into a storage variable
79
+ mesh_brick_commands[settings.command] = folded.x;
80
+ mesh_brick_commands[settings.command + 1u] = folded.y;
81
+ mesh_brick_commands[settings.command + 2u] = folded.z;
82
+ }
83
+ `, [
84
+ chunk_folded_dispatch,
85
+ ]),
86
+ });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @type {WebGPUStruct}
3
+ */
4
+ export const MESH_BRICK_GATHER_SETTINGS: WebGPUStruct;
5
+ /**
6
+ * The mesh provider's walk (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): every instance
7
+ * whose box comes within the band of a taken cell, gathered whole, a workgroup a walk.
8
+ *
9
+ * A walk expands the TLAS a level at a time, as the cooperative query does (`chunk_bvh_query_aabb_cooperative`):
10
+ * each node of the level is tested by a lane against the cell grown by the cascade's band, the children
11
+ * of an overlapping internal node go on the next level, and an overlapping leaf is a row when
12
+ * `mesh_brick_accept` takes it. Nothing is dropped:
13
+ * - a level keeps {@link MESH_BRICK_FRONTIER} nodes, and the children that fall past them are handed on in
14
+ * task records of up to {@link MESH_BRICK_BATCH} nodes, each a walk of the next round, which this same
15
+ * kernel runs from them;
16
+ * - rows leave in batch records of {@link MESH_BRICK_BATCH}, and the rows left when the walk ends in one
17
+ * more.
18
+ *
19
+ * Round 0 walks from the root, a workgroup a taken cell, dispatched by take; a later round's
20
+ * dispatch comes from its command (`shader_mesh_brick_command`). Round 0's walk of a cell opens the
21
+ * cell's frame by clearing its flags; the walk that first flags it lists it for the resolve
22
+ * (`mesh_brick_resolves`), so the resolve runs on the cells a batch reached or a walk could not finish,
23
+ * and on no other. A record the capacity cannot hold, a level past the walk's budget, or a hand-off in
24
+ * the frame's last round leaves the walk unfinished: it is counted, and the resolve asks for the cell
25
+ * again. Of the records a walk asks for at once, those below the capacity are kept, so that every record
26
+ * a command dispatches was written this frame.
27
+ *
28
+ * An iteration of a level costs the workgroup a barrier and a `workgroupUniformLoad`, and a barrier
29
+ * more after one whose hand-off copied records out: lane 0 hands every lane where the next iteration's
30
+ * children start and, on the level's last, how many nodes the next level holds.
31
+ *
32
+ * Per lane and level, at most {@link MESH_BRICK_FRONTIER} / {@link MESH_BRICK_BATCH} node reads, accepts
33
+ * and appends, over at most {@link BVH_QUERY_AABB_LEVEL_BUDGET} levels; per iteration, two task entries
34
+ * and two batch entries copied at most.
35
+ *
36
+ * @type {ComputeShader}
37
+ */
38
+ export const shader_mesh_brick_gather: ComputeShader;
39
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
40
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
41
+ //# sourceMappingURL=shader_mesh_brick_gather.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_mesh_brick_gather.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js"],"names":[],"mappings":"AAuCA;;GAEG;AACH,yCAFU,YAAY,CAeQ;AA0V9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,uCAFU,aAAa,CAMpB;6BApa0B,yCAAyC;8BAJxC,qCAAqC"}