@woosh/meep-engine 3.25.0 → 3.27.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 (295) hide show
  1. package/package.json +1 -1
  2. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
  3. package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
  4. package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
  5. package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
  6. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
  7. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
  8. package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
  9. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
  10. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
  11. package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
  12. package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
  13. package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
  14. package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
  15. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +66 -0
  16. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  17. package/src/core/geom/3d/shape/HeightMapShape3D.js +314 -20
  18. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  19. package/src/core/geom/3d/shape/PosedShape3D.js +57 -0
  20. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  21. package/src/core/geom/3d/shape/TransformedShape3D.js +102 -0
  22. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  23. package/src/core/geom/3d/shape/UnionShape3D.js +64 -0
  24. package/src/engine/physics/cloth/MEASUREMENTS.md +582 -0
  25. package/src/engine/physics/cloth/PLAN.md +330 -49
  26. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +84 -17
  27. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  28. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +451 -42
  29. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +65 -7
  30. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  31. package/src/engine/physics/cloth/ecs/ClothInstance.js +72 -8
  32. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +25 -4
  33. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  34. package/src/engine/physics/cloth/ecs/ClothSystem.js +75 -8
  35. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +41 -4
  36. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  37. package/src/engine/physics/cloth/ecs/ClothWorld.js +207 -63
  38. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +10 -0
  39. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
  40. package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +17 -1
  41. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +27 -3
  42. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  43. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +28 -3
  44. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +75 -10
  45. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  46. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +131 -12
  47. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -0
  48. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  49. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +249 -201
  50. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -0
  51. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  52. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +62 -1
  53. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  54. package/src/engine/physics/cloth/ecs/cloth_write_back.js +18 -10
  55. package/src/engine/physics/cloth/playground/collide_main.js +1 -1
  56. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +29 -8
  57. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  58. package/src/engine/physics/cloth/solver/cloth_contact_find.js +37 -9
  59. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +12 -2
  60. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
  61. package/src/engine/physics/cloth/solver/cloth_solver_constants.js +12 -2
  62. package/src/engine/physics/cloth/solver/cloth_step_instance.js +1 -1
  63. package/src/engine/physics/cloth/solver/constraint/cloth_backstop_row.d.ts +9 -2
  64. package/src/engine/physics/cloth/solver/constraint/cloth_backstop_row.d.ts.map +1 -1
  65. package/src/engine/physics/cloth/solver/constraint/cloth_backstop_row.js +9 -2
  66. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +23 -9
  67. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts.map +1 -1
  68. package/src/engine/physics/cloth/wind/AbstractClothWind.js +23 -9
  69. package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts +7 -5
  70. package/src/engine/physics/cloth/wind/ClothAmbientWind.d.ts.map +1 -1
  71. package/src/engine/physics/cloth/wind/ClothAmbientWind.js +12 -9
  72. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  73. package/src/engine/physics/cloth/wind/ClothFluidWind.js +5 -2
  74. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +7 -2
  75. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
  76. package/src/engine/physics/cloth/wind/cloth_sample_air.js +12 -5
  77. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  78. package/src/shade/playground/vgeo_runtime/README.md +167 -22
  79. package/src/shade/playground/vgeo_runtime/index.html +112 -62
  80. package/src/shade/playground/vgeo_runtime/main.js +660 -83
  81. package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
  82. package/src/shade/playground/vgeo_viewer/sample_asset.js +19 -2
  83. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
  84. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  85. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
  86. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  87. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
  88. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +73 -5
  89. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +26 -15
  90. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +5 -3
  91. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +18 -0
  92. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  93. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +20 -0
  94. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
  95. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +56 -9
  96. package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
  97. package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +1 -0
  98. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
  99. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  100. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
  101. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
  102. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
  103. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
  104. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
  105. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
  106. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +11 -3
  107. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -0
  108. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
  109. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +10 -1
  110. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
  111. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
  112. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
  113. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
  114. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
  115. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
  116. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
  117. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
  118. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
  119. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
  120. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
  121. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
  122. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
  123. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
  124. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
  125. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
  126. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
  127. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
  128. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
  129. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
  130. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
  131. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
  132. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
  133. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
  134. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  135. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
  136. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
  137. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
  138. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
  139. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
  140. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
  142. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
  143. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
  144. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
  145. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
  146. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
  148. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
  149. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
  150. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
  151. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
  152. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
  153. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
  154. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  155. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +55 -0
  156. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +202 -13
  158. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  159. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +147 -10
  160. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +637 -0
  161. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
  162. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
  164. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +58 -28
  165. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +77 -105
  167. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
  168. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +105 -22
  169. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
  170. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
  171. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  172. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +47 -489
  173. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
  174. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
  175. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
  176. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
  177. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
  178. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1363 -0
  179. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
  180. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
  182. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
  183. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  184. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
  185. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
  186. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
  187. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
  188. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
  189. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
  190. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
  191. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
  192. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
  193. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
  194. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  195. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
  196. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  197. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +15 -0
  198. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  199. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
  200. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
  201. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
  202. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
  203. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
  204. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
  205. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
  206. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
  207. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +186 -0
  208. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  209. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +20 -8
  210. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  211. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +580 -188
  212. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
  213. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  214. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
  215. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  216. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
  217. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
  218. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +11 -0
  219. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
  220. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
  221. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
  222. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
  223. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
  224. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
  225. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
  226. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
  227. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
  228. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
  229. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
  230. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
  231. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
  232. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
  233. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
  234. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
  235. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
  236. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
  237. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
  238. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
  239. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
  240. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
  241. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
  242. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
  243. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
  244. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
  245. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
  246. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
  247. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
  248. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
  249. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
  250. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
  251. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
  252. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
  253. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
  254. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +38 -1
  255. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  256. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +4 -3
  257. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  258. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  259. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
  260. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  261. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
  262. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  263. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  264. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
  265. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
  266. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  267. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
  268. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  269. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
  270. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  271. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +3 -4
  272. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  273. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
  274. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
  275. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
  276. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  277. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +83 -78
  278. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  279. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +7 -1
  280. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  281. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +7 -1
  282. package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
  283. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  284. package/src/shade/renderer/scene/GPUSceneContext.js +59 -4
  285. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  286. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
  287. package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
  288. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  289. package/src/shade/renderer/view/GPUViewContext.js +21 -0
  290. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  291. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
  292. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
  293. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
  294. package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
  295. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
@@ -1,3 +1,4 @@
1
+ import { assert } from "../../../../../core/assert.js";
1
2
  import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
3
  import { shader_hzb_mesh_filter_2way } from "../../cull/hzb/shader_hzb_mesh_filter_2way.js"
3
4
  import { U32_CONTAINER_STRUCT } from "../../../shader/type/U32_CONTAINER_STRUCT.js";
@@ -44,6 +45,7 @@ export function pass_mesh_cull(data, resources, context) {
44
45
 
45
46
  const bucket_id = data.bucket_index;
46
47
 
48
+ assert.isNonNegativeInteger(bucket_id, 'bucket_id');
47
49
 
48
50
  build_indirect_compute_dispatch_command(
49
51
  COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
@@ -55,17 +57,15 @@ export function pass_mesh_cull(data, resources, context) {
55
57
  0
56
58
  );
57
59
 
58
- const bucket_index = encoder.allocateTransientValueBuffer(
59
- U32_CONTAINER_STRUCT,
60
- {
61
- value: bucket_id,
62
- }
63
- );
60
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
61
+ const u_bucket_index = encoder.allocateTransientValueBuffer(U32_CONTAINER_STRUCT, {
62
+ value: bucket_id,
63
+ });
64
64
 
65
65
  shader_hzb_mesh_filter_2way.dispatchIndirect({
66
66
  encoder,
67
67
  bindings: {
68
- bucket_index,
68
+ bucket_index: u_bucket_index,
69
69
  camera_previous: view_ctx.gpu_previous_camera_state.buffer,
70
70
  bucket_data,
71
71
  scene_database: gpu_scene.scene_database_buffer,
@@ -1 +1 @@
1
- {"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH;IAN+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACU,SAAS,EAAzB,MAAM;IACuB,MAAM;IACjC,MAAM,CA2DlB"}
1
+ {"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH;IAN+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACU,SAAS,EAAzB,MAAM;IACuB,MAAM;IACjC,MAAM,CAgElB"}
@@ -1,79 +1,84 @@
1
- import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
4
- import {
5
- build_indirect_compute_dispatch_command,
6
- INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
- } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
- import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
9
- import { shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
10
-
11
- /**
12
- * Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
13
- * Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
14
- *
15
- * @param {Object} options
16
- * @param {FrameGraph} options.graph
17
- * @param {number} options.buckets bucket-sorted meshes resource ID
18
- * @param {number} options.bucket_id
19
- * @param {GPUCollectionLimits} options.limits
20
- * @returns {number} resource ID of extracted mesh list
21
- */
22
- export function graph_extract_meshes_from_bucket({
23
- graph,
24
- buckets,
25
- bucket_id,
26
- limits,
27
- }) {
28
-
29
- /**
30
- *
31
- * @param data
32
- * @param {FramePassResources} resources
33
- * @param {GraphicsExecutionContext} context
34
- */
35
- function execute(data, resources, context) {
36
- const encoder = context.encoder;
37
-
38
- const buckets = resources.get(data.buckets);
39
- const output = resources.get(data.output);
40
- const command = resources.get(data.command);
41
-
42
- const bucket_id = data.bucket_id;
43
-
44
- build_indirect_compute_dispatch_command(
45
- COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
46
- encoder,
47
- buckets,
48
- // the bucketed buffer header consists of pairs of u32 values (count,offset)
49
- bucket_id * (u32.size * 2),
50
- command,
51
- 0
52
- );
53
-
54
- shader_read_out_bucket.dispatchIndirect({
55
- encoder,
56
- command,
57
- bindings: {
58
- settings: { bucket_id },
59
- input: buckets,
60
- output,
61
- }
62
- });
63
- }
64
-
65
- const data = {};
66
-
67
- const pass = graph.add("extract meshes from bucket", data, execute);
68
-
69
- data.buckets = pass.read(buckets);
70
- data.bucket_id = bucket_id;
71
- data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
72
- data.output = pass.create("output", BufferResourceDescriptor.from(
73
- limits.compute_buffer_size(RasterizationCollectionType.Meshes),
74
- GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
75
- 0, 16 // clear count
76
- ));
77
-
78
- return data.output;
1
+ import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
4
+ import {
5
+ build_indirect_compute_dispatch_command,
6
+ INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
+ } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
+ import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
9
+ import { PUSH_CONSTANTS, shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
10
+
11
+ /**
12
+ * Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
13
+ * Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
14
+ *
15
+ * @param {Object} options
16
+ * @param {FrameGraph} options.graph
17
+ * @param {number} options.buckets bucket-sorted meshes resource ID
18
+ * @param {number} options.bucket_id
19
+ * @param {GPUCollectionLimits} options.limits
20
+ * @returns {number} resource ID of extracted mesh list
21
+ */
22
+ export function graph_extract_meshes_from_bucket({
23
+ graph,
24
+ buckets,
25
+ bucket_id,
26
+ limits,
27
+ }) {
28
+
29
+ /**
30
+ *
31
+ * @param data
32
+ * @param {FramePassResources} resources
33
+ * @param {GraphicsExecutionContext} context
34
+ */
35
+ function execute(data, resources, context) {
36
+ const encoder = context.encoder;
37
+
38
+ const buckets = resources.get(data.buckets);
39
+ const output = resources.get(data.output);
40
+ const command = resources.get(data.command);
41
+
42
+ const bucket_id = data.bucket_id;
43
+
44
+ build_indirect_compute_dispatch_command(
45
+ COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
46
+ encoder,
47
+ buckets,
48
+ // the bucketed buffer header consists of pairs of u32 values (count,offset)
49
+ bucket_id * (u32.size * 2),
50
+ command,
51
+ 0
52
+ );
53
+
54
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
55
+ const u_settings = encoder.allocateTransientValueBuffer(PUSH_CONSTANTS, {
56
+ bucket_id,
57
+ });
58
+
59
+ shader_read_out_bucket.dispatchIndirect({
60
+ encoder,
61
+ command,
62
+ bindings: {
63
+ settings: u_settings,
64
+ input: buckets,
65
+ output,
66
+ }
67
+ });
68
+ }
69
+
70
+ const data = {};
71
+
72
+ const pass = graph.add("extract meshes from bucket", data, execute);
73
+
74
+ data.buckets = pass.read(buckets);
75
+ data.bucket_id = bucket_id;
76
+ data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
77
+ data.output = pass.create("output", BufferResourceDescriptor.from(
78
+ limits.compute_buffer_size(RasterizationCollectionType.Meshes),
79
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
80
+ 0, 16 // clear count
81
+ ));
82
+
83
+ return data.output;
79
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_partial_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;GAeG;AACH,gMAFa;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CAwMjG"}
1
+ {"version":3,"file":"graph_rasterize_partial_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;GAeG;AACH,gMAFa;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CA6MjG"}
@@ -3,6 +3,7 @@ import { noop } from "../../../../core/function/noop.js";
3
3
  import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
4
4
  import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
5
  import { shader_hzb_mesh_filter_2way } from "../cull/hzb/shader_hzb_mesh_filter_2way.js";
6
+ import { U32_CONTAINER_STRUCT } from "../../shader/type/U32_CONTAINER_STRUCT.js";
6
7
  import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
7
8
  import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
8
9
  import { TransparencyMode } from "../../material/TransparencyMode.js";
@@ -95,11 +96,16 @@ export function graph_rasterize_partial_opaque({
95
96
  0
96
97
  );
97
98
 
99
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
100
+ const u_bucket_index = encoder.allocateTransientValueBuffer(U32_CONTAINER_STRUCT, {
101
+ value: bucket_index,
102
+ });
103
+
98
104
  // split 2 ways
99
105
  shader_hzb_mesh_filter_2way.dispatchIndirect({
100
106
  encoder,
101
107
  bindings: {
102
- bucket_index: { value: bucket_index },
108
+ bucket_index: u_bucket_index,
103
109
  camera_previous,
104
110
  bucket_data: buckets,
105
111
  scene_database: scene_ctx.scene_database_buffer,
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_remaining_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js"],"names":[],"mappings":"AA0FA;;;;;;;;;;;;;;;;;GAiBG;AACH,kOAFa;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CA4GlD"}
1
+ {"version":3,"file":"graph_rasterize_remaining_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js"],"names":[],"mappings":"AAgGA;;;;;;;;;;;;;;;;;GAiBG;AACH,kOAFa;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CA4GlD"}
@@ -10,6 +10,7 @@ import { build_indirect_compute_dispatch_command } from "../../gpu_primitive/ind
10
10
  import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
11
11
  import { graph_sort_meshlets_by_bucket_id } from "../expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js";
12
12
  import { shader_meshlets_extract_bucket } from "../expand/bucket/meshlet/shader_meshlets_extract_bucket.js";
13
+ import { U32_CONTAINER_STRUCT } from "../../shader/type/U32_CONTAINER_STRUCT.js";
13
14
  import { graph_mesh_filter_one_way } from "../expand/graph_mesh_filter_one_way.js";
14
15
  import { graph_meshlets_filter_one_way } from "../expand/graph_meshlets_filter_one_way.js";
15
16
  import { graph_meshlets_rasterize } from "../expand/graph_meshlets_rasterize.js";
@@ -58,11 +59,16 @@ function graph_extract_meshlets_from_bucket({
58
59
  0
59
60
  );
60
61
 
62
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
63
+ const u_bucket_index = encoder.allocateTransientValueBuffer(U32_CONTAINER_STRUCT, {
64
+ value: bucket_id,
65
+ });
66
+
61
67
  shader_meshlets_extract_bucket.dispatchIndirect({
62
68
  encoder,
63
69
  command,
64
70
  bindings: {
65
- bucket_index: { value: bucket_id },
71
+ bucket_index: u_bucket_index,
66
72
  bucket_data: buckets,
67
73
  output: output,
68
74
  }
@@ -57,6 +57,14 @@ export class GPUSceneContext {
57
57
  * @returns {GPUVirtualGeometryRuntime|undefined}
58
58
  */
59
59
  get virtual_geometry(): GPUVirtualGeometryRuntime;
60
+ /**
61
+ * @returns {VGeoResidency|undefined}
62
+ */
63
+ get virtual_geometry_residency(): VGeoResidency;
64
+ /**
65
+ * @returns {VGeoFeedbackLoop|undefined}
66
+ */
67
+ get virtual_geometry_feedback(): VGeoFeedbackLoop;
60
68
  /**
61
69
  * Give this scene a virtual-geometry runtime, sharing the meshlet pool with everything else it
62
70
  * draws.
@@ -65,11 +73,20 @@ export class GPUSceneContext {
65
73
  * records naming rows of the same metadata buffer a static mesh's meshlets live in, so nothing
66
74
  * downstream of the expansion has to know which kind of geometry it is looking at.
67
75
  *
76
+ * And the residency and the feedback loop with it, so that an engine host gets the whole
77
+ * streaming loop by enabling virtual geometry rather than by wiring four objects itself
78
+ * (REVIEW_LEDGER U1): `register` a container with {@link virtual_geometry_residency}, call
79
+ * {@link virtual_geometry_feedback}'s `read` once a frame after the last rasterization path,
80
+ * and every page after the root arrives because the cut asked for it.
81
+ *
68
82
  * @param {Object} [options] passed to {@link GPUVirtualGeometryPool} and
69
- * {@link GPUVirtualGeometryRuntime}
83
+ * {@link GPUVirtualGeometryRuntime}, except for `residency`
84
+ * @param {VGeoResidencyOptions} [options.residency] every knob of both residency tiers
70
85
  * @returns {GPUVirtualGeometryRuntime}
71
86
  */
72
- enable_virtual_geometry(options?: any): GPUVirtualGeometryRuntime;
87
+ enable_virtual_geometry(options?: {
88
+ residency?: VGeoResidencyOptions;
89
+ }): GPUVirtualGeometryRuntime;
73
90
  /**
74
91
  * @returns {GPUAnimationManager}
75
92
  */
@@ -183,6 +200,9 @@ import { GPULightCollection } from "../light/GPULightCollection.js";
183
200
  import { GPULightProbeVolume } from "../global_illumination/lpv/GPULightProbeVolume.js";
184
201
  import { GPUInstancesAccelerationStructure } from "./GPUInstancesAccelerationStructure.js";
185
202
  import { GPUVirtualGeometryRuntime } from "../geometry/virtual/runtime/GPUVirtualGeometryRuntime.js";
203
+ import { VGeoResidency } from "../geometry/virtual/runtime/VGeoResidency.js";
204
+ import { VGeoFeedbackLoop } from "../geometry/virtual/runtime/VGeoFeedbackLoop.js";
205
+ import { VGeoResidencyOptions } from "../geometry/virtual/runtime/VGeoResidencyOptions.js";
186
206
  import { GPUAnimationManager } from "../animation/GPUAnimationManager.js";
187
207
  import { GPUDatabase } from "../buffer/table/GPUDatabase.js";
188
208
  import { GPUMeshSkinningContext } from "../animation/skinning/GPUMeshSkinningContext.js";
@@ -1 +1 @@
1
- {"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AA8DA;;;;;;;;;GASG;AACH;IA0II;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IA5KD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IAsGD;;OAEG;IACH,kDAEC;IAED;;;;;;;;;;;OAWG;IACH,wCAFa,yBAAyB,CAoBrC;IAED;;OAEG;IACH,6CAEC;IAYD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA0BD;;;;OAIG;IACH,cAqEC;IAED;;;OAGG;IACH,YAFW,eAAe,QA0BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAoCD,gBAYC;IAIL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BAxmBY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;+BAtBvD,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;0CAVhD,0DAA0D;oCAGhE,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;6BAM3D,wBAAwB;wCADb,mCAAmC;uCAdpC,wCAAwC"}
1
+ {"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AAmEA;;;;;;;;;GASG;AACH;IA0II;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IA5KD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IAoHD;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,kDAEC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH;QAH0C,SAAS,GAAxC,oBAAoB;QAClB,yBAAyB,CAmCrC;IAED;;OAEG;IACH,6CAEC;IAYD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA0BD;;;;OAIG;IACH,cAqEC;IAED;;;OAGG;IACH,YAFW,eAAe,QA0BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAoCD,gBAYC;IAIL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BA1pBY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;+BAtBvD,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;0CAfhD,0DAA0D;8BAItE,8CAA8C;iCAF3C,iDAAiD;qCAG7C,qDAAqD;oCAGtD,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;6BAM3D,wBAAwB;wCADb,mCAAmC;uCAdpC,wCAAwC"}
@@ -1,5 +1,10 @@
1
1
  import { GPUVirtualGeometryPool } from "../geometry/virtual/runtime/GPUVirtualGeometryPool.js";
2
2
  import { GPUVirtualGeometryRuntime } from "../geometry/virtual/runtime/GPUVirtualGeometryRuntime.js";
3
+ import { make_vgeo_page_worker } from "../geometry/virtual/runtime/make_vgeo_page_worker.js";
4
+ import { VGeoFeedbackLoop } from "../geometry/virtual/runtime/VGeoFeedbackLoop.js";
5
+ import { VGeoPageFetcher } from "../geometry/virtual/runtime/VGeoPageFetcher.js";
6
+ import { VGeoResidency } from "../geometry/virtual/runtime/VGeoResidency.js";
7
+ import { VGeoResidencyOptions } from "../geometry/virtual/runtime/VGeoResidencyOptions.js";
3
8
  import { assert } from "../../../core/assert.js";
4
9
  import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
5
10
  import { GPUAnimationManager } from "../animation/GPUAnimationManager.js";
@@ -258,6 +263,20 @@ export class GPUSceneContext {
258
263
  */
259
264
  #virtual_geometry;
260
265
 
266
+ /**
267
+ * Both tiers of virtual-geometry residency, once {@link enable_virtual_geometry} has run.
268
+ * @type {VGeoResidency|undefined}
269
+ */
270
+ #virtual_geometry_residency;
271
+
272
+ /**
273
+ * The feedback loop that carries the cut's readings into the residency, once
274
+ * {@link enable_virtual_geometry} has run. A host calls its `read` once a frame after every
275
+ * rasterization path has cut.
276
+ * @type {VGeoFeedbackLoop|undefined}
277
+ */
278
+ #virtual_geometry_feedback;
279
+
261
280
  /**
262
281
  * @returns {GPUVirtualGeometryRuntime|undefined}
263
282
  */
@@ -265,6 +284,20 @@ export class GPUSceneContext {
265
284
  return this.#virtual_geometry;
266
285
  }
267
286
 
287
+ /**
288
+ * @returns {VGeoResidency|undefined}
289
+ */
290
+ get virtual_geometry_residency() {
291
+ return this.#virtual_geometry_residency;
292
+ }
293
+
294
+ /**
295
+ * @returns {VGeoFeedbackLoop|undefined}
296
+ */
297
+ get virtual_geometry_feedback() {
298
+ return this.#virtual_geometry_feedback;
299
+ }
300
+
268
301
  /**
269
302
  * Give this scene a virtual-geometry runtime, sharing the meshlet pool with everything else it
270
303
  * draws.
@@ -273,8 +306,15 @@ export class GPUSceneContext {
273
306
  * records naming rows of the same metadata buffer a static mesh's meshlets live in, so nothing
274
307
  * downstream of the expansion has to know which kind of geometry it is looking at.
275
308
  *
309
+ * And the residency and the feedback loop with it, so that an engine host gets the whole
310
+ * streaming loop by enabling virtual geometry rather than by wiring four objects itself
311
+ * (REVIEW_LEDGER U1): `register` a container with {@link virtual_geometry_residency}, call
312
+ * {@link virtual_geometry_feedback}'s `read` once a frame after the last rasterization path,
313
+ * and every page after the root arrives because the cut asked for it.
314
+ *
276
315
  * @param {Object} [options] passed to {@link GPUVirtualGeometryPool} and
277
- * {@link GPUVirtualGeometryRuntime}
316
+ * {@link GPUVirtualGeometryRuntime}, except for `residency`
317
+ * @param {VGeoResidencyOptions} [options.residency] every knob of both residency tiers
278
318
  * @returns {GPUVirtualGeometryRuntime}
279
319
  */
280
320
  enable_virtual_geometry(options = {}) {
@@ -282,16 +322,31 @@ export class GPUSceneContext {
282
322
  return this.#virtual_geometry;
283
323
  }
284
324
 
325
+ const { residency = new VGeoResidencyOptions(), ...rest } = options;
326
+
285
327
  const pool = new GPUVirtualGeometryPool({
286
328
  device: this.#device,
287
329
  meshlets: this.geometries.meshlets,
288
- ...options,
330
+ ...rest,
289
331
  });
290
332
 
291
333
  this.#virtual_geometry = new GPUVirtualGeometryRuntime({
292
334
  pool,
293
- device: this.#device,
294
- ...options,
335
+ ...rest,
336
+ });
337
+
338
+ // pages are fetched, verified and decoded on workers, spawned on first use; a host with no
339
+ // Worker gets the same fetch in-process
340
+ const fetcher = new VGeoPageFetcher({
341
+ worker_count: residency.worker_count,
342
+ make_worker: typeof Worker === 'undefined' ? undefined : make_vgeo_page_worker,
343
+ });
344
+
345
+ this.#virtual_geometry_residency = new VGeoResidency({ pool, options: residency, fetcher });
346
+
347
+ this.#virtual_geometry_feedback = new VGeoFeedbackLoop({
348
+ runtime: this.#virtual_geometry,
349
+ residency: this.#virtual_geometry_residency,
295
350
  });
296
351
 
297
352
  return this.#virtual_geometry;
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderResourceSetDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js"],"names":[],"mappings":"AAsIA;IAoBI;;OAEG;IACH;cAFoB,MAAM;cAAQ,UAAU;MAI3C;IAED;;;;;OAKG;IACH,4BAMC;IAED;;;;;;;;;;;;OAYG;IACH,mBALW,MAAM,SACN,UAAU,GAAC,MAAM,GAEf,IAAI,CA6ChB;IAED;;;OAGG;IACH,8CAEC;IAGD;;;OAGG;IACH,6CAEC;IAaD;;;;OAIG;IACH;;;;;;;;;;;OAWG;IACH,sBAHW,MAAM,GACJ,OAAO,CAInB;IAED,+FAYC;IAED;;;;;;OAMG;IACH;QAJ4B,KAAK,GAAtB,MAAM;QACW,KAAK,GAAtB,MAAM;QACJ,6BAA6B,CAsBzC;IAED;;;;OAIG;IACH,gBAHW,6BAA6B,GAC3B,OAAO,CAQnB;IAED;;;OAGG;IACH,qBAFW,iBAAe,MAAM,QAW/B;IAED;;OAEG;IACH,oCAFa,wBAAwB,CAiBpC;IAED;;;OAGG;IACH,yBAFY,EAAE,EAAE,CAcf;IAED;;;;OAIG;IACH,8BAHW,iBAAe,MAAM,GACnB,wBAAwB,CAMpC;IAED;;;;;OAKG;IACH,qCAHW,sBAAsB,GACpB,oBAAoB,EAAE,CAgBlC;IAED;;;OAGG;IACH,qBAFY,SAAS,CAwGpB;IAED;;;;;;;;;;;;;;;OAeG;IACH,iCAHW,YAAY,GACV,OAAO,CA0CnB;;CACJ;;eAKS,SAAS,2BAA2B,CAAC;;2BA/jBlC,OAAO,yCAAyC,EAAE,YAAY;qCAC9D,OAAO,2CAA2C,EAAE,sBAAsB;yBAC1E,OAAO,uBAAuB,EAAE,UAAU;8CALT,oCAAoC;yCAXzC,0DAA0D;0BAIzE,0BAA0B"}
1
+ {"version":3,"file":"ShaderResourceSetDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js"],"names":[],"mappings":"AAuIA;IAoBI;;OAEG;IACH;cAFoB,MAAM;cAAQ,UAAU;MAI3C;IAED;;;;;OAKG;IACH,4BAMC;IAED;;;;;;;;;;;;OAYG;IACH,mBALW,MAAM,SACN,UAAU,GAAC,MAAM,GAEf,IAAI,CAoDhB;IAED;;;OAGG;IACH,8CAEC;IAGD;;;OAGG;IACH,6CAEC;IAaD;;;;OAIG;IACH;;;;;;;;;;;OAWG;IACH,sBAHW,MAAM,GACJ,OAAO,CAInB;IAED,+FAYC;IAED;;;;;;OAMG;IACH;QAJ4B,KAAK,GAAtB,MAAM;QACW,KAAK,GAAtB,MAAM;QACJ,6BAA6B,CAsBzC;IAED;;;;OAIG;IACH,gBAHW,6BAA6B,GAC3B,OAAO,CAQnB;IAED;;;OAGG;IACH,qBAFW,iBAAe,MAAM,QAW/B;IAED;;OAEG;IACH,oCAFa,wBAAwB,CAiBpC;IAED;;;OAGG;IACH,yBAFY,EAAE,EAAE,CAcf;IAED;;;;OAIG;IACH,8BAHW,iBAAe,MAAM,GACnB,wBAAwB,CAMpC;IAED;;;;;OAKG;IACH,qCAHW,sBAAsB,GACpB,oBAAoB,EAAE,CAgBlC;IAED;;;OAGG;IACH,qBAFY,SAAS,CAwGpB;IAED;;;;;;;;;;;;;;;OAeG;IACH,iCAHW,YAAY,GACV,OAAO,CAwFnB;;CACJ;;eA2BS,SAAS,2BAA2B,CAAC;;2BA1oBlC,OAAO,yCAAyC,EAAE,YAAY;qCAC9D,OAAO,2CAA2C,EAAE,sBAAsB;yBAC1E,OAAO,uBAAuB,EAAE,UAAU;8CALT,oCAAoC;yCAZzC,0DAA0D;0BAIzE,0BAA0B"}
@@ -11,6 +11,7 @@ import { CodeChunk } from "../compiler/CodeChunk.js";
11
11
  import { parse_wgsl_type } from "../type/parse_wgsl_type.js";
12
12
  import { type_has_arrays } from "../type/type_has_arrays.js";
13
13
  import { type_has_atomics } from "../type/type_has_atomics.js";
14
+ import { WebGPUStruct } from "../type/WebGPUStruct.js";
14
15
  import { write_wgsl_type_value } from "../type/serde/write_gpu_typed_buffer.js";
15
16
  import { IMMEDIATE_ADDRESS_SPACE_EXTENSION, IMMEDIATE_SIZE_FLOOR } from "./IMMEDIATE_DATA.js";
16
17
  import { ResourceType } from "./ResourceType.js";
@@ -226,7 +227,14 @@ export class ShaderResourceSetDescriptor {
226
227
  );
227
228
  }
228
229
 
229
- this.#immediate = { name, type };
230
+ // The top-level member names, kept so that `writeImmediate` can tell a value of this type
231
+ // from something that merely happens to be an object. `undefined` for a scalar, vector or
232
+ // matrix immediate, which has no members to name.
233
+ const field_names = type instanceof WebGPUStruct
234
+ ? type.fields.map(field => field.name)
235
+ : undefined;
236
+
237
+ this.#immediate = { name, type, field_names };
230
238
 
231
239
  return this;
232
240
  }
@@ -561,27 +569,73 @@ export class ShaderResourceSetDescriptor {
561
569
  );
562
570
  }
563
571
 
572
+ // Refuse a value of the wrong shape rather than serialise what it does not contain.
573
+ //
574
+ // The whole declared range travels every dispatch, and the zeroes this method clears it to are
575
+ // indistinguishable from deliberate ones: every slot ends up *set*, so WebGPU's immediate
576
+ // validation — and the software device's copy of it — has nothing to report. A wrong-shaped
577
+ // value therefore reaches the shader as zeroes, silently, and the only symptom is wrong
578
+ // output. That is what a call site left behind by the uniform -> immediate migration does: it
579
+ // keeps handing over the transient GPUBuffer the uniform needed, `generateBindings` ignores
580
+ // the extra key so the buffer is never bound, and nothing on a GPUBuffer matches the type.
581
+ //
582
+ // A value that names *some* of the members is left alone. Structs carry explicit padding
583
+ // members the CPU side has no value for, and skipping absent fields is load-bearing anyway
584
+ // (GPUTypedTable#set_range writes one member of a record through the same serialiser). Only a
585
+ // value that could not have populated the type at all is an unambiguous mistake.
586
+ const field_names = immediate.field_names;
587
+
588
+ if (field_names === undefined) {
589
+ // Scalar, vector or matrix: the serialiser reads the value as a number or indexes it.
590
+ const usable = typeof value === "number"
591
+ || typeof value === "boolean"
592
+ || typeof value[0] === "number";
593
+
594
+ if (!usable) {
595
+ throw new Error(
596
+ `Immediate data '${immediate.name}' of type '${immediate.type}' was given a value the`
597
+ + ` serialiser cannot read as a number: '${value}'. An immediate takes the plain value,`
598
+ + ` not something bindable — a GPUBuffer is what a *uniform* binding wants, and one`
599
+ + ` passed here is ignored by generateBindings and would serialise as zeroes.`
600
+ );
601
+ }
602
+ } else if (!value_names_a_member(value, field_names)) {
603
+ // Note: no `${immediate.type}` in the message. Interpolating a struct type runs its whole
604
+ // WGSL declaration through the code generator, and the member list is the actionable half
605
+ // of that anyway.
606
+ throw new Error(
607
+ `Immediate data '${immediate.name}' was given a value naming none of its members`
608
+ + ` (${field_names.join(', ')}), so the dispatch would have read zeroes. An immediate`
609
+ + ` takes the plain value — '{ ${field_names[0]}: ... }' — not`
610
+ + ` something bindable: a GPUBuffer is what a *uniform* binding wants, and one passed`
611
+ + ` here is ignored by generateBindings and serialises to nothing.`
612
+ );
613
+ }
614
+
564
615
  const start = buffer.position;
565
616
  const size = this.immediateSize;
566
617
 
567
618
  buffer.ensureCapacity(start + size);
568
619
 
569
- write_wgsl_type_value(value, buffer, immediate.type);
570
-
571
- // Zero-fill out to the declared size rather than stopping where the last member ended.
620
+ // Clear the whole declared range up front, rather than filling in from wherever the
621
+ // serialiser's cursor stopped.
572
622
  //
573
- // The serialiser stops after the final member, so a struct with trailing padding — say
574
- // `{vec4f, u32}`, 20 bytes written of a 32-byte type — leaves a tail. That tail is padding,
575
- // WebGPU's AccessibleSlots excludes padding, and a short write would in fact validate. It
576
- // would also mean the bytes handed to `setImmediates` are shorter than the `immediateSize`
577
- // the pipeline layout declares, which is true-but-subtle in a way that only holds as long as
578
- // nobody changes how either number is derived. Writing the full declared size costs at most
579
- // 64 bytes of memset and makes the two trivially equal.
580
- const written = buffer.position - start;
581
-
582
- for (let i = written; i < size; i++) {
583
- buffer.raw_bytes[start + i] = 0;
584
- }
623
+ // Two reasons, and the second is the one that bites. The first: the serialiser stops after the
624
+ // final member, so a struct with trailing padding — say `{vec4f, u32}`, 20 bytes written of a
625
+ // 32-byte type — leaves a tail. That tail is padding, WebGPU's AccessibleSlots excludes
626
+ // padding, and a short write would in fact validate; it would also make the bytes handed to
627
+ // `setImmediates` shorter than the `immediateSize` the pipeline layout declares, true-but-subtle
628
+ // in a way that only holds as long as nobody changes how either number is derived.
629
+ //
630
+ // The second: this buffer is one scratch region reused by every dispatch of a context, and it
631
+ // is only ever written over, never cleared. A member the value did not name is skipped, and a
632
+ // skipped member before the final one is not in the tail — filling from the cursor left it
633
+ // holding the bytes the *previous* dispatch put at that offset. A partial value is legal (see
634
+ // above), so that made one dispatch's immediate data a function of the one before it. Clearing
635
+ // first closes the holes and the tail together, and costs at most 64 bytes of memset.
636
+ buffer.raw_bytes.fill(0, start, start + size);
637
+
638
+ write_wgsl_type_value(value, buffer, immediate.type);
585
639
 
586
640
  buffer.position = start + size;
587
641
 
@@ -589,6 +643,28 @@ export class ShaderResourceSetDescriptor {
589
643
  }
590
644
  }
591
645
 
646
+ /**
647
+ * Whether `value` carries at least one of `field_names`.
648
+ *
649
+ * A plain loop, and a free function rather than a closure over `value`, because
650
+ * {@link ShaderResourceSetDescriptor#writeImmediate} runs once per dispatch and allocates nothing.
651
+ *
652
+ * @param {Object} value
653
+ * @param {string[]} field_names
654
+ * @returns {boolean}
655
+ */
656
+ function value_names_a_member(value, field_names) {
657
+ const count = field_names.length;
658
+
659
+ for (let i = 0; i < count; i++) {
660
+ if (value[field_names[i]] !== undefined) {
661
+ return true;
662
+ }
663
+ }
664
+
665
+ return false;
666
+ }
667
+
592
668
  /**
593
669
  * Special immutable empty set
594
670
  * @readonly
@@ -90,6 +90,10 @@ export class GPUViewContext {
90
90
  * @returns {GPUCameraContext}
91
91
  */
92
92
  get gpu_previous_camera_state(): GPUCameraContext;
93
+ /**
94
+ * @return {VGeoViewCut}
95
+ */
96
+ get virtual_geometry_cut(): VGeoViewCut;
93
97
  /**
94
98
  *
95
99
  * @return {GPUCameraContext}
@@ -136,4 +140,5 @@ import { HierarchicalZBuffer } from "../hiz/HierarchicalZBuffer.js";
136
140
  import { GPUTypedBuffer } from "../buffer/GPUTypedBuffer.js";
137
141
  import { GPUViewVolumetrics } from "../volumetrics/GPUViewVolumetrics.js";
138
142
  import { GPUCameraContext } from "../camera/GPUCameraContext.js";
143
+ import { VGeoViewCut } from "../geometry/virtual/runtime/VGeoViewCut.js";
139
144
  //# sourceMappingURL=GPUViewContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUViewContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/view/GPUViewContext.js"],"names":[],"mappings":";;;;;;;;AA+BA;;GAEG;AACH;IAiOI;;;;;OAKG;IACH,sBAJW,eAAe,SACf,eAAe,UACf,gBAAgB,EAuB1B;IA1PD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,OAFU,MAAM,CAEL;IAuBX;;;;OAIG;IACH,mBAHW,MAAM,KACN,MAAM,QAiBhB;IAED;;;;OAIG;IACH,aAHW,MAAM,KACN,MAAM,QAQhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,KACN,MAAM,QAOhB;IAED,wEAAwE;IACxE,2BAAqC;IAErC,6BAA6B;IAC7B,8BAEC;IAQD;;;OAGG;IACH,0BAEC;IAED;;;;OAIG;IACH,mBAHW,MAAM,KACN,MAAM,QAUhB;IAgBD;;;OAGG;IACH,kDAEC;IAdD;;;OAGG;IACH,iDAEC;IAgBD;;;OAGG;IACH,qCAEC;IAQD;;;OAGG;IACH,sCAEC;IA4BD;;;OAGG;IACH,mDAEC;IAdD;;;OAGG;IACH,kDAEC;IAgBD;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,mEAEC;IA+BD;;;;OAIG;IACH,cAHW,cAAc,GACZ,OAAO,CAWnB;IAED;;;OAGG;IACH,QAFY,MAAM,CAIjB;IAED,wBA6BC;IAGD;;;OAGG;IACH,YAFW,eAAe,QAWzB;IAED;;OAEG;IACH,0BAFW,sBAAsB,QAShC;IAED,gBAgBC;IAGL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;;CANxC;qCAtXY,OAAO,wCAAwC,EAAE,sBAAsB;8BACvE,OAAO,uBAAuB,EAAE,eAAe;8BAC/C,OAAO,6BAA6B,EAAE,eAAe;oCAP9B,+BAA+B;+BAFpC,6BAA6B;mCAGzB,sCAAsC;iCAFxC,+BAA+B"}
1
+ {"version":3,"file":"GPUViewContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/view/GPUViewContext.js"],"names":[],"mappings":";;;;;;;;AAgCA;;GAEG;AACH;IAiPI;;;;;OAKG;IACH,sBAJW,eAAe,SACf,eAAe,UACf,gBAAgB,EAyB1B;IA5QD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,OAFU,MAAM,CAEL;IAuBX;;;;OAIG;IACH,mBAHW,MAAM,KACN,MAAM,QAiBhB;IAED;;;;OAIG;IACH,aAHW,MAAM,KACN,MAAM,QAQhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,KACN,MAAM,QAOhB;IAED,wEAAwE;IACxE,2BAAqC;IAErC,6BAA6B;IAC7B,8BAEC;IAQD;;;OAGG;IACH,0BAEC;IAED;;;;OAIG;IACH,mBAHW,MAAM,KACN,MAAM,QAUhB;IAgBD;;;OAGG;IACH,kDAEC;IAdD;;;OAGG;IACH,iDAEC;IAgBD;;;OAGG;IACH,qCAEC;IAQD;;;OAGG;IACH,sCAEC;IA4BD;;;OAGG;IACH,mDAEC;IAdD;;;OAGG;IACH,kDAEC;IAyBD;;OAEG;IACH,wCAEC;IAED;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,mEAEC;IAiCD;;;;OAIG;IACH,cAHW,cAAc,GACZ,OAAO,CAWnB;IAED;;;OAGG;IACH,QAFY,MAAM,CAIjB;IAED,wBA6BC;IAGD;;;OAGG;IACH,YAFW,eAAe,QAWzB;IAED;;OAEG;IACH,0BAFW,sBAAsB,QAShC;IAED,gBAkBC;IAGL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;;CANxC;qCA1YY,OAAO,wCAAwC,EAAE,sBAAsB;8BACvE,OAAO,uBAAuB,EAAE,eAAe;8BAC/C,OAAO,6BAA6B,EAAE,eAAe;oCAP9B,+BAA+B;+BAHpC,6BAA6B;mCAIzB,sCAAsC;iCAHxC,+BAA+B;4BACpC,4CAA4C"}