@woosh/meep-engine 3.26.0 → 3.28.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 (449) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
  4. package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
  5. package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
  6. package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
  7. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
  8. package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
  9. package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
  10. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
  11. package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
  12. package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
  13. package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
  14. package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
  15. package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
  16. package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts +15 -0
  17. package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
  18. package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
  19. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
  20. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
  21. package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
  22. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +14 -7
  23. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  24. package/src/core/geom/3d/shape/HeightMapShape3D.js +87 -78
  25. package/src/engine/Engine.d.ts.map +1 -1
  26. package/src/engine/Engine.js +38 -1
  27. package/src/engine/graphics3/GraphicsEngine.d.ts +5 -1
  28. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  29. package/src/engine/graphics3/GraphicsEngine.js +834 -830
  30. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  31. package/src/shade/RENDERER_CONTRACT.md +19 -10
  32. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
  33. package/src/shade/playground/vgeo_runtime/README.md +186 -27
  34. package/src/shade/playground/vgeo_runtime/index.html +112 -62
  35. package/src/shade/playground/vgeo_runtime/main.js +678 -88
  36. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +18 -0
  37. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
  38. package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +23 -5
  39. package/src/shade/playground/vgeo_scene/README.md +408 -0
  40. package/src/shade/playground/vgeo_scene/index.html +144 -0
  41. package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
  42. package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
  43. package/src/shade/playground/vgeo_scene/main.js +1716 -0
  44. package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
  45. package/src/shade/renderer/Renderer.d.ts +4 -1
  46. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  47. package/src/shade/renderer/Renderer.js +5 -2
  48. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -2
  49. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
  50. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  51. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
  52. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  53. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
  54. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  55. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
  56. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
  57. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
  58. package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
  59. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +77 -7
  60. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +36 -23
  61. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +17 -14
  62. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +19 -1
  63. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  64. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +21 -1
  65. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
  66. package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -9
  67. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts +32 -0
  68. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts.map +1 -0
  69. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +59 -0
  70. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
  71. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts +44 -0
  72. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
  73. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +36 -0
  74. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
  75. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_levels.js → level/vgeo_build_levels.js} +61 -95
  76. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts +19 -0
  77. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
  78. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
  79. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +73 -0
  80. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
  81. package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +7 -7
  82. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +29 -0
  83. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
  84. package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_normals.js → mesh/vgeo_compute_vertex_normals.js} +3 -3
  85. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +31 -0
  86. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -0
  87. package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.js → mesh/vgeo_compute_vertex_tangents.js} +5 -5
  88. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +46 -0
  89. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
  90. package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +9 -9
  91. package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts +13 -0
  92. package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
  93. package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +63 -16
  94. package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts +13 -0
  95. package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
  96. package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
  97. package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts +22 -0
  98. package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
  99. package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
  100. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +52 -0
  101. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
  102. package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +1 -1
  103. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts +14 -0
  104. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
  105. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts +29 -0
  106. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
  107. package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
  108. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
  109. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
  110. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
  111. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts +10 -0
  112. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
  113. package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +12 -55
  114. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts +15 -0
  115. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
  116. package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.js → partition/vgeo_split_face_set_packed.js} +3 -3
  117. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts +12 -0
  118. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
  119. package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
  120. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts +18 -0
  121. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
  122. package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
  123. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts +9 -0
  124. package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
  125. package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
  126. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +24 -0
  127. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
  128. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +20 -0
  129. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
  130. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +14 -0
  131. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
  132. package/src/shade/renderer/geometry/virtual/build/{vgeo_extract_submesh.js → submesh/vgeo_extract_submesh.js} +5 -5
  133. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +12 -0
  134. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
  135. package/src/shade/renderer/geometry/virtual/build/{vgeo_gather_faces.js → submesh/vgeo_gather_faces.js} +2 -2
  136. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts +11 -0
  137. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
  138. package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
  139. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
  140. package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +10 -11
  142. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
  143. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  144. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
  145. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts +8 -2
  146. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
  148. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
  149. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
  150. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
  151. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
  152. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
  153. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +11 -3
  154. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -0
  155. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
  156. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +10 -1
  157. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts +15 -0
  158. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
  159. package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
  160. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
  161. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
  162. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
  163. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
  164. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
  165. package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
  166. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
  167. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
  168. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
  169. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
  170. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
  171. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
  172. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
  173. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
  174. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +28 -0
  175. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
  176. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +7 -3
  177. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
  178. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
  179. package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
  180. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
  181. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
  182. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
  183. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
  184. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
  185. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
  186. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
  187. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  188. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
  189. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
  190. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
  191. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
  192. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
  193. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
  195. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
  196. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
  197. package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
  198. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
  199. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
  201. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
  202. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
  203. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
  204. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
  205. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
  206. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
  207. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  208. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +63 -3
  209. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  210. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +219 -17
  211. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  212. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +156 -11
  213. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +656 -0
  214. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
  215. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  216. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
  217. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +109 -29
  218. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  219. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +173 -105
  220. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
  221. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +109 -26
  222. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
  223. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
  224. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  225. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +55 -487
  226. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
  227. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
  228. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
  229. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
  230. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
  231. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1388 -0
  232. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
  233. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
  234. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
  235. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
  236. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  237. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
  238. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
  239. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
  240. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
  241. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
  242. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
  243. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
  244. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
  245. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
  246. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
  247. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  248. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
  249. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
  250. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  251. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +11 -73
  252. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
  253. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
  254. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +98 -0
  255. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
  256. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
  257. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
  258. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
  259. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
  260. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
  261. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  262. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
  263. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
  264. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
  265. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
  266. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
  267. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
  268. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
  269. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
  270. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +130 -0
  271. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  272. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +32 -37
  273. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  274. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +576 -230
  275. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
  276. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
  278. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
  280. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
  281. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +11 -0
  282. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
  283. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
  284. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
  285. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
  286. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
  287. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
  288. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
  289. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
  290. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
  291. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
  292. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
  293. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
  294. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
  295. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
  296. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
  297. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
  298. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
  299. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
  300. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
  301. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
  302. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
  303. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
  304. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
  305. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
  306. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
  307. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
  308. package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
  309. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
  310. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
  311. package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
  312. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
  313. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
  314. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
  315. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
  316. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
  317. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +38 -1
  318. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  319. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +4 -3
  320. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  321. package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
  322. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  323. package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
  324. package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
  325. package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
  326. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  327. package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
  328. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  329. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
  330. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  331. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
  332. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  333. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
  334. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  335. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
  336. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  337. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
  338. package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
  339. package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
  340. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  341. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
  342. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +22 -0
  343. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
  344. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
  345. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
  346. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  347. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
  348. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +15 -0
  349. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
  350. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
  351. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  352. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
  353. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  354. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +3 -4
  355. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
  356. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
  357. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
  358. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
  359. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
  360. package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
  361. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  362. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
  363. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
  364. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
  365. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
  366. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
  367. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  368. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +83 -78
  369. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  370. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
  371. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  372. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
  373. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  374. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
  375. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
  376. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
  377. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
  378. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -2
  380. package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
  382. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
  384. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
  385. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
  386. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  387. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +2 -1
  388. package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
  389. package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
  390. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  391. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -7
  392. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  393. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +85 -89
  394. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  395. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +28 -32
  396. package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
  397. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  398. package/src/shade/renderer/scene/GPUSceneContext.js +61 -4
  399. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
  400. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
  401. package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
  402. package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
  403. package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
  404. package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
  405. package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
  406. package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
  407. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  408. package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
  409. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
  410. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
  411. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
  412. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
  413. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
  414. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
  415. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
  416. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
  417. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
  418. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
  420. package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
  421. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  422. package/src/shade/renderer/view/GPUViewContext.js +21 -0
  423. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  424. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
  425. package/src/shade/playground/vgeo_viewer/README.md +0 -150
  426. package/src/shade/playground/vgeo_viewer/cut_geometry.js +0 -460
  427. package/src/shade/playground/vgeo_viewer/index.html +0 -77
  428. package/src/shade/playground/vgeo_viewer/main.js +0 -1343
  429. package/src/shade/playground/vgeo_viewer/select_cut.js +0 -481
  430. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
  431. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
  432. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
  433. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
  434. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts.map +0 -1
  435. package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
  436. package/src/shade/renderer/loader/gltf/fix_up_material_sides.js +0 -109
  437. package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.js +0 -78
  438. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +0 -100
  439. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
  440. package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
  441. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
  442. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts.map +0 -1
  443. package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
  444. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
  445. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +0 -0
  446. /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
  447. /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
  448. /package/src/shade/renderer/geometry/virtual/build/{VGeoGatheredFaces.js → submesh/VGeoGatheredFaces.js} +0 -0
  449. /package/src/shade/renderer/geometry/virtual/build/{VGeoSubmesh.js → submesh/VGeoSubmesh.js} +0 -0
@@ -10,9 +10,14 @@ const lut_topology = {
10
10
  /**
11
11
  * Named cull-mode lookup tables, keyed by {@link ShadeDrawSide}.
12
12
  *
13
- * - `Standard` is the main-pass mapping: a `Front`-sided material renders its front face
14
- * (cull back), `Back` renders its back face (cull front), `Double` renders both.
15
- * - `Reversed` flips sided materials so the *back* face is what gets drawn. This is the
13
+ * `Front` and `Back` map to the same cull mode, because the winding they differ by is the
14
+ * vertex shader's to reverse — see `chunk_triangle_list_reverse_winding`. That is what lets
15
+ * them share a bucket, and it is why nothing here needs a fourth entry for the *instance's*
16
+ * handedness either.
17
+ *
18
+ * - `Standard` is the main-pass mapping: a one-sided material renders the face its winding
19
+ * presents (cull back), `Double` renders both.
20
+ * - `Reversed` culls the other way, so the *back* face is what gets drawn. This is the
16
21
  * standard "back-face shadow casting" / "front-face culling for shadow casters"
17
22
  * technique — shadow callers select this policy so the surface written into the shadow
18
23
  * map sits behind the lit surface, eliminating self-shadow acne on the lit side and
@@ -24,16 +29,29 @@ const lut_topology = {
24
29
  export const CullPolicy = {
25
30
  Standard: Object.freeze({
26
31
  [ShadeDrawSide.Front]: 'back',
27
- [ShadeDrawSide.Back]: 'front',
32
+ [ShadeDrawSide.Back]: 'back',
28
33
  [ShadeDrawSide.Double]: 'none',
29
34
  }),
30
35
  Reversed: Object.freeze({
31
36
  [ShadeDrawSide.Front]: 'front',
32
- [ShadeDrawSide.Back]: 'back',
37
+ [ShadeDrawSide.Back]: 'front',
33
38
  [ShadeDrawSide.Double]: 'none',
34
39
  }),
35
40
  };
36
41
 
42
+ /**
43
+ * One {@link ShadeDrawSide} per rasterization bucket — the sides that still differ once `Back`
44
+ * is drawn as a reversed `Front`. Callers that enumerate buckets iterate this rather than the
45
+ * enum, so a `Back`-sided material is picked up by the `Front` pass rather than by a pass of
46
+ * its own that would repeat the whole expansion chain for it.
47
+ *
48
+ * @type {ReadonlyArray<ShadeDrawSide>}
49
+ */
50
+ export const RASTERIZATION_BUCKET_SIDES = Object.freeze([
51
+ ShadeDrawSide.Front,
52
+ ShadeDrawSide.Double,
53
+ ]);
54
+
37
55
  /**
38
56
  *
39
57
  * @param {ShadeDrawMode} draw_mode
@@ -1 +1 @@
1
- {"version":3,"file":"filter_materials_by_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,mDATW,eAAe,iBACf,MAAM,cACN,gBAAgB,aAChB,aAAa,aACb,aAAa,aACb,eAAe,SACf,MAAM,GACJ,MAAM,CAsClB;iCAjDgC,oCAAoC;8BAFvC,iCAAiC;8BACjC,iCAAiC"}
1
+ {"version":3,"file":"filter_materials_by_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,mDATW,eAAe,iBACf,MAAM,cACN,gBAAgB,aAChB,aAAa,aACb,aAAa,aACb,eAAe,SACf,MAAM,GACJ,MAAM,CA4ClB;iCAxDgC,oCAAoC;8BAFvC,iCAAiC;8BACjC,iCAAiC"}
@@ -2,6 +2,7 @@ import { assert } from "../../../../core/assert.js";
2
2
  import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
3
3
  import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
4
4
  import { TransparencyMode } from "../../material/TransparencyMode.js";
5
+ import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
5
6
 
6
7
  /**
7
8
  *
@@ -33,14 +34,20 @@ export function filter_materials_by_bucket(
33
34
 
34
35
  let material_count = 0;
35
36
 
37
+ // by bucket, not field by field: `Front` and `Back` are one bucket, so asking for either
38
+ // yields both, which is what puts them in a single pass
39
+ const bucket = rasterization_material_bucket(alpha_mode, draw_mode, draw_side);
40
+
36
41
  for (let i = 0; i < count; i++) {
37
42
  const material = materials[i];
38
43
 
39
- if (
40
- material.transparency_mode !== alpha_mode
41
- || material.draw_mode !== draw_mode
42
- || material.draw_side !== draw_side
43
- ) {
44
+ const material_bucket = rasterization_material_bucket(
45
+ material.transparency_mode,
46
+ material.draw_mode,
47
+ material.draw_side
48
+ );
49
+
50
+ if (material_bucket !== bucket) {
44
51
  continue;
45
52
  }
46
53
 
@@ -1 +1 @@
1
- {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;GAeG;AACH,uKAJa;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAC,CAgUnH"}
1
+ {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;GAeG;AACH,uKAJa;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAC,CAwUnH"}
@@ -2,7 +2,7 @@ import { assert } from "../../../../core/assert.js";
2
2
  import { ceilPowerOfTwo } from "../../../../core/binary/operations/ceilPowerOfTwo.js";
3
3
  import { round_up } from "../../../../core/math/round_up.js";
4
4
  import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
5
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
+ import { u32, vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
6
6
  import { STRUCT_UNINDEXED_DRAW_COMMAND } from "../../gpu_primitive/indirect/STRUCT_UNINDEXED_DRAW_COMMAND.js";
7
7
  import { cpu_build_hash_table } from "../../gpu_primitive/hash_table/cpu_build_hash_table.js";
8
8
  import { graph_prefix_scan_csdldf } from "../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
@@ -22,7 +22,7 @@ import { shader_count_meshlets_by_material } from "./shader_count_meshlets_by_ma
22
22
  import {
23
23
  shader_make_meshlet_indirect_draw_commands_by_material
24
24
  } from "./shader_make_meshlet_indirect_draw_commands_by_material.js";
25
- import { shader_read_out_bucket } from "./shader_read_out_bucket.js";
25
+ import { PUSH_CONSTANTS, shader_read_out_bucket } from "./shader_read_out_bucket.js";
26
26
  import { shader_sort_meshlets_by_material } from "./shader_sort_meshlets_by_material.js";
27
27
 
28
28
  /**
@@ -83,11 +83,16 @@ export function graph_prepare_meshlet_draw_commands_by_material({
83
83
  0
84
84
  );
85
85
 
86
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
87
+ const u_settings = encoder.allocateTransientValueBuffer(PUSH_CONSTANTS, {
88
+ bucket_id,
89
+ });
90
+
86
91
  shader_read_out_bucket.dispatchIndirect({
87
92
  encoder,
88
93
  command,
89
94
  bindings: {
90
- settings: { bucket_id },
95
+ settings: u_settings,
91
96
  input: buckets_buffer,
92
97
  output,
93
98
  }
@@ -160,12 +165,15 @@ export function graph_prepare_meshlet_draw_commands_by_material({
160
165
  const hzb = resources.get(data.texture_hzb);
161
166
  const command = resources.get(data.command);
162
167
 
168
+ // TODO(chrome-153): transient uniform, not an immediate value — see the shader.
169
+ const u_resolution = encoder.allocateTransientValueBuffer(vec2u, resolution);
170
+
163
171
  shader_hzb_meshlet_filter_1way_full.dispatchIndirect({
164
172
  encoder,
165
173
  command,
166
174
  bindings: {
167
175
  camera: camera_state,
168
- resolution,
176
+ resolution: u_resolution,
169
177
  scene_database: scene.scene_database_buffer,
170
178
  meshlet_metadata: scene.geometries.meshlets.buffer_metadata,
171
179
  texture_hzb: hzb.obtainView(),
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The opaque rasterization buckets a scene has anything in, once each.
3
+ *
4
+ * Every opaque path records one pass per bucket, and the pass is expensive — extract, expand to
5
+ * meshlets, select a virtual-geometry cut, one render pass. So what is iterated has to be the
6
+ * *buckets*, and iterating `ShadeDrawSide` is not that: `Front` and `Back` are one bucket, and a
7
+ * loop over the enum visits it twice and draws the scene's single-sided geometry twice.
8
+ *
9
+ * Which is why this exists rather than the three callers each writing the loop: the enum is the
10
+ * obvious thing to reach for and it is wrong, and it is wrong in a way that costs a whole pass and
11
+ * shows up in nothing but a frame time.
12
+ *
13
+ * @param {Set<number>} active_buckets bucket ids any material in the scene asks for
14
+ * @yields {{draw_mode: ShadeDrawMode, side: ShadeDrawSide, bucket_id: number}} `side` is the
15
+ * bucket's representative, which is what {@link construct_primitive_state} wants
16
+ */
17
+ export function rasterization_opaque_buckets(active_buckets: Set<number>): Generator<{
18
+ draw_mode: number;
19
+ side: number;
20
+ bucket_id: number;
21
+ }, void, unknown>;
22
+ //# sourceMappingURL=rasterization_opaque_buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rasterization_opaque_buckets.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH,6DAJW,IAAI,MAAM,CAAC;;;;kBAkBrB"}
@@ -0,0 +1,36 @@
1
+ import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
2
+ import { TransparencyMode } from "../../material/TransparencyMode.js";
3
+ import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
4
+ import { RASTERIZATION_BUCKET_SIDES } from "./construct_primitive_state.js";
5
+
6
+ /**
7
+ * The opaque rasterization buckets a scene has anything in, once each.
8
+ *
9
+ * Every opaque path records one pass per bucket, and the pass is expensive — extract, expand to
10
+ * meshlets, select a virtual-geometry cut, one render pass. So what is iterated has to be the
11
+ * *buckets*, and iterating `ShadeDrawSide` is not that: `Front` and `Back` are one bucket, and a
12
+ * loop over the enum visits it twice and draws the scene's single-sided geometry twice.
13
+ *
14
+ * Which is why this exists rather than the three callers each writing the loop: the enum is the
15
+ * obvious thing to reach for and it is wrong, and it is wrong in a way that costs a whole pass and
16
+ * shows up in nothing but a frame time.
17
+ *
18
+ * @param {Set<number>} active_buckets bucket ids any material in the scene asks for
19
+ * @yields {{draw_mode: ShadeDrawMode, side: ShadeDrawSide, bucket_id: number}} `side` is the
20
+ * bucket's representative, which is what {@link construct_primitive_state} wants
21
+ */
22
+ export function* rasterization_opaque_buckets(active_buckets) {
23
+ for (const draw_mode of Object.values(ShadeDrawMode)) {
24
+ for (const side of RASTERIZATION_BUCKET_SIDES) {
25
+
26
+ const bucket_id = rasterization_material_bucket(TransparencyMode.Opaque, draw_mode, side);
27
+
28
+ if (!active_buckets.has(bucket_id)) {
29
+ // no matching materials, skip
30
+ continue;
31
+ }
32
+
33
+ yield { draw_mode, side, bucket_id };
34
+ }
35
+ }
36
+ }
@@ -1,3 +1,5 @@
1
+ export const PUSH_CONSTANTS: WebGPUStruct;
1
2
  export const shader_read_out_bucket: ComputeShader;
3
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
2
4
  import { ComputeShader } from "../../shader/ComputeShader.js";
3
5
  //# sourceMappingURL=shader_read_out_bucket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader_read_out_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js"],"names":[],"mappings":"AAqDA,mDAIE;8BApD4B,+BAA+B"}
1
+ {"version":3,"file":"shader_read_out_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js"],"names":[],"mappings":"AAcA,0CAEG;AAsCH,mDAIE;6BAzD2B,mCAAmC;8BAIlC,+BAA+B"}
@@ -1,58 +1,59 @@
1
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
- import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
4
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
6
- import { ComputeShader } from "../../shader/ComputeShader.js";
7
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
8
- import {
9
- RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ
10
- } from "../expand/bucket/RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ.js";
11
-
12
-
13
- const resources = new ShaderResourceSetDescriptor();
14
-
15
- const PUSH_CONSTANTS = WebGPUStruct.from({
16
- bucket_id: u32,
17
- });
18
-
19
- // per-dispatch, four bytes, read-only: immediate data rather than a pooled buffer, a staging copy
20
- // and a bind group of its own
21
- resources.setImmediate("settings", PUSH_CONSTANTS);
22
-
23
- resources.createGroup()
24
- .addStorageBuffer("input", RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ)
25
- .addStorageBuffer("output", COLLECTION_U32_STRUCT_READ, true)
26
-
27
- const body = CodeChunk.from(
28
- //language=WGSL
29
- `
30
- @compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
31
- fn main(@builtin(global_invocation_id) global_id : vec3<u32>){
32
-
33
- let input_index = global_id.x;
34
-
35
- let bucket_header = input.headers[settings.bucket_id];
36
- let bucket_size = bucket_header.count;
37
-
38
- if(input_index == 0){
39
- output.count = bucket_size;
40
- }
41
-
42
- if(input_index >= bucket_size){
43
- return;
44
- }
45
-
46
- // just copy
47
- let mesh_index = input.elements[input_index + bucket_header.offset];
48
-
49
- output.elements[input_index] = mesh_index;
50
- }
51
- `
52
- );
53
-
54
- export const shader_read_out_bucket = ComputeShader.from({
55
- label: 'Read out bucket',
56
- resources,
57
- body,
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+ import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
4
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
6
+ import { ComputeShader } from "../../shader/ComputeShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import {
9
+ RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ
10
+ } from "../expand/bucket/RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ.js";
11
+
12
+
13
+ const resources = new ShaderResourceSetDescriptor();
14
+
15
+ export const PUSH_CONSTANTS = WebGPUStruct.from({
16
+ bucket_id: u32,
17
+ });
18
+
19
+ // TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
20
+ // dispatchWorkgroupsIndirect, so this reads 65535 and culls everything. Revert 7c9700b87.
21
+ resources.createGroup()
22
+ .addUniform("settings", PUSH_CONSTANTS);
23
+
24
+ resources.createGroup()
25
+ .addStorageBuffer("input", RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ)
26
+ .addStorageBuffer("output", COLLECTION_U32_STRUCT_READ, true)
27
+
28
+ const body = CodeChunk.from(
29
+ //language=WGSL
30
+ `
31
+ @compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
32
+ fn main(@builtin(global_invocation_id) global_id : vec3<u32>){
33
+
34
+ let input_index = global_id.x;
35
+
36
+ let bucket_header = input.headers[settings.bucket_id];
37
+ let bucket_size = bucket_header.count;
38
+
39
+ if(input_index == 0){
40
+ output.count = bucket_size;
41
+ }
42
+
43
+ if(input_index >= bucket_size){
44
+ return;
45
+ }
46
+
47
+ // just copy
48
+ let mesh_index = input.elements[input_index + bucket_header.offset];
49
+
50
+ output.elements[input_index] = mesh_index;
51
+ }
52
+ `
53
+ );
54
+
55
+ export const shader_read_out_bucket = ComputeShader.from({
56
+ label: 'Read out bucket',
57
+ resources,
58
+ body,
58
59
  })
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The whole of what a vertex shader needs to know to emit a triangle the right way round, in one
3
+ * place — because there is more than one reason to reverse and they are not independent of each
4
+ * other.
5
+ *
6
+ * Feed the answer to `triangle_list_reverse_winding`. Nanite's `ReverseWindingOrder` is the same
7
+ * function for the same reason: a GPU-driven draw mixes instances that disagree about this, so it
8
+ * cannot be pipeline state, and every reason has to be combined before the corner is chosen.
9
+ *
10
+ * @see chunk_triangle_list_reverse_winding
11
+ * @type {CodeChunk}
12
+ */
13
+ export const chunk_triangle_winding_is_reversed: CodeChunk;
14
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
15
+ //# sourceMappingURL=chunk_triangle_winding_is_reversed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_triangle_winding_is_reversed.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,iDAFU,SAAS,CAmBb;0BA/BoB,iCAAiC"}
@@ -0,0 +1,35 @@
1
+ import { chunk_material_draw_side } from "../material/chunk_material_draw_side.js";
2
+ import { chunk_node3d_flags } from "../scene/chunk_node3d_flags.js";
3
+ import { NODE3D_STRUCT } from "../scene/NODE3D_STRUCT.js";
4
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
5
+
6
+ /**
7
+ * The whole of what a vertex shader needs to know to emit a triangle the right way round, in one
8
+ * place — because there is more than one reason to reverse and they are not independent of each
9
+ * other.
10
+ *
11
+ * Feed the answer to `triangle_list_reverse_winding`. Nanite's `ReverseWindingOrder` is the same
12
+ * function for the same reason: a GPU-driven draw mixes instances that disagree about this, so it
13
+ * cannot be pipeline state, and every reason has to be combined before the corner is chosen.
14
+ *
15
+ * @see chunk_triangle_list_reverse_winding
16
+ * @type {CodeChunk}
17
+ */
18
+ export const chunk_triangle_winding_is_reversed = CodeChunk.from(
19
+ //language=WGSL
20
+ `
21
+ /**
22
+ * Whether this instance's triangles must be emitted back to front.
23
+ *
24
+ * Two reasons, and they cancel: the instance's transform reflects, or the material asks for the
25
+ * back face. A back-sided material on a mirrored instance is wound like a front-sided one on an
26
+ * ordinary instance, and draws with the same pipeline state as both.
27
+ */
28
+ fn triangle_winding_is_reversed( node: ${NODE3D_STRUCT.wgsl_ref}, draw_side: u32 ) -> bool{
29
+ return node3d_global_is_mirrored(node) != material_draws_back_side(draw_side);
30
+ }
31
+ `, [
32
+ NODE3D_STRUCT.declaration_chunk,
33
+ chunk_node3d_flags,
34
+ chunk_material_draw_side,
35
+ ])
@@ -1 +1 @@
1
- {"version":3,"file":"shader_hzb_mesh_filter_2way.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js"],"names":[],"mappings":"AA8GA,wDAIG;8BAjG2B,kCAAkC"}
1
+ {"version":3,"file":"shader_hzb_mesh_filter_2way.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js"],"names":[],"mappings":"AA4GA,wDAIG;8BA/F2B,kCAAkC"}
@@ -21,12 +21,10 @@ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderReso
21
21
 
22
22
  const resources = new ShaderResourceSetDescriptor();
23
23
 
24
- // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer — the same
25
- // shape shader_read_out_bucket already uses. camera_previous stays a uniform: it is a scene buffer,
26
- // not a per-dispatch value.
27
- resources.setImmediate("bucket_index", U32_CONTAINER_STRUCT);
28
-
24
+ // TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
25
+ // dispatchWorkgroupsIndirect, so this reads 65535 and culls everything. Revert 22893f0a7.
29
26
  resources.createGroup()
27
+ .addUniform("bucket_index", U32_CONTAINER_STRUCT)
30
28
  .addStorageBuffer("bucket_data", RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ)
31
29
 
32
30
  resources.createGroup()
@@ -1 +1 @@
1
- {"version":3,"file":"shader_hzb_meshlet_filter_1way_full.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js"],"names":[],"mappings":"AA8GA;;;GAGG;AACH,kDAFU,aAAa,CAMpB;8BApG2B,kCAAkC"}
1
+ {"version":3,"file":"shader_hzb_meshlet_filter_1way_full.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js"],"names":[],"mappings":"AA6GA;;;GAGG;AACH,kDAFU,aAAa,CAMpB;8BAnG2B,kCAAkC"}
@@ -23,12 +23,11 @@ import { MESHLET_COLLECTION_WRITE_STRUCT } from "../../MESHLET_COLLECTION_WRITE_
23
23
 
24
24
  const resources = new ShaderResourceSetDescriptor();
25
25
 
26
- // per-dispatch, eight bytes, read-only: immediate data rather than a uniform buffer. camera stays
27
- // a uniform — it is a scene buffer, not a per-dispatch value.
28
- resources.setImmediate("resolution", vec2u);
29
-
26
+ // TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
27
+ // dispatchWorkgroupsIndirect, so this reads 65535 and culls everything. Revert 22893f0a7.
30
28
  resources.createGroup()
31
29
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
30
+ .addUniform("resolution", vec2u)
32
31
  .addStorageBuffer("scene_database", WebGPUArray.from(u32))
33
32
  .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT))
34
33
  .addTexture("texture_hzb")
@@ -1,6 +1,15 @@
1
1
  export const RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE: number;
2
2
  export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE: number;
3
- export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_SIDE: number;
3
+ /**
4
+ * One bit, not the two {@link ShadeDrawSide} would need. Only double-sided geometry needs a
5
+ * pipeline of its own — `cullMode: 'none'` has no winding equivalent. `Front` and `Back` share
6
+ * one: a back-sided material is a front-sided one drawn with its winding reversed, and the
7
+ * vertex shader does the reversing.
8
+ *
9
+ * @see rasterization_material_bucket
10
+ * @type {number}
11
+ */
12
+ export const RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED: number;
4
13
  /**
5
14
  * Maximum number of rasterization buckets. This is a number of permutations of different alpha and draw modes.
6
15
  * See Northlight talk on "Alan Wake 2" meshlet shading.
@@ -1 +1 @@
1
- {"version":3,"file":"RASTERIZATION_BUCKET_LIMIT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js"],"names":[],"mappings":"AAmBA,+DAA0F;AAC1F,8DAAsF;AACtF,8DAAsF;AAEtF;;;;GAIG;AACH,yCAFU,MAAM,CAEmK"}
1
+ {"version":3,"file":"RASTERIZATION_BUCKET_LIMIT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js"],"names":[],"mappings":"AAkBA,+DAA0F;AAC1F,8DAAsF;AAEtF;;;;;;;;GAQG;AACH,0DAFU,MAAM,CAE6C;AAE7D;;;;GAIG;AACH,yCAFU,MAAM,CAEsK"}
@@ -1,29 +1,38 @@
1
- import { assert } from "../../../../../core/assert.js";
2
- import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
3
- import { ShadeDrawSide } from "../../../material/ShadeDrawSide.js";
4
- import { TransparencyMode } from "../../../material/TransparencyMode.js";
5
-
6
- /**
7
- *
8
- * @param {Object} e enum
9
- * @return {number} number of bits required to represent it
10
- */
11
- function enum_bit_count(e) {
12
- const max = Math.max.apply(null, Object.values(e));
13
-
14
- assert.isNonNegativeInteger(max, 'max');
15
- assert.lessThanOrEqual(max, 5, "the bucket count is going to be absurd");
16
-
17
- return 32 - Math.clz32(max);
18
- }
19
-
20
- export const RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE = enum_bit_count(TransparencyMode);
21
- export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE = enum_bit_count(ShadeDrawMode);
22
- export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_SIDE = enum_bit_count(ShadeDrawSide);
23
-
24
- /**
25
- * Maximum number of rasterization buckets. This is a number of permutations of different alpha and draw modes.
26
- * See Northlight talk on "Alan Wake 2" meshlet shading.
27
- * @type {number}
28
- */
29
- export const RASTERIZATION_BUCKET_LIMIT = (1 << (RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_SIDE));
1
+ import { assert } from "../../../../../core/assert.js";
2
+ import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
3
+ import { TransparencyMode } from "../../../material/TransparencyMode.js";
4
+
5
+ /**
6
+ *
7
+ * @param {Object} e enum
8
+ * @return {number} number of bits required to represent it
9
+ */
10
+ function enum_bit_count(e) {
11
+ const max = Math.max.apply(null, Object.values(e));
12
+
13
+ assert.isNonNegativeInteger(max, 'max');
14
+ assert.lessThanOrEqual(max, 5, "the bucket count is going to be absurd");
15
+
16
+ return 32 - Math.clz32(max);
17
+ }
18
+
19
+ export const RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE = enum_bit_count(TransparencyMode);
20
+ export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE = enum_bit_count(ShadeDrawMode);
21
+
22
+ /**
23
+ * One bit, not the two {@link ShadeDrawSide} would need. Only double-sided geometry needs a
24
+ * pipeline of its own — `cullMode: 'none'` has no winding equivalent. `Front` and `Back` share
25
+ * one: a back-sided material is a front-sided one drawn with its winding reversed, and the
26
+ * vertex shader does the reversing.
27
+ *
28
+ * @see rasterization_material_bucket
29
+ * @type {number}
30
+ */
31
+ export const RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED = 1;
32
+
33
+ /**
34
+ * Maximum number of rasterization buckets. This is a number of permutations of different alpha and draw modes.
35
+ * See Northlight talk on "Alan Wake 2" meshlet shading.
36
+ * @type {number}
37
+ */
38
+ export const RASTERIZATION_BUCKET_LIMIT = (1 << (RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED));
@@ -7,6 +7,11 @@
7
7
  */
8
8
  export function rasterization_material_bucket(alpha_mode: number | TransparencyMode, draw_mode: number | ShadeDrawMode, side: number | ShadeDrawSide): number;
9
9
  /**
10
+ * A bucket is a pipeline state, and the third field is the only thing a {@link ShadeDrawSide}
11
+ * still says about one: whether it culls at all. `Front` and `Back` land in the same bucket —
12
+ * a back-sided material is a front-sided one whose winding the vertex shader reverses — so a
13
+ * scene that mixes them draws in one pass, through one expansion chain.
14
+ *
10
15
  * @see TransparencyMode
11
16
  * @see ShadeDrawMode
12
17
  * @see rasterization_material_bucket
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_rasterization_material_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js"],"names":[],"mappings":"AAuCA;;;;;;GAMG;AACH,0DALW,MAAM,GAAC,gBAAgB,aACvB,MAAM,GAAC,aAAa,QACpB,MAAM,GAAC,aAAa,GACnB,MAAM,CAUjB;AAhCD;;;;;GAKG;AACH,kDAFU,SAAS,CAWjB;iCAlC+B,uCAAuC;8BAF1C,oCAAoC;8BACpC,oCAAoC;0BAExC,uCAAuC"}
1
+ {"version":3,"file":"chunk_rasterization_material_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js"],"names":[],"mappings":"AA6CA;;;;;;GAMG;AACH,0DALW,MAAM,GAAC,gBAAgB,aACvB,MAAM,GAAC,aAAa,QACpB,MAAM,GAAC,aAAa,GACnB,MAAM,CAYjB;AAzCD;;;;;;;;;;GAUG;AACH,kDAFU,SAAS,CAajB;iCAxC+B,uCAAuC;8BAF1C,oCAAoC;8BACpC,oCAAoC;0BAExC,uCAAuC"}