@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.
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
- package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
- package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
- package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
- package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
- package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
- package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
- package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts +15 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +14 -7
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +87 -78
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +38 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts +5 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +834 -830
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +19 -10
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
- package/src/shade/playground/vgeo_runtime/README.md +186 -27
- package/src/shade/playground/vgeo_runtime/index.html +112 -62
- package/src/shade/playground/vgeo_runtime/main.js +678 -88
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +18 -0
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
- package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +23 -5
- package/src/shade/playground/vgeo_scene/README.md +408 -0
- package/src/shade/playground/vgeo_scene/index.html +144 -0
- package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
- package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_scene/main.js +1716 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.d.ts +4 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +5 -2
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -2
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +77 -7
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +36 -23
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +17 -14
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +19 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +21 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -9
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +59 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts +44 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +36 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_levels.js → level/vgeo_build_levels.js} +61 -95
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +73 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +7 -7
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_normals.js → mesh/vgeo_compute_vertex_normals.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.js → mesh/vgeo_compute_vertex_tangents.js} +5 -5
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +46 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +9 -9
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +63 -16
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +52 -0
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +12 -55
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.js → partition/vgeo_split_face_set_packed.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_extract_submesh.js → submesh/vgeo_extract_submesh.js} +5 -5
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_gather_faces.js → submesh/vgeo_gather_faces.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +10 -11
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +11 -3
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +28 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +7 -3
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +63 -3
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +219 -17
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +156 -11
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +656 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +109 -29
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +173 -105
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +109 -26
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +55 -487
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1388 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +11 -73
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +98 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +130 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +32 -37
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +576 -230
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +38 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +4 -3
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
- package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +22 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +15 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +3 -4
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +83 -78
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -2
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +2 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -7
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +85 -89
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +28 -32
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +61 -4
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
- package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
- package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
- package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
- package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewContext.js +21 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
- package/src/shade/playground/vgeo_viewer/README.md +0 -150
- package/src/shade/playground/vgeo_viewer/cut_geometry.js +0 -460
- package/src/shade/playground/vgeo_viewer/index.html +0 -77
- package/src/shade/playground/vgeo_viewer/main.js +0 -1343
- package/src/shade/playground/vgeo_viewer/select_cut.js +0 -481
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.js +0 -109
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.js +0 -78
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +0 -100
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
- package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoGatheredFaces.js → submesh/VGeoGatheredFaces.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoSubmesh.js → submesh/VGeoSubmesh.js} +0 -0
|
@@ -4,36 +4,33 @@
|
|
|
4
4
|
* One function rather than two agreeing conventions: the pass that creates the buffer and the
|
|
5
5
|
* params block that tells the kernel where to write both come from here, and so does anything that
|
|
6
6
|
* reads it back. A layout computed twice is a layout that drifts, and the way it drifts is a want
|
|
7
|
-
* list written over
|
|
7
|
+
* list written over the touch bits, which reads as wants that never resolve.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Header, touch bits, want records — and the whole of it is read back.** Two regions used to sit
|
|
10
|
+
* between the header and the lists and neither was the CPU's business: a stamp word per page row
|
|
11
|
+
* and a stamp word per lookup word, cleared with the transient every frame and mapped back with
|
|
12
|
+
* it. At the playground's 4,096 slots that was 344 KB a frame across the bus for 33 KB of lists,
|
|
13
|
+
* and the lookup-sized half of it grew with every registered geometry rather than with anything
|
|
14
|
+
* seen. The touch stamps are the touch bits now — one bit per row, which is both the dedup and
|
|
15
|
+
* the record — and the want stamps live in a persistent, frame-tagged buffer the pool owns and
|
|
16
|
+
* nothing reads back (RUNTIME_PLAN_2026_09_14 §2.2, §2.3).
|
|
13
17
|
*
|
|
14
18
|
* @param {Object} options
|
|
15
|
-
* @param {number} options.page_row_capacity one touch
|
|
16
|
-
* @param {number} options.lookup_word_count one want stamp per lookup word, so a want's stamp is
|
|
17
|
-
* its geometry's lookup offset plus the child page index — which is the whole reason the page
|
|
18
|
-
* lookup has its own buffer and its own allocator
|
|
19
|
+
* @param {number} options.page_row_capacity one touch bit per page-table row
|
|
19
20
|
* @param {number} options.want_capacity records
|
|
20
|
-
* @
|
|
21
|
-
*
|
|
22
|
-
* touch_base: number, word_count: number}}
|
|
21
|
+
* @returns {{touch_bits_base: number, touch_word_count: number, want_base: number,
|
|
22
|
+
* word_count: number}}
|
|
23
23
|
*
|
|
24
24
|
* @author Alex Goldring
|
|
25
25
|
* @copyright Company Named Limited (c) 2026
|
|
26
26
|
*/
|
|
27
|
-
export function vgeo_cut_feedback_layout({ page_row_capacity,
|
|
27
|
+
export function vgeo_cut_feedback_layout({ page_row_capacity, want_capacity }: {
|
|
28
28
|
page_row_capacity: number;
|
|
29
|
-
lookup_word_count: number;
|
|
30
29
|
want_capacity: number;
|
|
31
|
-
touch_capacity: number;
|
|
32
30
|
}): {
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
touch_bits_base: number;
|
|
32
|
+
touch_word_count: number;
|
|
35
33
|
want_base: number;
|
|
36
|
-
touch_base: number;
|
|
37
34
|
word_count: number;
|
|
38
35
|
};
|
|
39
36
|
//# sourceMappingURL=vgeo_cut_feedback_layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_cut_feedback_layout.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;
|
|
1
|
+
{"version":3,"file":"vgeo_cut_feedback_layout.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IAR2B,iBAAiB,EAAjC,MAAM;IACU,aAAa,EAA7B,MAAM;IACJ;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAClF,UAAgB,EAAE,MAAM,CAAA;CAAC,CAmBzB"}
|
|
@@ -8,47 +8,38 @@ import { VGEO_WANT_WORDS } from "../layout/VGEO_WANT_WORDS.js";
|
|
|
8
8
|
* One function rather than two agreeing conventions: the pass that creates the buffer and the
|
|
9
9
|
* params block that tells the kernel where to write both come from here, and so does anything that
|
|
10
10
|
* reads it back. A layout computed twice is a layout that drifts, and the way it drifts is a want
|
|
11
|
-
* list written over
|
|
11
|
+
* list written over the touch bits, which reads as wants that never resolve.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* **Header, touch bits, want records — and the whole of it is read back.** Two regions used to sit
|
|
14
|
+
* between the header and the lists and neither was the CPU's business: a stamp word per page row
|
|
15
|
+
* and a stamp word per lookup word, cleared with the transient every frame and mapped back with
|
|
16
|
+
* it. At the playground's 4,096 slots that was 344 KB a frame across the bus for 33 KB of lists,
|
|
17
|
+
* and the lookup-sized half of it grew with every registered geometry rather than with anything
|
|
18
|
+
* seen. The touch stamps are the touch bits now — one bit per row, which is both the dedup and
|
|
19
|
+
* the record — and the want stamps live in a persistent, frame-tagged buffer the pool owns and
|
|
20
|
+
* nothing reads back (RUNTIME_PLAN_2026_09_14 §2.2, §2.3).
|
|
17
21
|
*
|
|
18
22
|
* @param {Object} options
|
|
19
|
-
* @param {number} options.page_row_capacity one touch
|
|
20
|
-
* @param {number} options.lookup_word_count one want stamp per lookup word, so a want's stamp is
|
|
21
|
-
* its geometry's lookup offset plus the child page index — which is the whole reason the page
|
|
22
|
-
* lookup has its own buffer and its own allocator
|
|
23
|
+
* @param {number} options.page_row_capacity one touch bit per page-table row
|
|
23
24
|
* @param {number} options.want_capacity records
|
|
24
|
-
* @
|
|
25
|
-
*
|
|
26
|
-
* touch_base: number, word_count: number}}
|
|
25
|
+
* @returns {{touch_bits_base: number, touch_word_count: number, want_base: number,
|
|
26
|
+
* word_count: number}}
|
|
27
27
|
*
|
|
28
28
|
* @author Alex Goldring
|
|
29
29
|
* @copyright Company Named Limited (c) 2026
|
|
30
30
|
*/
|
|
31
|
-
export function vgeo_cut_feedback_layout({
|
|
32
|
-
page_row_capacity,
|
|
33
|
-
lookup_word_count,
|
|
34
|
-
want_capacity,
|
|
35
|
-
touch_capacity,
|
|
36
|
-
}) {
|
|
31
|
+
export function vgeo_cut_feedback_layout({ page_row_capacity, want_capacity }) {
|
|
37
32
|
assert.isNonNegativeInteger(page_row_capacity, 'page_row_capacity');
|
|
38
|
-
assert.isNonNegativeInteger(lookup_word_count, 'lookup_word_count');
|
|
39
33
|
assert.isNonNegativeInteger(want_capacity, 'want_capacity');
|
|
40
|
-
assert.isNonNegativeInteger(touch_capacity, 'touch_capacity');
|
|
41
34
|
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const want_base =
|
|
45
|
-
const touch_base = want_base + want_capacity * VGEO_WANT_WORDS;
|
|
35
|
+
const touch_bits_base = VGEO_FEEDBACK_OFFSET.HEADER_WORDS;
|
|
36
|
+
const touch_word_count = Math.max(1, Math.ceil(page_row_capacity / 32));
|
|
37
|
+
const want_base = touch_bits_base + touch_word_count;
|
|
46
38
|
|
|
47
39
|
return {
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
touch_bits_base,
|
|
41
|
+
touch_word_count,
|
|
50
42
|
want_base,
|
|
51
|
-
|
|
52
|
-
word_count: touch_base + touch_capacity,
|
|
43
|
+
word_count: want_base + want_capacity * VGEO_WANT_WORDS,
|
|
53
44
|
};
|
|
54
45
|
}
|
package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_vgeo_expand_instances_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAX+B,KAAK;IACT,YAAY,EAA5B,MAAM;IACU,eAAe,EAA/B,MAAM;IACkB,IAAI;IACO,OAAO;IACb,MAAM;IACjC,MAAM,CAsSlB"}
|
package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js
CHANGED
|
@@ -9,6 +9,7 @@ import { graph_prefix_scan_csdldf } from "../../../gpu_primitive/prefix_sum/v1/g
|
|
|
9
9
|
import { RasterizationCollectionType } from "../../../rasterize/expand/RasterizationCollectionType.js";
|
|
10
10
|
import { shader_vgeo_cut_collect } from "./cut/shader_vgeo_cut_collect.js";
|
|
11
11
|
import { shader_vgeo_cut_queue_prepare } from "./cut/shader_vgeo_cut_queue_prepare.js";
|
|
12
|
+
import { shader_vgeo_cut_queue_remainder } from "./cut/shader_vgeo_cut_queue_remainder.js";
|
|
12
13
|
import { shader_vgeo_cut_seed } from "./cut/shader_vgeo_cut_seed.js";
|
|
13
14
|
import { shader_vgeo_cut_traverse } from "./cut/shader_vgeo_cut_traverse.js";
|
|
14
15
|
import { VGEO_CUT_WORKGROUP_SIZE } from "./cut/VGEO_CUT_WORKGROUP_SIZE.js";
|
|
@@ -87,6 +88,30 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
87
88
|
meshlet_capacity: Math.max(1, limits.get_limit(RasterizationCollectionType.Meshlets)),
|
|
88
89
|
});
|
|
89
90
|
|
|
91
|
+
/*
|
|
92
|
+
This view's own uniform, written here rather than when the frame opened. `projection_k` is
|
|
93
|
+
the render target's height over the camera's field of view, so it belongs to a view and not
|
|
94
|
+
to a frame — one buffer for the frame meant a shadow cascade cutting against whichever view
|
|
95
|
+
opened it. The capacities above are frame-global and collapse to a `Math.min` across sites,
|
|
96
|
+
and writing after `declare_collections` is what puts the smallest of them in the buffer that
|
|
97
|
+
this view's passes read.
|
|
98
|
+
*/
|
|
99
|
+
const view_cut = view.virtual_geometry_cut;
|
|
100
|
+
|
|
101
|
+
view_cut.set_projection({
|
|
102
|
+
screen_height: Math.max(1, view.resolution[1]),
|
|
103
|
+
fov_y: view.camera.camera.fov,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
Sized against the tier this cut names rows of, before the params that carry its bound.
|
|
108
|
+
A page row is what the frontier records, so the tier's capacity is the only thing it
|
|
109
|
+
has to agree with.
|
|
110
|
+
*/
|
|
111
|
+
view_cut.resize_frontier(pool.page_row_capacity);
|
|
112
|
+
|
|
113
|
+
view_cut.write_params({ runtime });
|
|
114
|
+
|
|
90
115
|
// ----- collect: which of these instances are virtual, and where is the camera in each one -----
|
|
91
116
|
|
|
92
117
|
const collect_command = graph_build_indirect_dispatch_command(
|
|
@@ -100,7 +125,7 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
100
125
|
encoder: context.encoder,
|
|
101
126
|
command: resources.get(data.command),
|
|
102
127
|
bindings: {
|
|
103
|
-
params:
|
|
128
|
+
params: view_cut.params_buffer,
|
|
104
129
|
camera: view.camera.buffer,
|
|
105
130
|
scene_database: scene.scene_database_buffer,
|
|
106
131
|
geometries: scene.geometries.buffer_metadata,
|
|
@@ -162,7 +187,7 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
162
187
|
encoder: context.encoder,
|
|
163
188
|
command: resources.get(data.command),
|
|
164
189
|
bindings: {
|
|
165
|
-
params:
|
|
190
|
+
params: view_cut.params_buffer,
|
|
166
191
|
vg_arena: pool.buffer_arena,
|
|
167
192
|
prefix_sums: resources.get(data.prefix_sums),
|
|
168
193
|
instances: resources.get(data.instances),
|
|
@@ -196,8 +221,7 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
196
221
|
/*
|
|
197
222
|
The two queues ping-pong, so *which* of them holds work is not a property of either buffer —
|
|
198
223
|
it moves every iteration. Carrying the roles rather than the buffers is what makes the tail
|
|
199
|
-
pass below correct at any `max_iterations
|
|
200
|
-
queue only when the iteration count is even, and the default of 64 is (REVIEW_LEDGER M8).
|
|
224
|
+
pass below correct at any `max_iterations` rather than only at an even one (REVIEW_LEDGER M8).
|
|
201
225
|
*/
|
|
202
226
|
let ready_queue = seed_data.queue_out;
|
|
203
227
|
let spare_queue = spare_spawn.create("vg queue b", queue_descriptor);
|
|
@@ -218,11 +242,10 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
218
242
|
shader_vgeo_cut_queue_prepare.dispatch({
|
|
219
243
|
encoder: context.encoder,
|
|
220
244
|
bindings: {
|
|
221
|
-
params:
|
|
245
|
+
params: view_cut.params_buffer,
|
|
222
246
|
queue_ready: resources.get(data.queue_ready),
|
|
223
247
|
queue_spare: resources.get(data.queue_spare),
|
|
224
248
|
command: resources.get(data.command),
|
|
225
|
-
feedback: resources.get(data.feedback),
|
|
226
249
|
}
|
|
227
250
|
});
|
|
228
251
|
}
|
|
@@ -238,8 +261,6 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
238
261
|
const ready = prepare_data.queue_ready = prepare_pass.write(ready_queue);
|
|
239
262
|
const spare = prepare_data.queue_spare = prepare_pass.write(spare_queue);
|
|
240
263
|
|
|
241
|
-
feedback = prepare_data.feedback = prepare_pass.write(feedback);
|
|
242
|
-
|
|
243
264
|
prepare_data.command = prepare_pass.create(
|
|
244
265
|
`vg command ${iteration}`, INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
|
|
245
266
|
);
|
|
@@ -252,14 +273,16 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
252
273
|
encoder: context.encoder,
|
|
253
274
|
command: resources.get(data.command),
|
|
254
275
|
bindings: {
|
|
255
|
-
params:
|
|
276
|
+
params: view_cut.params_buffer,
|
|
256
277
|
vg_lookup: pool.buffer_lookup,
|
|
257
278
|
vg_arena: pool.buffer_arena,
|
|
279
|
+
vg_want_stamps: pool.buffer_want_stamps,
|
|
258
280
|
instances: resources.get(data.instances),
|
|
259
281
|
queue_in: resources.get(data.queue_in),
|
|
260
282
|
queue_out: resources.get(data.queue_out),
|
|
261
283
|
claim: resources.get(data.claim),
|
|
262
284
|
feedback: resources.get(data.feedback),
|
|
285
|
+
frontier: view_cut.frontier_buffer,
|
|
263
286
|
out_meshlets: resources.get(data.out_meshlets),
|
|
264
287
|
}
|
|
265
288
|
});
|
|
@@ -282,35 +305,32 @@ export function graph_vgeo_expand_instances_to_meshlets({
|
|
|
282
305
|
}
|
|
283
306
|
|
|
284
307
|
/*
|
|
285
|
-
One more
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
308
|
+
One more pass, for one number. The loop above records a fixed number of prepare/traverse pairs
|
|
309
|
+
and the queue can still hold work when the last of them finishes — a subtree never descended,
|
|
310
|
+
which is a hole rather than a coarse stand-in, and the one degradation §4.5 admits. This is
|
|
311
|
+
where `VGEO_CUT_STAT.QUEUE_REMAINING` comes from.
|
|
312
|
+
|
|
313
|
+
It is not the prepare pass: that one runs *between* wavefronts and once per iteration per
|
|
314
|
+
expansion site, so what it could report is a frontier rather than a remainder, and the next
|
|
315
|
+
site would overwrite it. See {@link shader_vgeo_cut_queue_remainder}.
|
|
316
|
+
|
|
317
|
+
`ready_queue` and not either buffer by name: which of the two holds the produced queue
|
|
294
318
|
alternates per iteration, so the roles are carried through the loop rather than named here.
|
|
295
319
|
*/
|
|
296
320
|
const tail_data = {};
|
|
297
321
|
|
|
298
322
|
const tail_pass = graph.add("vg queue tail", tail_data, (data, resources, context) => {
|
|
299
|
-
|
|
323
|
+
shader_vgeo_cut_queue_remainder.dispatch({
|
|
300
324
|
encoder: context.encoder,
|
|
301
325
|
bindings: {
|
|
302
|
-
params:
|
|
326
|
+
params: view_cut.params_buffer,
|
|
303
327
|
queue_ready: resources.get(data.queue_ready),
|
|
304
|
-
queue_spare: resources.get(data.queue_spare),
|
|
305
|
-
command: resources.get(data.command),
|
|
306
328
|
feedback: resources.get(data.feedback),
|
|
307
329
|
}
|
|
308
330
|
});
|
|
309
331
|
});
|
|
310
332
|
|
|
311
|
-
tail_data.queue_ready = tail_pass.
|
|
312
|
-
tail_data.queue_spare = tail_pass.write(spare_queue);
|
|
313
|
-
tail_data.command = tail_pass.create("vg command tail", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
|
|
333
|
+
tail_data.queue_ready = tail_pass.read(ready_queue);
|
|
314
334
|
|
|
315
335
|
feedback = tail_data.feedback = tail_pass.write(feedback);
|
|
316
336
|
|
|
@@ -96,4 +96,15 @@ export const VGEO_CUT_STAT = {
|
|
|
96
96
|
* number that was outstanding at the end.
|
|
97
97
|
*/
|
|
98
98
|
QUEUE_REMAINING: 13,
|
|
99
|
+
/**
|
|
100
|
+
* Clusters discarded by the frustum before they could draw, clamp or refine.
|
|
101
|
+
*
|
|
102
|
+
* {@link CULLED_FRUSTUM} is a node's whole subtree; this is one cluster, and it is the one that
|
|
103
|
+
* matters for residency. A cluster claims — and touches — its child page the moment it refines,
|
|
104
|
+
* and the frustum used to be consulted only at the child's nodes, after the claim. Zoomed in on
|
|
105
|
+
* a wall, every cluster of the wall at that level refined whether or not it was on screen,
|
|
106
|
+
* 4,044 rows of 4,096 were touched a frame, and nothing was ever cold enough to evict
|
|
107
|
+
* (RUNTIME_PLAN_2026_09_14 §0, §2.1).
|
|
108
|
+
*/
|
|
109
|
+
CULLED_CLUSTER: 14,
|
|
99
110
|
};
|
|
@@ -4,24 +4,26 @@ import { VGEO_CUT_STAT_COUNT } from "./VGEO_CUT_STAT_COUNT.js";
|
|
|
4
4
|
* Word offsets in the feedback buffer — the one thing the cut hands back to the CPU, and the only
|
|
5
5
|
* place in the runtime where a GPU pass and a host frame meet.
|
|
6
6
|
*
|
|
7
|
-
* Header first, then the
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Header first, then the touch bits, then the want records; see `vgeo_cut_feedback_layout` for the
|
|
8
|
+
* two that move. Design §6: the wants loop tolerates its transport — multi-frame `mapAsync`
|
|
9
|
+
* latency, a small in-flight cap, and frames where feedback is skipped entirely.
|
|
10
|
+
*
|
|
11
|
+
* There is no touch count any more. A touch is one bit per page row (RUNTIME_PLAN_2026_09_14
|
|
12
|
+
* §2.2), so the list it used to count, and the capacity that list could overflow, are gone.
|
|
10
13
|
*
|
|
11
14
|
* @author Alex Goldring
|
|
12
15
|
* @copyright Company Named Limited (c) 2026
|
|
13
16
|
*/
|
|
14
17
|
export const VGEO_FEEDBACK_OFFSET = {
|
|
15
18
|
WANT_COUNT: 0,
|
|
16
|
-
TOUCH_COUNT: 1,
|
|
17
19
|
/**
|
|
18
|
-
* Counters live in the header so that a frame whose
|
|
20
|
+
* Counters live in the header so that a frame whose list overflowed still says so.
|
|
19
21
|
*/
|
|
20
|
-
STATS:
|
|
22
|
+
STATS: 1,
|
|
21
23
|
/**
|
|
22
|
-
* Where the
|
|
23
|
-
*
|
|
24
|
-
*
|
|
24
|
+
* Where the touch bits begin. The want records follow them, and their base travels in the
|
|
25
|
+
* params block because a graph resource's size is a host-side decision and the kernel must not
|
|
26
|
+
* assume one.
|
|
25
27
|
*/
|
|
26
|
-
HEADER_WORDS:
|
|
28
|
+
HEADER_WORDS: 1 + VGEO_CUT_STAT_COUNT,
|
|
27
29
|
};
|
|
@@ -33,4 +33,12 @@ export const VGEO_GROUP_ROW_OFFSET = {
|
|
|
33
33
|
* copy has been evicted underneath this tier still has a correct answer.
|
|
34
34
|
*/
|
|
35
35
|
PARENT_COUNT: 3,
|
|
36
|
+
/**
|
|
37
|
+
* Where this group's run in the page's parent rows starts; {@link PARENT_COUNT} is its length.
|
|
38
|
+
*
|
|
39
|
+
* Zero on a page from a container written before `format_version` 4, which carries no upward
|
|
40
|
+
* edge — and so is that page's `PARENT_ENTRY_COUNT`, which is what a reader checks rather than
|
|
41
|
+
* asking the container its version.
|
|
42
|
+
*/
|
|
43
|
+
PARENT_FIRST: 4,
|
|
36
44
|
};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Words in one group row.
|
|
3
|
-
*
|
|
2
|
+
* Words in one group row.
|
|
3
|
+
*
|
|
4
|
+
* Five, and not padded back up to eight. Four used to buy a 16-byte-aligned group block for nothing,
|
|
5
|
+
* and the fifth word — `PARENT_FIRST` — spends that alignment rather than doubling the row: the
|
|
6
|
+
* cluster block that follows is 13 words a row and was never 16-byte aligned internally either, so
|
|
7
|
+
* there was nothing downstream the property was protecting. A page carries a handful of groups
|
|
8
|
+
* against hundreds of clusters, so neither choice is measurable; this one is only smaller.
|
|
4
9
|
*
|
|
5
10
|
* @author Alex Goldring
|
|
6
11
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_GROUP_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"VGEO_GROUP_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,mCAFU,MAAM,CAEsB"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Words in one group row.
|
|
3
|
-
*
|
|
2
|
+
* Words in one group row.
|
|
3
|
+
*
|
|
4
|
+
* Five, and not padded back up to eight. Four used to buy a 16-byte-aligned group block for nothing,
|
|
5
|
+
* and the fifth word — `PARENT_FIRST` — spends that alignment rather than doubling the row: the
|
|
6
|
+
* cluster block that follows is 13 words a row and was never 16-byte aligned internally either, so
|
|
7
|
+
* there was nothing downstream the property was protecting. A page carries a handful of groups
|
|
8
|
+
* against hundreds of clusters, so neither choice is measurable; this one is only smaller.
|
|
4
9
|
*
|
|
5
10
|
* @author Alex Goldring
|
|
6
11
|
* @copyright Company Named Limited (c) 2026
|
|
7
12
|
* @type {number}
|
|
8
13
|
*/
|
|
9
|
-
export const VGEO_GROUP_ROW_WORDS =
|
|
14
|
+
export const VGEO_GROUP_ROW_WORDS = 5;
|
|
@@ -58,4 +58,23 @@ export const VGEO_PAGE_ROW_OFFSET = {
|
|
|
58
58
|
* down itself cannot drift.
|
|
59
59
|
*/
|
|
60
60
|
DECODED_SIZE: 7,
|
|
61
|
+
/**
|
|
62
|
+
* Entries in this page's parent rows — the sum of every group's `PARENT_COUNT`, and the bound
|
|
63
|
+
* a walk up must stay inside.
|
|
64
|
+
*
|
|
65
|
+
* **Zero says the container has no upward edge**, which is every container written before
|
|
66
|
+
* `format_version` 4. A kernel that wants to coarsen reads this rather than asking what version
|
|
67
|
+
* the asset is, and takes zero as "re-descend instead".
|
|
68
|
+
*/
|
|
69
|
+
PARENT_ENTRY_COUNT: 8,
|
|
70
|
+
/**
|
|
71
|
+
* `VGeoRuntimeTables`' own generation for this row, mirrored here at install.
|
|
72
|
+
*
|
|
73
|
+
* A page row is reused: an eviction bumps the counter, so a value stored beside a row reference
|
|
74
|
+
* stays true only while the row still holds the occupant it was written against. Anything that
|
|
75
|
+
* outlives a frame — a cut kept between frames is the case this is for — stores the generation
|
|
76
|
+
* it saw and compares, which is one equality and no clock. A frame number would need an
|
|
77
|
+
* ordering argument instead, and would still not separate two installs inside one frame.
|
|
78
|
+
*/
|
|
79
|
+
GENERATION: 9,
|
|
61
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_PAGE_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,kCAFU,MAAM,
|
|
1
|
+
{"version":3,"file":"VGEO_PAGE_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,kCAFU,MAAM,CAEsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_PARENT_ROW_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Word offsets within one parent row.
|
|
3
|
+
*
|
|
4
|
+
* A group's parents are the clusters that would be drawn in its place if the camera pulled back, so
|
|
5
|
+
* the row names a cluster the way a cluster row names its child: a global page index, and an index
|
|
6
|
+
* within that page. What a coarsening kernel does with the pair is what the descent already does
|
|
7
|
+
* with `CHILD_PAGE_INDEX`/`CHILD_GROUP` — resolve the page through `vg_lookup`, then read the row.
|
|
8
|
+
*
|
|
9
|
+
* @author Alex Goldring
|
|
10
|
+
* @copyright Company Named Limited (c) 2026
|
|
11
|
+
*/
|
|
12
|
+
export const VGEO_PARENT_ROW_OFFSET = {
|
|
13
|
+
/**
|
|
14
|
+
* The container page index holding this parent, resolved at install: `SAME_PAGE` has already
|
|
15
|
+
* become this page's own index, so a reader here never meets a sentinel.
|
|
16
|
+
*/
|
|
17
|
+
PAGE_INDEX: 0,
|
|
18
|
+
/**
|
|
19
|
+
* Cluster index within that page.
|
|
20
|
+
*/
|
|
21
|
+
CLUSTER: 1,
|
|
22
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words in one parent row — the arena's copy of a group-parent entry (`VGEO_FORMAT.md` §6.3).
|
|
3
|
+
*
|
|
4
|
+
* Two, where the file's entry is one word, because the file's `parent_ref` indexes a per-page table
|
|
5
|
+
* and the arena's does not: an install resolves it to a **global container page index**, exactly as
|
|
6
|
+
* it resolves `child_ref`, so the kernel's lookup path is the same in both directions and there is
|
|
7
|
+
* no `SAME_PAGE` branch in the shader.
|
|
8
|
+
*
|
|
9
|
+
* @author Alex Goldring
|
|
10
|
+
* @copyright Company Named Limited (c) 2026
|
|
11
|
+
* @type {number}
|
|
12
|
+
*/
|
|
13
|
+
export const VGEO_PARENT_ROW_WORDS: number;
|
|
14
|
+
//# sourceMappingURL=VGEO_PARENT_ROW_WORDS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_PARENT_ROW_WORDS.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,oCAFU,MAAM,CAEuB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words in one parent row — the arena's copy of a group-parent entry (`VGEO_FORMAT.md` §6.3).
|
|
3
|
+
*
|
|
4
|
+
* Two, where the file's entry is one word, because the file's `parent_ref` indexes a per-page table
|
|
5
|
+
* and the arena's does not: an install resolves it to a **global container page index**, exactly as
|
|
6
|
+
* it resolves `child_ref`, so the kernel's lookup path is the same in both directions and there is
|
|
7
|
+
* no `SAME_PAGE` branch in the shader.
|
|
8
|
+
*
|
|
9
|
+
* @author Alex Goldring
|
|
10
|
+
* @copyright Company Named Limited (c) 2026
|
|
11
|
+
* @type {number}
|
|
12
|
+
*/
|
|
13
|
+
export const VGEO_PARENT_ROW_WORDS = 2;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set in a queue item's `target` when it names an entry of a page's parent rows — one step of a
|
|
3
|
+
* walk *up* — rather than a node to descend or a group to evaluate.
|
|
4
|
+
*
|
|
5
|
+
* It is its own item kind rather than a page visit produced directly because of the claim. A page
|
|
6
|
+
* visit carries the promise that its producer already claimed the page, and a group with several
|
|
7
|
+
* parents produces several of them at once: the producer would have to claim each, count only the
|
|
8
|
+
* ones it won, and then hand any lane of the wave a rule for building the k-th *won* page out of
|
|
9
|
+
* five numbers. One extra hop costs a queue round trip on a path that moves under one entry a frame
|
|
10
|
+
* (CUT_PLAN_2026_09_14 §6.7) and keeps the claim exactly where every other page visit puts it.
|
|
11
|
+
*
|
|
12
|
+
* @author Alex Goldring
|
|
13
|
+
* @copyright Company Named Limited (c) 2026
|
|
14
|
+
* @type {number}
|
|
15
|
+
*/
|
|
16
|
+
export const VGEO_QUEUE_TARGET_PARENT_BIT: number;
|
|
17
|
+
//# sourceMappingURL=VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map
|
package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_QUEUE_TARGET_PARENT_BIT.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,2CAFU,MAAM,CAEuC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set in a queue item's `target` when it names an entry of a page's parent rows — one step of a
|
|
3
|
+
* walk *up* — rather than a node to descend or a group to evaluate.
|
|
4
|
+
*
|
|
5
|
+
* It is its own item kind rather than a page visit produced directly because of the claim. A page
|
|
6
|
+
* visit carries the promise that its producer already claimed the page, and a group with several
|
|
7
|
+
* parents produces several of them at once: the producer would have to claim each, count only the
|
|
8
|
+
* ones it won, and then hand any lane of the wave a rule for building the k-th *won* page out of
|
|
9
|
+
* five numbers. One extra hop costs a queue round trip on a path that moves under one entry a frame
|
|
10
|
+
* (CUT_PLAN_2026_09_14 §6.7) and keeps the claim exactly where every other page visit puts it.
|
|
11
|
+
*
|
|
12
|
+
* @author Alex Goldring
|
|
13
|
+
* @copyright Company Named Limited (c) 2026
|
|
14
|
+
* @type {number}
|
|
15
|
+
*/
|
|
16
|
+
export const VGEO_QUEUE_TARGET_PARENT_BIT = 0x40000000;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spawn one page-fetch worker.
|
|
3
|
+
*
|
|
4
|
+
* The `new Worker(new URL(..., import.meta.url), { type: "module" })` form is what the consumer's
|
|
5
|
+
* bundler detects and what vite serves as-is, and it lives in a module no spec imports, because
|
|
6
|
+
* `import.meta` is a parse error under a CommonJS transform — the same arrangement
|
|
7
|
+
* `makeClothWorker` keeps for the same reason.
|
|
8
|
+
*
|
|
9
|
+
* @returns {Worker}
|
|
10
|
+
*
|
|
11
|
+
* @author Alex Goldring
|
|
12
|
+
* @copyright Company Named Limited (c) 2026
|
|
13
|
+
*/
|
|
14
|
+
export function make_vgeo_page_worker(): Worker;
|
|
15
|
+
//# sourceMappingURL=make_vgeo_page_worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make_vgeo_page_worker.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,yCALa,MAAM,CAOlB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spawn one page-fetch worker.
|
|
3
|
+
*
|
|
4
|
+
* The `new Worker(new URL(..., import.meta.url), { type: "module" })` form is what the consumer's
|
|
5
|
+
* bundler detects and what vite serves as-is, and it lives in a module no spec imports, because
|
|
6
|
+
* `import.meta` is a parse error under a CommonJS transform — the same arrangement
|
|
7
|
+
* `makeClothWorker` keeps for the same reason.
|
|
8
|
+
*
|
|
9
|
+
* @returns {Worker}
|
|
10
|
+
*
|
|
11
|
+
* @author Alex Goldring
|
|
12
|
+
* @copyright Company Named Limited (c) 2026
|
|
13
|
+
*/
|
|
14
|
+
export function make_vgeo_page_worker() {
|
|
15
|
+
return new Worker(new URL("./vgeo_page.worker.js", import.meta.url), { type: "module" });
|
|
16
|
+
}
|