@woosh/meep-engine 3.26.0 → 3.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/vgeo_runtime/README.md +167 -22
- package/src/shade/playground/vgeo_runtime/index.html +112 -62
- package/src/shade/playground/vgeo_runtime/main.js +660 -83
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
- package/src/shade/playground/vgeo_viewer/sample_asset.js +19 -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/virtual/VGEO_FORMAT.md +73 -5
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +26 -15
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +5 -3
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +20 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.js +56 -9
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +1 -0
- 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/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_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/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 +55 -0
- 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 +202 -13
- 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 +147 -10
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +637 -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 +58 -28
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +77 -105
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +105 -22
- 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 +47 -489
- 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 +1363 -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.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +15 -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 +186 -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 +20 -8
- 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 +580 -188
- 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/tiny-gltf.d.ts +1 -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/postprocess/nss/NSS.d.ts +1 -1
- 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/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/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/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/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/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +7 -1
- 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 +7 -1
- 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 +59 -4
- 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/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
- package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words of frontier one view keeps: one bit per page row of the tier it cuts against.
|
|
3
|
+
*
|
|
4
|
+
* The frontier is the set of pages a view's cut is standing on, and it is a **bitmask over page
|
|
5
|
+
* rows** rather than a list of groups because that is the granularity everything else in the cut
|
|
6
|
+
* already speaks: a page is what `vg_claim_page` claims, what a page visit evaluates whole, and what
|
|
7
|
+
* both directions of the traversal cross. A reseed hands the descent those pages instead of node 0
|
|
8
|
+
* of the root, and CUT_PLAN_2026_09_14 §7.5's coarsen path carries it the rest of the way.
|
|
9
|
+
*
|
|
10
|
+
* It is small. A 4,096-row tier is 128 words — half a kilobyte a view — against the 120–160 KB §5
|
|
11
|
+
* sizes a group-level frontier at, and it needs no allocator, no compaction and no entry format.
|
|
12
|
+
* What it gives up is per-instance keying (§1.1): two instances of one geometry at different
|
|
13
|
+
* distances share one page set, which is a superset of each one's own and therefore correct, but
|
|
14
|
+
* costs the closer instance a few page visits it did not need.
|
|
15
|
+
*
|
|
16
|
+
* @param {number} page_row_capacity
|
|
17
|
+
* @returns {number} words
|
|
18
|
+
*
|
|
19
|
+
* @author Alex Goldring
|
|
20
|
+
* @copyright Company Named Limited (c) 2026
|
|
21
|
+
*/
|
|
22
|
+
export function vgeo_frontier_words(page_row_capacity: number): number;
|
|
23
|
+
//# sourceMappingURL=vgeo_frontier_words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_frontier_words.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uDANW,MAAM,GACJ,MAAM,CASlB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Words of frontier one view keeps: one bit per page row of the tier it cuts against.
|
|
5
|
+
*
|
|
6
|
+
* The frontier is the set of pages a view's cut is standing on, and it is a **bitmask over page
|
|
7
|
+
* rows** rather than a list of groups because that is the granularity everything else in the cut
|
|
8
|
+
* already speaks: a page is what `vg_claim_page` claims, what a page visit evaluates whole, and what
|
|
9
|
+
* both directions of the traversal cross. A reseed hands the descent those pages instead of node 0
|
|
10
|
+
* of the root, and CUT_PLAN_2026_09_14 §7.5's coarsen path carries it the rest of the way.
|
|
11
|
+
*
|
|
12
|
+
* It is small. A 4,096-row tier is 128 words — half a kilobyte a view — against the 120–160 KB §5
|
|
13
|
+
* sizes a group-level frontier at, and it needs no allocator, no compaction and no entry format.
|
|
14
|
+
* What it gives up is per-instance keying (§1.1): two instances of one geometry at different
|
|
15
|
+
* distances share one page set, which is a superset of each one's own and therefore correct, but
|
|
16
|
+
* costs the closer instance a few page visits it did not need.
|
|
17
|
+
*
|
|
18
|
+
* @param {number} page_row_capacity
|
|
19
|
+
* @returns {number} words
|
|
20
|
+
*
|
|
21
|
+
* @author Alex Goldring
|
|
22
|
+
* @copyright Company Named Limited (c) 2026
|
|
23
|
+
*/
|
|
24
|
+
export function vgeo_frontier_words(page_row_capacity) {
|
|
25
|
+
assert.isNonNegativeInteger(page_row_capacity, 'page_row_capacity');
|
|
26
|
+
|
|
27
|
+
return Math.ceil(page_row_capacity / 32);
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_page.worker.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { vgeo_page_worker_serve } from "../format/read/vgeo_page_worker_serve.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The page-fetch worker: reads, verifies and decodes pages off the main thread.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here but the serve call; the protocol lives with the core in `format/read/` so a spec can
|
|
7
|
+
* run it over a loopback, and this file exists so that {@link make_vgeo_page_worker} has a module
|
|
8
|
+
* to point a `Worker` at.
|
|
9
|
+
*
|
|
10
|
+
* @author Alex Goldring
|
|
11
|
+
* @copyright Company Named Limited (c) 2026
|
|
12
|
+
*/
|
|
13
|
+
vgeo_page_worker_serve(self);
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* How many arena words one page's block runs to.
|
|
3
3
|
*
|
|
4
|
-
* A page is **one allocation** — `[node rows][group rows][cluster rows]`, back to
|
|
5
|
-
* the whole of what installing it costs the arena and the whole of what evicting
|
|
6
|
-
* base inside the block is a count away from the block's own start, which is why
|
|
7
|
-
*
|
|
4
|
+
* A page is **one allocation** — `[node rows][group rows][cluster rows][parent rows]`, back to
|
|
5
|
+
* back — so this is the whole of what installing it costs the arena and the whole of what evicting
|
|
6
|
+
* it returns. Every base inside the block is a count away from the block's own start, which is why
|
|
7
|
+
* a page row carries the counts and nothing can move inside a resident page.
|
|
8
|
+
*
|
|
9
|
+
* The parent rows are last because they are the section a page may not have: a container written
|
|
10
|
+
* before `format_version` 4 carries no upward edge, `parent_entry_count` is zero, and the block is
|
|
11
|
+
* exactly what it was.
|
|
8
12
|
*
|
|
9
13
|
* @param {number} node_count
|
|
10
14
|
* @param {number} group_count
|
|
11
15
|
* @param {number} cluster_count
|
|
16
|
+
* @param {number} [parent_entry_count]
|
|
12
17
|
* @returns {number} words
|
|
13
18
|
*
|
|
14
19
|
* @author Alex Goldring
|
|
15
20
|
* @copyright Company Named Limited (c) 2026
|
|
16
21
|
*/
|
|
17
|
-
export function vgeo_runtime_page_block_words(node_count: number, group_count: number, cluster_count: number): number;
|
|
22
|
+
export function vgeo_runtime_page_block_words(node_count: number, group_count: number, cluster_count: number, parent_entry_count?: number): number;
|
|
18
23
|
//# sourceMappingURL=vgeo_runtime_page_block_words.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_runtime_page_block_words.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_runtime_page_block_words.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0DATW,MAAM,eACN,MAAM,iBACN,MAAM,uBACN,MAAM,GACJ,MAAM,CAYlB"}
|
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
import { VGEO_CLUSTER_ROW_WORDS } from "./layout/VGEO_CLUSTER_ROW_WORDS.js";
|
|
2
2
|
import { VGEO_GROUP_ROW_WORDS } from "./layout/VGEO_GROUP_ROW_WORDS.js";
|
|
3
3
|
import { VGEO_NODE_ROW_WORDS } from "./layout/VGEO_NODE_ROW_WORDS.js";
|
|
4
|
+
import { VGEO_PARENT_ROW_WORDS } from "./layout/VGEO_PARENT_ROW_WORDS.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* How many arena words one page's block runs to.
|
|
7
8
|
*
|
|
8
|
-
* A page is **one allocation** — `[node rows][group rows][cluster rows]`, back to
|
|
9
|
-
* the whole of what installing it costs the arena and the whole of what evicting
|
|
10
|
-
* base inside the block is a count away from the block's own start, which is why
|
|
11
|
-
*
|
|
9
|
+
* A page is **one allocation** — `[node rows][group rows][cluster rows][parent rows]`, back to
|
|
10
|
+
* back — so this is the whole of what installing it costs the arena and the whole of what evicting
|
|
11
|
+
* it returns. Every base inside the block is a count away from the block's own start, which is why
|
|
12
|
+
* a page row carries the counts and nothing can move inside a resident page.
|
|
13
|
+
*
|
|
14
|
+
* The parent rows are last because they are the section a page may not have: a container written
|
|
15
|
+
* before `format_version` 4 carries no upward edge, `parent_entry_count` is zero, and the block is
|
|
16
|
+
* exactly what it was.
|
|
12
17
|
*
|
|
13
18
|
* @param {number} node_count
|
|
14
19
|
* @param {number} group_count
|
|
15
20
|
* @param {number} cluster_count
|
|
21
|
+
* @param {number} [parent_entry_count]
|
|
16
22
|
* @returns {number} words
|
|
17
23
|
*
|
|
18
24
|
* @author Alex Goldring
|
|
19
25
|
* @copyright Company Named Limited (c) 2026
|
|
20
26
|
*/
|
|
21
|
-
export function vgeo_runtime_page_block_words(
|
|
27
|
+
export function vgeo_runtime_page_block_words(
|
|
28
|
+
node_count, group_count, cluster_count, parent_entry_count = 0
|
|
29
|
+
) {
|
|
22
30
|
return node_count * VGEO_NODE_ROW_WORDS
|
|
23
31
|
+ group_count * VGEO_GROUP_ROW_WORDS
|
|
24
|
-
+ cluster_count * VGEO_CLUSTER_ROW_WORDS
|
|
32
|
+
+ cluster_count * VGEO_CLUSTER_ROW_WORDS
|
|
33
|
+
+ parent_entry_count * VGEO_PARENT_ROW_WORDS;
|
|
25
34
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lay one decoded page's node, group and
|
|
2
|
+
* Lay one decoded page's node, group, cluster and parent rows into the arena.
|
|
3
3
|
*
|
|
4
4
|
* This is the whole of what a page install writes besides its payload, and it is deliberately a
|
|
5
5
|
* free function over two views rather than a method: the pool calls it against a mapped GPU upload
|
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
* resolves to a page that is trivially resident — itself — and falls straight through to the
|
|
15
15
|
* selectability question, which is the only one it was ever really asking.
|
|
16
16
|
*
|
|
17
|
+
* The parent rows (format §6.3) get the same treatment for the same reason, off the page's own
|
|
18
|
+
* parent-page table rather than its child table. A page from a container written before
|
|
19
|
+
* `format_version` 4 has no such table, so the section is empty and the page row's
|
|
20
|
+
* `PARENT_ENTRY_COUNT` says zero — which is what a kernel checks, rather than asking a version.
|
|
21
|
+
*
|
|
17
22
|
* Group selectability is **not** written here. It changes after install, as the reader's activation
|
|
18
23
|
* cascades run, and it is the one field of a resident page that moves.
|
|
19
24
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_runtime_write_page_block.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_runtime_write_page_block.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qDAXW,WAAW,UACX,YAAY,QAEZ,MAAM,mBAEJ,MAAM,CAkIlB"}
|
|
@@ -10,9 +10,11 @@ import { VGEO_NODE_ROW_LEAF_BIT } from "./layout/VGEO_NODE_ROW_LEAF_BIT.js";
|
|
|
10
10
|
import { VGEO_NODE_ROW_OFFSET } from "./layout/VGEO_NODE_ROW_OFFSET.js";
|
|
11
11
|
import { VGEO_NODE_ROW_WORDS } from "./layout/VGEO_NODE_ROW_WORDS.js";
|
|
12
12
|
import { VGEO_NO_CHILD_PAGE } from "./layout/VGEO_NO_CHILD_PAGE.js";
|
|
13
|
+
import { VGEO_PARENT_ROW_OFFSET } from "./layout/VGEO_PARENT_ROW_OFFSET.js";
|
|
14
|
+
import { VGEO_PARENT_ROW_WORDS } from "./layout/VGEO_PARENT_ROW_WORDS.js";
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
|
-
* Lay one decoded page's node, group and
|
|
17
|
+
* Lay one decoded page's node, group, cluster and parent rows into the arena.
|
|
16
18
|
*
|
|
17
19
|
* This is the whole of what a page install writes besides its payload, and it is deliberately a
|
|
18
20
|
* free function over two views rather than a method: the pool calls it against a mapped GPU upload
|
|
@@ -27,6 +29,11 @@ import { VGEO_NO_CHILD_PAGE } from "./layout/VGEO_NO_CHILD_PAGE.js";
|
|
|
27
29
|
* resolves to a page that is trivially resident — itself — and falls straight through to the
|
|
28
30
|
* selectability question, which is the only one it was ever really asking.
|
|
29
31
|
*
|
|
32
|
+
* The parent rows (format §6.3) get the same treatment for the same reason, off the page's own
|
|
33
|
+
* parent-page table rather than its child table. A page from a container written before
|
|
34
|
+
* `format_version` 4 has no such table, so the section is empty and the page row's
|
|
35
|
+
* `PARENT_ENTRY_COUNT` says zero — which is what a kernel checks, rather than asking a version.
|
|
36
|
+
*
|
|
30
37
|
* Group selectability is **not** written here. It changes after install, as the reader's activation
|
|
31
38
|
* cascades run, and it is the one field of a resident page that moves.
|
|
32
39
|
*
|
|
@@ -51,6 +58,7 @@ export function vgeo_runtime_write_page_block(words, floats, base, page) {
|
|
|
51
58
|
|
|
52
59
|
const group_base = base + node_count * VGEO_NODE_ROW_WORDS;
|
|
53
60
|
const cluster_base = group_base + group_count * VGEO_GROUP_ROW_WORDS;
|
|
61
|
+
const parent_base = cluster_base + cluster_count * VGEO_CLUSTER_ROW_WORDS;
|
|
54
62
|
|
|
55
63
|
let broken_child_refs = 0;
|
|
56
64
|
|
|
@@ -84,6 +92,7 @@ export function vgeo_runtime_write_page_block(words, floats, base, page) {
|
|
|
84
92
|
tier's answer costs.
|
|
85
93
|
*/
|
|
86
94
|
words[row + VGEO_GROUP_ROW_OFFSET.PARENT_COUNT] = page.group_parent_count[group];
|
|
95
|
+
words[row + VGEO_GROUP_ROW_OFFSET.PARENT_FIRST] = page.group_parent_first[group] ?? 0;
|
|
87
96
|
|
|
88
97
|
// not selectable until activation says so; a page installs drawing nothing. Any other
|
|
89
98
|
// default draws a group before the ancestors it hangs off have arrived.
|
|
@@ -134,5 +143,33 @@ export function vgeo_runtime_write_page_block(words, floats, base, page) {
|
|
|
134
143
|
words[row + VGEO_CLUSTER_ROW_OFFSET.CHILD_REF] = child_ref;
|
|
135
144
|
}
|
|
136
145
|
|
|
146
|
+
for (let entry = 0; entry < page.parent_ref.length; entry++) {
|
|
147
|
+
const row = parent_base + entry * VGEO_PARENT_ROW_WORDS;
|
|
148
|
+
|
|
149
|
+
const parent_ref = page.parent_ref[entry];
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
A parent_ref outside the page's parent-page table is the upward twin of a broken child_ref
|
|
153
|
+
and is counted with it: format §11.16 forbids it, validation is off by default, and the
|
|
154
|
+
cluster it would have named does not exist. Pointing it at this page would be worse than
|
|
155
|
+
admitting there is nothing there — VGEO_NO_CHILD_PAGE never resolves, so a walk up stops
|
|
156
|
+
and the fallback re-descends, which is correct rather than merely safe.
|
|
157
|
+
*/
|
|
158
|
+
let parent_page_index;
|
|
159
|
+
|
|
160
|
+
if (parent_ref === VGEO_SAME_PAGE) {
|
|
161
|
+
parent_page_index = page.index;
|
|
162
|
+
} else if (parent_ref < page.parent_page_index.length) {
|
|
163
|
+
parent_page_index = page.parent_page_index[parent_ref];
|
|
164
|
+
} else {
|
|
165
|
+
parent_page_index = VGEO_NO_CHILD_PAGE;
|
|
166
|
+
|
|
167
|
+
broken_child_refs++;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
words[row + VGEO_PARENT_ROW_OFFSET.PAGE_INDEX] = parent_page_index;
|
|
171
|
+
words[row + VGEO_PARENT_ROW_OFFSET.CLUSTER] = page.parent_cluster[entry];
|
|
172
|
+
}
|
|
173
|
+
|
|
137
174
|
return broken_child_refs;
|
|
138
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_sharc_evict.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_sharc_evict.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js"],"names":[],"mappings":"AAmGA,+CAIG;8BAnG2B,kCAAkC"}
|
|
@@ -26,10 +26,11 @@ const PUSH_CONSTANTS = WebGPUStruct.from({
|
|
|
26
26
|
capacity: u32,
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
30
|
+
// dispatchWorkgroupsIndirect, so this reads garbage. The graph pass turns the plain
|
|
31
|
+
// value into a transient uniform, so no call site changes.
|
|
32
32
|
resources.createGroup()
|
|
33
|
+
.addUniform("settings", PUSH_CONSTANTS)
|
|
33
34
|
.addStorageBuffer('hashMapData', HASH_MAP_DATA_STRUCT, true)
|
|
34
35
|
.addStorageBuffer("voxelData", WebGPUArray.from(vec4u))
|
|
35
36
|
.addStorageBuffer('evictionRequests', EVICTION_STRUCT);
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#247@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_particle_emit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_emit.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH,kDAA8E;AAE9E;;;;;;;;GAQG;AACH,4BAFU,YAAY,CAOK;
|
|
1
|
+
{"version":3,"file":"shader_particle_emit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_emit.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH,kDAA8E;AAE9E;;;;;;;;GAQG;AACH,4BAFU,YAAY,CAOK;AAuD3B,iDAIG;6BA3G0B,mCAAmC;8BAGlC,+BAA+B"}
|
|
@@ -52,8 +52,9 @@ export const EMIT_SETTINGS = WebGPUStruct.from({
|
|
|
52
52
|
|
|
53
53
|
const resources = new ShaderResourceSetDescriptor();
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
56
|
+
// dispatchWorkgroupsIndirect, so this reads garbage. The graph pass turns the plain
|
|
57
|
+
// value into a transient uniform, so no call site changes.
|
|
57
58
|
resources.createGroup()
|
|
58
59
|
.addStorageBuffer("scene_database", WebGPUArray.u32, false)
|
|
59
60
|
.addStorageBuffer("emitter_database", WebGPUArray.u32, false)
|
|
@@ -62,7 +63,9 @@ resources.createGroup()
|
|
|
62
63
|
.addStorageBuffer("pool", WebGPUArray.u32, true)
|
|
63
64
|
.addStorageBuffer("alive_out", WebGPUArray.u32, true)
|
|
64
65
|
.addStorageBuffer("dead", WebGPUArray.u32, true)
|
|
65
|
-
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
66
|
+
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
67
|
+
// last in the group, so the storage bindings keep the indices the specs read by
|
|
68
|
+
.addUniform('settings', EMIT_SETTINGS);
|
|
66
69
|
|
|
67
70
|
const body = CodeChunk.from(
|
|
68
71
|
/* language=wgsl */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_particle_simulate.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_simulate.js"],"names":[],"mappings":";AAuDA;;;;;GAKG;AACH,gCAFU,YAAY,CAMS;
|
|
1
|
+
{"version":3,"file":"shader_particle_simulate.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_simulate.js"],"names":[],"mappings":";AAuDA;;;;;GAKG;AACH,gCAFU,YAAY,CAMS;AAyD/B,qDAIG;iDAvH8C,yBAAyB;6BAJ7C,mCAAmC;8BAClC,+BAA+B"}
|
|
@@ -67,8 +67,9 @@ export const SIMULATE_SETTINGS = WebGPUStruct.from({
|
|
|
67
67
|
|
|
68
68
|
const resources = new ShaderResourceSetDescriptor();
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
71
|
+
// dispatchWorkgroupsIndirect, so this reads garbage. The graph pass turns the plain
|
|
72
|
+
// value into a transient uniform, so no call site changes.
|
|
72
73
|
resources.createGroup()
|
|
73
74
|
.addStorageBuffer("scene_database", WebGPUArray.u32, false)
|
|
74
75
|
.addStorageBuffer("emitter_database", WebGPUArray.u32, false)
|
|
@@ -77,7 +78,9 @@ resources.createGroup()
|
|
|
77
78
|
.addStorageBuffer("sim_list", WebGPUArray.u32, false)
|
|
78
79
|
.addStorageBuffer("alive_out", WebGPUArray.u32, true)
|
|
79
80
|
.addStorageBuffer("dead", WebGPUArray.u32, true)
|
|
80
|
-
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
81
|
+
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
82
|
+
// last in the group, so the storage bindings keep the indices the specs read by
|
|
83
|
+
.addUniform('settings', SIMULATE_SETTINGS);
|
|
81
84
|
|
|
82
85
|
|
|
83
86
|
const body = CodeChunk.from(/* language=wgsl */ `
|
|
@@ -53,7 +53,7 @@ export class NSS {
|
|
|
53
53
|
* @returns {number}
|
|
54
54
|
*/
|
|
55
55
|
static recommended_jitter_sequence_size(upscale_ratio: number): number;
|
|
56
|
-
static "__#
|
|
56
|
+
static "__#180@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
|
|
57
57
|
/**
|
|
58
58
|
* @param {GraphicsContext} graphics
|
|
59
59
|
*/
|
package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map
CHANGED
|
@@ -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,
|
|
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:
|
|
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(),
|
|
@@ -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":"
|
|
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
|
-
//
|
|
20
|
-
//
|
|
21
|
-
resources.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.addStorageBuffer("
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
})
|
|
@@ -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":"
|
|
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
|
-
//
|
|
25
|
-
//
|
|
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":"
|
|
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
|
-
//
|
|
27
|
-
//
|
|
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")
|
package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_meshlets_extract_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_meshlets_extract_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js"],"names":[],"mappings":"AAgEA,2DAIG;8BA9D2B,qCAAqC"}
|
package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js
CHANGED
|
@@ -13,11 +13,10 @@ import {
|
|
|
13
13
|
|
|
14
14
|
const resources = new ShaderResourceSetDescriptor();
|
|
15
15
|
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
resources.setImmediate("bucket_index", U32_CONTAINER_STRUCT);
|
|
19
|
-
|
|
16
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
17
|
+
// dispatchWorkgroupsIndirect, so this reads 65535 and culls everything. Revert 22893f0a7.
|
|
20
18
|
resources.createGroup()
|
|
19
|
+
.addUniform("bucket_index", U32_CONTAINER_STRUCT)
|
|
21
20
|
.addStorageBuffer("bucket_data", WebGPUStruct.from({
|
|
22
21
|
headers: RASTERIZATION_BUCKET_SORT_OUTPUT_HEADER_STRUCT_READ,
|
|
23
22
|
elements: WebGPUArray.from(MESHLET_DEFINITION_STRUCT)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pass_mesh_cull.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pass_mesh_cull.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js"],"names":[],"mappings":"AAyBA;;;;;GAKG;AACH,qCAJW,qBAAqB,0EAmD/B;AAtED;IACI,yBAAqB;IACrB,4BAAwB;IAExB,YAAQ;IAER;;OAEG;IACH,yBAAQ;IAER,qBAAiB;IACjB,gBAAY;IAEZ,gBAAY;CACf"}
|