@woosh/meep-engine 3.58.0 → 3.59.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/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +450 -43
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +156 -25
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +26 -5
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +35 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +2 -1
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +2 -1
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +5 -3
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_render_cost.js +8 -7
- package/src/generation/foliage/asset/TreeAsset.d.ts +17 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +20 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +10 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +57 -29
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +4 -2
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -1
- package/src/generation/foliage/asset/tree_lod_plan.js +12 -14
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +6 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +7 -0
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +6 -6
- package/src/generation/foliage/material/foliage_tile.js +3 -3
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +2 -2
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -7
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +85 -40
- package/src/generation/foliage/mesh/tree_clusters.d.ts +26 -5
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_clusters.js +52 -39
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +32 -54
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +157 -3
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +19 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +41 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2034
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +27 -56
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/renderer/Renderer.d.ts +3 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +94 -38
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -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 +14 -70
- 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 +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- 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 +15 -174
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +25 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +126 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +832 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +9 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +0 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +0 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +5 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +13 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +20 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +152 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +14 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +50 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +26 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +3 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +8 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +3 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- 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 +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- 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 +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +47 -5
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* inside the shared pool record
|
|
2
|
+
* A field schema — a user-defined set of named fields mapped to word offsets. An effect's particle
|
|
3
|
+
* fields are laid out by one inside the shared pool record, and its emitter fields by another inside
|
|
4
|
+
* each emitter's block ({@link ParticleLayout.emitter}).
|
|
4
5
|
*
|
|
5
6
|
* This is the crux of the "no default state" requirement: the engine imposes no age/position/colour.
|
|
6
|
-
* The effect author declares exactly the
|
|
7
|
-
* by the offsets this layout assigns, and the renderer is bound to specific
|
|
8
|
-
* size, colour, …) via a separate render binding. Word 0 of every record
|
|
9
|
-
* emitter index;
|
|
7
|
+
* The effect author declares exactly the particle fields their simulation needs, the VM
|
|
8
|
+
* reads/writes them by the offsets this layout assigns, and the renderer is bound to specific
|
|
9
|
+
* particle fields (position, size, colour, …) via a separate render binding. Word 0 of every record
|
|
10
|
+
* is reserved for the owning emitter index; particle fields are packed sequentially from
|
|
10
11
|
* {@link PARTICLE_RECORD_USER_WORD_START}.
|
|
11
12
|
*
|
|
12
13
|
* ## The `type` tag
|
|
13
14
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* A field may also say what its words are *for*: four of them tagged `color` are a colour rather
|
|
16
|
+
* than four numbers that happen to be four. It changes nothing here — the offset, the width and
|
|
17
|
+
* every instruction that touches the field are exactly what they were without it — and is read by
|
|
18
|
+
* the authoring layer, where {@link ../graph/ParticleValueType.js particle_semantic_type} turns the
|
|
19
|
+
* tag into a type that an editor can offer a swatch for and colour a wire by.
|
|
19
20
|
*
|
|
20
21
|
* A plain string rather than a type object, because the runtime schema has no business importing a
|
|
21
22
|
* frontend's vocabulary, and an effect saved with a tag this build has never heard of has to load
|
|
@@ -23,30 +24,63 @@
|
|
|
23
24
|
*/
|
|
24
25
|
export class ParticleLayout {
|
|
25
26
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
27
|
+
* A layout for an emitter's block of emitter fields: packed from word zero, with no fixed size.
|
|
28
|
+
* The block is allocated to fit it (see {@link ../runtime/ProgramHeap.js}), so there is no record
|
|
29
|
+
* width for it to outgrow.
|
|
30
|
+
*
|
|
31
|
+
* @param {Array<{name: string, components: number, type?: string}>} fields ordered field
|
|
32
|
+
* declarations
|
|
33
|
+
* @returns {ParticleLayout}
|
|
34
|
+
*/
|
|
35
|
+
static emitter(fields: Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
components: number;
|
|
38
|
+
type?: string;
|
|
39
|
+
}>): ParticleLayout;
|
|
40
|
+
/**
|
|
41
|
+
* @param {Array<{name: string, components: number, type?: string}>} fields ordered field
|
|
42
|
+
* declarations. `type` optionally says what the words are *for* — see the class note on the
|
|
43
|
+
* `type` tag — and never what shape they are, which is `components` and only that.
|
|
44
|
+
* @param {object} [options]
|
|
45
|
+
* @param {number} [options.first_word] the word the first field is packed at: past the particle
|
|
46
|
+
* record's header by default
|
|
47
|
+
* @param {number} [options.word_capacity] the word the fields may not extend past: the particle
|
|
48
|
+
* record's width by default
|
|
49
|
+
* @throws on a duplicate name, or fields that extend past `word_capacity`
|
|
29
50
|
*/
|
|
30
|
-
constructor(
|
|
51
|
+
constructor(fields: Array<{
|
|
31
52
|
name: string;
|
|
32
53
|
components: number;
|
|
33
54
|
type?: string;
|
|
34
|
-
}
|
|
55
|
+
}>, { first_word, word_capacity, }?: {
|
|
56
|
+
first_word?: number;
|
|
57
|
+
word_capacity?: number;
|
|
58
|
+
});
|
|
35
59
|
/**
|
|
36
|
-
*
|
|
60
|
+
* Field name -> where it sits in the record or block, how wide it is, and what it is for.
|
|
37
61
|
* @type {Map<string, {name: string, offset: number, components: number, type: string|undefined}>}
|
|
38
62
|
*/
|
|
39
|
-
|
|
63
|
+
fields: Map<string, {
|
|
40
64
|
name: string;
|
|
41
65
|
offset: number;
|
|
42
66
|
components: number;
|
|
43
67
|
type: string | undefined;
|
|
44
68
|
}>;
|
|
45
69
|
/**
|
|
46
|
-
*
|
|
70
|
+
* Word the first field is packed at.
|
|
71
|
+
* @type {number}
|
|
72
|
+
*/
|
|
73
|
+
first_word: number;
|
|
74
|
+
/**
|
|
75
|
+
* First free word after all fields.
|
|
47
76
|
* @type {number}
|
|
48
77
|
*/
|
|
49
78
|
word_cursor: number;
|
|
79
|
+
/**
|
|
80
|
+
* How many words the fields take, from {@link first_word} to {@link word_cursor}.
|
|
81
|
+
* @returns {number}
|
|
82
|
+
*/
|
|
83
|
+
get word_count(): number;
|
|
50
84
|
/**
|
|
51
85
|
* @param {string} name
|
|
52
86
|
* @returns {boolean}
|
|
@@ -63,21 +97,21 @@ export class ParticleLayout {
|
|
|
63
97
|
};
|
|
64
98
|
/**
|
|
65
99
|
* @param {string} name
|
|
66
|
-
* @returns {number} word offset of the
|
|
100
|
+
* @returns {number} word offset of the field within the record or block
|
|
67
101
|
*/
|
|
68
102
|
offsetOf(name: string): number;
|
|
69
103
|
/**
|
|
70
104
|
* @param {string} name
|
|
71
|
-
* @returns {number} component count of the
|
|
105
|
+
* @returns {number} component count of the field
|
|
72
106
|
*/
|
|
73
107
|
componentsOf(name: string): number;
|
|
74
108
|
/**
|
|
75
|
-
* Structural equality: the same
|
|
76
|
-
* tagged the same.
|
|
77
|
-
*
|
|
109
|
+
* Structural equality: the same fields, by name, at the same offsets, the same width, and
|
|
110
|
+
* tagged the same. A program compiled against either of two equal layouts reads and writes the
|
|
111
|
+
* same words.
|
|
78
112
|
*
|
|
79
113
|
* Declaration order is not compared separately because it cannot differ without an offset
|
|
80
|
-
* differing:
|
|
114
|
+
* differing: fields are packed sequentially in the order they were declared.
|
|
81
115
|
*
|
|
82
116
|
* @param {ParticleLayout} other
|
|
83
117
|
* @returns {boolean}
|
|
@@ -86,10 +120,10 @@ export class ParticleLayout {
|
|
|
86
120
|
/**
|
|
87
121
|
* Hash over everything {@link ParticleLayout#equals} compares.
|
|
88
122
|
*
|
|
89
|
-
* Per-
|
|
123
|
+
* Per-field hashes are summed rather than folded in iteration order. A `Map` iterates in
|
|
90
124
|
* insertion order and equal layouts are built in the same order, so a fold would agree — but a
|
|
91
|
-
* commutative combine says outright that the hash is of a set of
|
|
92
|
-
*
|
|
125
|
+
* commutative combine says outright that the hash is of a set of fields, and holds even if a
|
|
126
|
+
* layout is ever built by some other route.
|
|
93
127
|
*
|
|
94
128
|
* @returns {number} int32
|
|
95
129
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleLayout.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/layout/ParticleLayout.js"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"ParticleLayout.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/layout/ParticleLayout.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IA4EI;;;;;;;;OAQG;IACH,uBAJW,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,GAEtD,cAAc,CAI1B;IAnED;;;;;;;;;;OAUG;IACH,oBAVW,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;QAIvC,UAAU,GAA3B,MAAM;QAEW,aAAa,GAA9B,MAAM;OA+ChB;IAxED;;;OAGG;IACH,QAFU,IAAI,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAC,SAAS,CAAA;KAAC,CAAC,CAE9E;IAEnB;;;OAGG;IACH,YAFU,MAAM,CAE6B;IAE7C;;;OAGG;IACH,aAFU,MAAM,CAE8B;IAuE9C;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,UAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,UAHW,MAAM,GACJ;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAQ9D;IAED;;;OAGG;IACH,eAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;;;;OAUG;IACH,cAHW,cAAc,GACZ,OAAO,CA8BnB;IAED;;;;;;;;;OASG;IACH,QAFa,MAAM,CAclB;CACJ"}
|
|
@@ -8,23 +8,24 @@ import {
|
|
|
8
8
|
} from "../ParticleConstants.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* inside the shared pool record
|
|
11
|
+
* A field schema — a user-defined set of named fields mapped to word offsets. An effect's particle
|
|
12
|
+
* fields are laid out by one inside the shared pool record, and its emitter fields by another inside
|
|
13
|
+
* each emitter's block ({@link ParticleLayout.emitter}).
|
|
13
14
|
*
|
|
14
15
|
* This is the crux of the "no default state" requirement: the engine imposes no age/position/colour.
|
|
15
|
-
* The effect author declares exactly the
|
|
16
|
-
* by the offsets this layout assigns, and the renderer is bound to specific
|
|
17
|
-
* size, colour, …) via a separate render binding. Word 0 of every record
|
|
18
|
-
* emitter index;
|
|
16
|
+
* The effect author declares exactly the particle fields their simulation needs, the VM
|
|
17
|
+
* reads/writes them by the offsets this layout assigns, and the renderer is bound to specific
|
|
18
|
+
* particle fields (position, size, colour, …) via a separate render binding. Word 0 of every record
|
|
19
|
+
* is reserved for the owning emitter index; particle fields are packed sequentially from
|
|
19
20
|
* {@link PARTICLE_RECORD_USER_WORD_START}.
|
|
20
21
|
*
|
|
21
22
|
* ## The `type` tag
|
|
22
23
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* A field may also say what its words are *for*: four of them tagged `color` are a colour rather
|
|
25
|
+
* than four numbers that happen to be four. It changes nothing here — the offset, the width and
|
|
26
|
+
* every instruction that touches the field are exactly what they were without it — and is read by
|
|
27
|
+
* the authoring layer, where {@link ../graph/ParticleValueType.js particle_semantic_type} turns the
|
|
28
|
+
* tag into a type that an editor can offer a swatch for and colour a wire by.
|
|
28
29
|
*
|
|
29
30
|
* A plain string rather than a type object, because the runtime schema has no business importing a
|
|
30
31
|
* frontend's vocabulary, and an effect saved with a tag this build has never heard of has to load
|
|
@@ -33,67 +34,106 @@ import {
|
|
|
33
34
|
export class ParticleLayout {
|
|
34
35
|
|
|
35
36
|
/**
|
|
36
|
-
*
|
|
37
|
+
* Field name -> where it sits in the record or block, how wide it is, and what it is for.
|
|
37
38
|
* @type {Map<string, {name: string, offset: number, components: number, type: string|undefined}>}
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
|
+
fields = new Map();
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
|
-
*
|
|
43
|
+
* Word the first field is packed at.
|
|
44
|
+
* @type {number}
|
|
45
|
+
*/
|
|
46
|
+
first_word = PARTICLE_RECORD_USER_WORD_START;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* First free word after all fields.
|
|
43
50
|
* @type {number}
|
|
44
51
|
*/
|
|
45
52
|
word_cursor = PARTICLE_RECORD_USER_WORD_START;
|
|
46
53
|
|
|
47
54
|
/**
|
|
48
|
-
* @param {Array<{name: string, components: number, type?: string}>}
|
|
49
|
-
*
|
|
50
|
-
*
|
|
55
|
+
* @param {Array<{name: string, components: number, type?: string}>} fields ordered field
|
|
56
|
+
* declarations. `type` optionally says what the words are *for* — see the class note on the
|
|
57
|
+
* `type` tag — and never what shape they are, which is `components` and only that.
|
|
58
|
+
* @param {object} [options]
|
|
59
|
+
* @param {number} [options.first_word] the word the first field is packed at: past the particle
|
|
60
|
+
* record's header by default
|
|
61
|
+
* @param {number} [options.word_capacity] the word the fields may not extend past: the particle
|
|
62
|
+
* record's width by default
|
|
63
|
+
* @throws on a duplicate name, or fields that extend past `word_capacity`
|
|
51
64
|
*/
|
|
52
|
-
constructor(
|
|
53
|
-
|
|
65
|
+
constructor(fields, {
|
|
66
|
+
first_word = PARTICLE_RECORD_USER_WORD_START,
|
|
67
|
+
word_capacity = PARTICLE_RECORD_WORD_COUNT,
|
|
68
|
+
} = {}) {
|
|
69
|
+
assert.isArray(fields, "fields");
|
|
70
|
+
assert.isNonNegativeInteger(first_word, "first_word");
|
|
54
71
|
|
|
55
|
-
|
|
72
|
+
this.first_word = first_word;
|
|
56
73
|
|
|
57
|
-
|
|
58
|
-
assert.isString(attribute.name, "attribute.name");
|
|
59
|
-
assert.isNonNegativeInteger(attribute.components, "attribute.components");
|
|
60
|
-
assert.greaterThanOrEqual(attribute.components, 1, "attribute.components must be >= 1");
|
|
61
|
-
assert.lessThanOrEqual(attribute.components, 4, "attribute.components must be <= 4");
|
|
74
|
+
let cursor = first_word;
|
|
62
75
|
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
for (const field of fields) {
|
|
77
|
+
assert.isString(field.name, "field.name");
|
|
78
|
+
assert.isNonNegativeInteger(field.components, "field.components");
|
|
79
|
+
assert.greaterThanOrEqual(field.components, 1, "field.components must be >= 1");
|
|
80
|
+
assert.lessThanOrEqual(field.components, 4, "field.components must be <= 4");
|
|
81
|
+
|
|
82
|
+
if (field.type !== undefined) {
|
|
83
|
+
assert.isString(field.type, "field.type");
|
|
65
84
|
}
|
|
66
85
|
|
|
67
|
-
if (this.
|
|
68
|
-
throw new Error(`Duplicate
|
|
86
|
+
if (this.fields.has(field.name)) {
|
|
87
|
+
throw new Error(`Duplicate field '${field.name}'`);
|
|
69
88
|
}
|
|
70
89
|
|
|
71
|
-
this.
|
|
72
|
-
name:
|
|
90
|
+
this.fields.set(field.name, {
|
|
91
|
+
name: field.name,
|
|
73
92
|
offset: cursor,
|
|
74
|
-
components:
|
|
75
|
-
type:
|
|
93
|
+
components: field.components,
|
|
94
|
+
type: field.type,
|
|
76
95
|
});
|
|
77
96
|
|
|
78
|
-
cursor +=
|
|
97
|
+
cursor += field.components;
|
|
79
98
|
}
|
|
80
99
|
|
|
81
100
|
this.word_cursor = cursor;
|
|
82
101
|
|
|
83
|
-
if (cursor >
|
|
102
|
+
if (cursor > word_capacity) {
|
|
84
103
|
throw new Error(
|
|
85
|
-
`Particle layout needs ${cursor} words but the record holds only ${
|
|
86
|
-
`Reduce
|
|
104
|
+
`Particle layout needs ${cursor} words but the record holds only ${word_capacity}. ` +
|
|
105
|
+
`Reduce fields or raise PARTICLE_RECORD_WORD_COUNT.`
|
|
87
106
|
);
|
|
88
107
|
}
|
|
89
108
|
}
|
|
90
109
|
|
|
110
|
+
/**
|
|
111
|
+
* A layout for an emitter's block of emitter fields: packed from word zero, with no fixed size.
|
|
112
|
+
* The block is allocated to fit it (see {@link ../runtime/ProgramHeap.js}), so there is no record
|
|
113
|
+
* width for it to outgrow.
|
|
114
|
+
*
|
|
115
|
+
* @param {Array<{name: string, components: number, type?: string}>} fields ordered field
|
|
116
|
+
* declarations
|
|
117
|
+
* @returns {ParticleLayout}
|
|
118
|
+
*/
|
|
119
|
+
static emitter(fields) {
|
|
120
|
+
return new ParticleLayout(fields, { first_word: 0, word_capacity: Infinity });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* How many words the fields take, from {@link first_word} to {@link word_cursor}.
|
|
125
|
+
* @returns {number}
|
|
126
|
+
*/
|
|
127
|
+
get word_count() {
|
|
128
|
+
return this.word_cursor - this.first_word;
|
|
129
|
+
}
|
|
130
|
+
|
|
91
131
|
/**
|
|
92
132
|
* @param {string} name
|
|
93
133
|
* @returns {boolean}
|
|
94
134
|
*/
|
|
95
135
|
has(name) {
|
|
96
|
-
return this.
|
|
136
|
+
return this.fields.has(name);
|
|
97
137
|
}
|
|
98
138
|
|
|
99
139
|
/**
|
|
@@ -101,16 +141,16 @@ export class ParticleLayout {
|
|
|
101
141
|
* @returns {{name: string, offset: number, components: number}}
|
|
102
142
|
*/
|
|
103
143
|
get(name) {
|
|
104
|
-
const
|
|
105
|
-
if (
|
|
106
|
-
throw new Error(`Unknown
|
|
144
|
+
const field = this.fields.get(name);
|
|
145
|
+
if (field === undefined) {
|
|
146
|
+
throw new Error(`Unknown field '${name}'`);
|
|
107
147
|
}
|
|
108
|
-
return
|
|
148
|
+
return field;
|
|
109
149
|
}
|
|
110
150
|
|
|
111
151
|
/**
|
|
112
152
|
* @param {string} name
|
|
113
|
-
* @returns {number} word offset of the
|
|
153
|
+
* @returns {number} word offset of the field within the record or block
|
|
114
154
|
*/
|
|
115
155
|
offsetOf(name) {
|
|
116
156
|
return this.get(name).offset;
|
|
@@ -118,19 +158,19 @@ export class ParticleLayout {
|
|
|
118
158
|
|
|
119
159
|
/**
|
|
120
160
|
* @param {string} name
|
|
121
|
-
* @returns {number} component count of the
|
|
161
|
+
* @returns {number} component count of the field
|
|
122
162
|
*/
|
|
123
163
|
componentsOf(name) {
|
|
124
164
|
return this.get(name).components;
|
|
125
165
|
}
|
|
126
166
|
|
|
127
167
|
/**
|
|
128
|
-
* Structural equality: the same
|
|
129
|
-
* tagged the same.
|
|
130
|
-
*
|
|
168
|
+
* Structural equality: the same fields, by name, at the same offsets, the same width, and
|
|
169
|
+
* tagged the same. A program compiled against either of two equal layouts reads and writes the
|
|
170
|
+
* same words.
|
|
131
171
|
*
|
|
132
172
|
* Declaration order is not compared separately because it cannot differ without an offset
|
|
133
|
-
* differing:
|
|
173
|
+
* differing: fields are packed sequentially in the order they were declared.
|
|
134
174
|
*
|
|
135
175
|
* @param {ParticleLayout} other
|
|
136
176
|
* @returns {boolean}
|
|
@@ -140,23 +180,23 @@ export class ParticleLayout {
|
|
|
140
180
|
return true;
|
|
141
181
|
}
|
|
142
182
|
|
|
143
|
-
const
|
|
183
|
+
const fields = this.fields;
|
|
144
184
|
|
|
145
|
-
if (
|
|
185
|
+
if (fields.size !== other.fields.size) {
|
|
146
186
|
return false;
|
|
147
187
|
}
|
|
148
188
|
|
|
149
|
-
for (const [name,
|
|
150
|
-
const candidate = other.
|
|
189
|
+
for (const [name, field] of fields) {
|
|
190
|
+
const candidate = other.fields.get(name);
|
|
151
191
|
|
|
152
192
|
if (candidate === undefined) {
|
|
153
193
|
return false;
|
|
154
194
|
}
|
|
155
195
|
|
|
156
196
|
if (
|
|
157
|
-
candidate.offset !==
|
|
158
|
-
|| candidate.components !==
|
|
159
|
-
|| candidate.type !==
|
|
197
|
+
candidate.offset !== field.offset
|
|
198
|
+
|| candidate.components !== field.components
|
|
199
|
+
|| candidate.type !== field.type
|
|
160
200
|
) {
|
|
161
201
|
return false;
|
|
162
202
|
}
|
|
@@ -168,21 +208,21 @@ export class ParticleLayout {
|
|
|
168
208
|
/**
|
|
169
209
|
* Hash over everything {@link ParticleLayout#equals} compares.
|
|
170
210
|
*
|
|
171
|
-
* Per-
|
|
211
|
+
* Per-field hashes are summed rather than folded in iteration order. A `Map` iterates in
|
|
172
212
|
* insertion order and equal layouts are built in the same order, so a fold would agree — but a
|
|
173
|
-
* commutative combine says outright that the hash is of a set of
|
|
174
|
-
*
|
|
213
|
+
* commutative combine says outright that the hash is of a set of fields, and holds even if a
|
|
214
|
+
* layout is ever built by some other route.
|
|
175
215
|
*
|
|
176
216
|
* @returns {number} int32
|
|
177
217
|
*/
|
|
178
218
|
hash() {
|
|
179
|
-
let hash = this.
|
|
219
|
+
let hash = this.fields.size;
|
|
180
220
|
|
|
181
|
-
for (const [name,
|
|
221
|
+
for (const [name, field] of this.fields) {
|
|
182
222
|
hash = (hash + hash_mix3(
|
|
183
223
|
computeStringHash(name),
|
|
184
|
-
hash_mix2(
|
|
185
|
-
computeStringHash(
|
|
224
|
+
hash_mix2(field.offset, field.components),
|
|
225
|
+
computeStringHash(field.type)
|
|
186
226
|
)) | 0;
|
|
187
227
|
}
|
|
188
228
|
|
package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimize_particle_program_vector.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js"],"names":[],"mappings":"AA4CA;;;;;;GAMG;AAEH;;;;GAIG;AACH,0DAJW,eAAe,YACf,MAAM,GACJ,eAAe,CAI3B;AAED;;;;;;;;;;GAUG;AACH,iEAVW,eAAe;IAEE,cAAc,GAA/B,MAAM;IACY,YAAY,GAA9B,OAAO;IACW,qBAAqB,GAAvC,OAAO;IACW,iBAAiB,GAAnC,OAAO;IACW,WAAW,GAA7B,OAAO;IACY,aAAa,GAAhC,MAAM,EAAE;IACN,6BAA6B,
|
|
1
|
+
{"version":3,"file":"optimize_particle_program_vector.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js"],"names":[],"mappings":"AA4CA;;;;;;GAMG;AAEH;;;;GAIG;AACH,0DAJW,eAAe,YACf,MAAM,GACJ,eAAe,CAI3B;AAED;;;;;;;;;;GAUG;AACH,iEAVW,eAAe;IAEE,cAAc,GAA/B,MAAM;IACY,YAAY,GAA9B,OAAO;IACW,qBAAqB,GAAvC,OAAO;IACW,iBAAiB,GAAnC,OAAO;IACW,WAAW,GAA7B,OAAO;IACY,aAAa,GAAhC,MAAM,EAAE;IACN,6BAA6B,CAyCzC;AAjGD;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;GAUG;AACH,4CAFU,MAAM,EAAE,CAEqE;;aAIzE,eAAe;;;;eACf,OAAO;;;;kBACP,MAAM;;;;eACN,MAAM;;gCA9CY,8BAA8B"}
|
|
@@ -98,6 +98,7 @@ export function optimize_particle_program_vector_result(program, {
|
|
|
98
98
|
update: update.toWords(),
|
|
99
99
|
constants: new Float32Array(assembler.constants),
|
|
100
100
|
register_count: Math.max(init.register_count, update.register_count),
|
|
101
|
+
global_imports: program.global_imports,
|
|
101
102
|
});
|
|
102
103
|
|
|
103
104
|
const finished = compact_registers ? compact(rebuilt, register_slots) : rebuilt;
|
|
@@ -204,6 +205,7 @@ function compact(program, register_slots) {
|
|
|
204
205
|
update: update.toWords(),
|
|
205
206
|
constants: program.constants,
|
|
206
207
|
register_count: Math.max(init.register_count, update.register_count),
|
|
208
|
+
global_imports: program.global_imports,
|
|
207
209
|
});
|
|
208
210
|
}
|
|
209
211
|
|
|
@@ -22,7 +22,7 @@ export const PV_GROUP = {
|
|
|
22
22
|
CONSTANT: "constant",
|
|
23
23
|
/** a run assembled one lane at a time, one `MOV` per entry of `gather` */
|
|
24
24
|
GATHER: "gather",
|
|
25
|
-
/** a `
|
|
25
|
+
/** a `STORE_PARTICLE_FIELD`; writes no run */
|
|
26
26
|
STORE: "store",
|
|
27
27
|
/** a `KILL`; writes no run */
|
|
28
28
|
KILL: "kill",
|
|
@@ -314,7 +314,7 @@ function evaluate(graph, instruction, operands, state) {
|
|
|
314
314
|
return lanes_of(graph, graph.constant(...values), dest);
|
|
315
315
|
}
|
|
316
316
|
|
|
317
|
-
case VM_OP.
|
|
317
|
+
case VM_OP.LOAD_PARTICLE_FIELD: {
|
|
318
318
|
if (words[1] + Math.min(dest, words[2]) > PARTICLE_RECORD_WORD_COUNT) {
|
|
319
319
|
return null;
|
|
320
320
|
}
|
|
@@ -331,7 +331,7 @@ function evaluate(graph, instruction, operands, state) {
|
|
|
331
331
|
return places;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
-
case VM_OP.
|
|
334
|
+
case VM_OP.STORE_PARTICLE_FIELD: {
|
|
335
335
|
if (words[2] + words[3] > PARTICLE_RECORD_WORD_COUNT) {
|
|
336
336
|
return null;
|
|
337
337
|
}
|
|
@@ -350,7 +350,8 @@ function evaluate(graph, instruction, operands, state) {
|
|
|
350
350
|
}
|
|
351
351
|
|
|
352
352
|
// Never folded past the builtin's component count: `EMITTER_POSITION` reads `1.0` in its
|
|
353
|
-
// fourth lane on both executors
|
|
353
|
+
// fourth lane on both executors, and an emitter or global field's lanes past its width are
|
|
354
|
+
// not the field's: the WGSL reads the words after it, the reference VM zero.
|
|
354
355
|
case VM_OP.LOAD_BUILTIN:
|
|
355
356
|
return node({ op, width: dest, imm: [words[1]] });
|
|
356
357
|
|
|
@@ -81,7 +81,7 @@ export function lower_particle_values(packing, { register_slots, intern_constant
|
|
|
81
81
|
*/
|
|
82
82
|
export function build_group_dependencies(groups) {
|
|
83
83
|
const predecessors = groups.map(() => new Set());
|
|
84
|
-
const loads = groups.filter(group => group.op === VM_OP.
|
|
84
|
+
const loads = groups.filter(group => group.op === VM_OP.LOAD_PARTICLE_FIELD);
|
|
85
85
|
|
|
86
86
|
for (const group of groups) {
|
|
87
87
|
for (const operand of group.operands) {
|
|
@@ -100,7 +100,7 @@ export function build_group_dependencies(groups) {
|
|
|
100
100
|
// a word that had been stored, so what is left is loads of the word AS THE SECTION FOUND IT —
|
|
101
101
|
// and those are only true until something stores over that word. The value is a fact about
|
|
102
102
|
// the record before the section ran; the INSTRUCTION that fetches it is not.
|
|
103
|
-
if (group.op === VM_OP.
|
|
103
|
+
if (group.op === VM_OP.STORE_PARTICLE_FIELD) {
|
|
104
104
|
for (const load of loads) {
|
|
105
105
|
if (words_overlap(load.raw[0], load.raw[1], group.raw[1], group.raw[2])) {
|
|
106
106
|
predecessors[group.index].add(load.index);
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
*/
|
|
22
22
|
export function pack_particle_vectors(graph: import("./particle_vector_graph.js").ParticleVectorGraph, section: import("./particle_vector_lift.js").ParticleLiftedVectorSection, extraction: import("./particle_vector_extract.js").ParticleValueExtraction): import("./particle_vector_groups.js").ParticleValuePacking;
|
|
23
23
|
/**
|
|
24
|
-
* Which record words go in one `
|
|
25
|
-
* the four an operand spans — and cut where the original stores cut, so that a `vec3`
|
|
26
|
-
* `vec4` colour in adjacent words stay two stores.
|
|
24
|
+
* Which record words go in one `STORE_PARTICLE_FIELD`: consecutive words, taken from one value, no
|
|
25
|
+
* more than the four an operand spans — and cut where the original stores cut, so that a `vec3`
|
|
26
|
+
* position and a `vec4` colour in adjacent words stay two stores.
|
|
27
27
|
*
|
|
28
28
|
* @param {Array<{word: number, place: {value: number, lane: number}, origin: number}>} stores
|
|
29
29
|
* @returns {Array<Array<{word: number, place: {value: number, lane: number}, origin: number}>>}
|
|
@@ -151,7 +151,7 @@ export function pack_particle_vectors(graph, section, extraction) {
|
|
|
151
151
|
|
|
152
152
|
if (node.op === PV.ATTR) {
|
|
153
153
|
const group = add({
|
|
154
|
-
op: VM_OP.
|
|
154
|
+
op: VM_OP.LOAD_PARTICLE_FIELD,
|
|
155
155
|
width,
|
|
156
156
|
span: width,
|
|
157
157
|
raw: [node.imm[0], width, -1],
|
|
@@ -204,10 +204,10 @@ export function pack_particle_vectors(graph, section, extraction) {
|
|
|
204
204
|
|
|
205
205
|
for (let source = 0; source < node.children.length; source++) {
|
|
206
206
|
group.operands.push(operand(
|
|
207
|
-
source,
|
|
207
|
+
source,
|
|
208
208
|
node.children[source],
|
|
209
209
|
node.patterns[source],
|
|
210
|
-
group.width,
|
|
210
|
+
group.width,
|
|
211
211
|
sequence
|
|
212
212
|
));
|
|
213
213
|
}
|
|
@@ -224,7 +224,7 @@ export function pack_particle_vectors(graph, section, extraction) {
|
|
|
224
224
|
for (const chunk of chunk_stores(section.stores)) {
|
|
225
225
|
const group = add({
|
|
226
226
|
kind: PV_GROUP.STORE,
|
|
227
|
-
op: VM_OP.
|
|
227
|
+
op: VM_OP.STORE_PARTICLE_FIELD,
|
|
228
228
|
width: chunk.length,
|
|
229
229
|
span: 0,
|
|
230
230
|
raw: [-1, chunk[0].word, chunk.length],
|
|
@@ -436,9 +436,9 @@ function dissolve_builds(packing, add) {
|
|
|
436
436
|
operand.group = gone.anchor;
|
|
437
437
|
}
|
|
438
438
|
|
|
439
|
-
// A build may read a build — a four-wide load of a three-component
|
|
440
|
-
// anything assembled from it reads one. Those lanes are copies still to be made,
|
|
441
|
-
// the run each lane ended up in rather than a window into it.
|
|
439
|
+
// A build may read a build — a four-wide load of a three-component particle field is a
|
|
440
|
+
// build, and anything assembled from it reads one. Those lanes are copies still to be made,
|
|
441
|
+
// so they take the run each lane ended up in rather than a window into it.
|
|
442
442
|
group.gather = group.gather.map(source => {
|
|
443
443
|
const gone = dissolved.get(source.group);
|
|
444
444
|
|
|
@@ -659,9 +659,9 @@ function store_operand(graph, of, groups, chunk, add, where) {
|
|
|
659
659
|
}
|
|
660
660
|
|
|
661
661
|
/**
|
|
662
|
-
* Which record words go in one `
|
|
663
|
-
* the four an operand spans — and cut where the original stores cut, so that a `vec3`
|
|
664
|
-
* `vec4` colour in adjacent words stay two stores.
|
|
662
|
+
* Which record words go in one `STORE_PARTICLE_FIELD`: consecutive words, taken from one value, no
|
|
663
|
+
* more than the four an operand spans — and cut where the original stores cut, so that a `vec3`
|
|
664
|
+
* position and a `vec4` colour in adjacent words stay two stores.
|
|
665
665
|
*
|
|
666
666
|
* @param {Array<{word: number, place: {value: number, lane: number}, origin: number}>} stores
|
|
667
667
|
* @returns {Array<Array<{word: number, place: {value: number, lane: number}, origin: number}>>}
|
|
@@ -760,7 +760,7 @@ function measure_demand(graph, section, extraction) {
|
|
|
760
760
|
continue;
|
|
761
761
|
}
|
|
762
762
|
|
|
763
|
-
const reads = Math.max(narrowable(node) ? width : node.operand_width, VM_ISA.get(node.op)?.min_width ?? 1);
|
|
763
|
+
const reads = Math.max(narrowable(node) ? width : node.operand_width, VM_ISA.get(node.op)?.min_width ?? 1);
|
|
764
764
|
|
|
765
765
|
for (let source = 0; source < node.children.length; source++) {
|
|
766
766
|
let highest = 0;
|
|
@@ -96,10 +96,10 @@ export function stream_from_words(words: Uint32Array): InstructionStream;
|
|
|
96
96
|
*
|
|
97
97
|
* Passes are ordinary functions from an instruction array to a new one, with `null` for "changed
|
|
98
98
|
* nothing". All but one never reorder: every pass rewrites an instruction in place or drops it,
|
|
99
|
-
* which is what makes the ordering constraints — `RANDOM`'s draw sequence,
|
|
100
|
-
* aliasing — hold structurally rather than by each
|
|
101
|
-
* `pass_schedule`, moves nothing across an instruction
|
|
102
|
-
* constraints structural for it.
|
|
99
|
+
* which is what makes the ordering constraints — `RANDOM`'s draw sequence,
|
|
100
|
+
* `STORE_PARTICLE_FIELD`/`LOAD_PARTICLE_FIELD` aliasing — hold structurally rather than by each
|
|
101
|
+
* pass remembering them. The one that does, `pass_schedule`, moves nothing across an instruction
|
|
102
|
+
* with side effects, which keeps the same constraints structural for it.
|
|
103
103
|
*
|
|
104
104
|
* The pipeline sweeps the enabled passes in order until a whole sweep changes nothing or
|
|
105
105
|
* `max_iterations` sweeps have run, then schedules, allocates and packs the register file — and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimize_particle_program.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/optimize_particle_program.js"],"names":[],"mappings":"AA+IA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,kDAxBW,iBAAiB;IAEW,SAAS,GAArC,UAAU,MAAM,CAAC;IAEoB,eAAe,UAA3C,MAAM,EAAE,KAAG,MAAM;IACM,MAAM,GAAtC,cAAc,MAAM,CAAC;IAEJ,cAAc,GAA/B,MAAM;IACY,SAAS,GAA3B,OAAO;IAGU,cAAc,GAA/B,MAAM;IACY,qBAAqB,GAAvC,OAAO;IACW,YAAY,GAA9B,OAAO;IACW,mBAAmB,GAArC,OAAO;IAEU,gBAAgB,GAAjC,MAAM;IACY,iBAAiB,GAAnC,OAAO;IACW,uBAAuB,GAAzC,OAAO;IACW,oBAAoB,GAAtC,OAAO;IACW,WAAW,GAA7B,OAAO;IACL,iBAAiB,CAqC7B;AAuFD;;;;;;GAMG;AACH,iDAHc,MAAM,KACP,MAAM,EAAE,CAIpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,mDAJW,eAAe,YACf,MAAM,GACJ,eAAe,
|
|
1
|
+
{"version":3,"file":"optimize_particle_program.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/optimize_particle_program.js"],"names":[],"mappings":"AA+IA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,kDAxBW,iBAAiB;IAEW,SAAS,GAArC,UAAU,MAAM,CAAC;IAEoB,eAAe,UAA3C,MAAM,EAAE,KAAG,MAAM;IACM,MAAM,GAAtC,cAAc,MAAM,CAAC;IAEJ,cAAc,GAA/B,MAAM;IACY,SAAS,GAA3B,OAAO;IAGU,cAAc,GAA/B,MAAM;IACY,qBAAqB,GAAvC,OAAO;IACW,YAAY,GAA9B,OAAO;IACW,mBAAmB,GAArC,OAAO;IAEU,gBAAgB,GAAjC,MAAM;IACY,iBAAiB,GAAnC,OAAO;IACW,uBAAuB,GAAzC,OAAO;IACW,oBAAoB,GAAtC,OAAO;IACW,WAAW,GAA7B,OAAO;IACL,iBAAiB,CAqC7B;AAuFD;;;;;;GAMG;AACH,iDAHc,MAAM,KACP,MAAM,EAAE,CAIpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,mDAJW,eAAe,YACf,MAAM,GACJ,eAAe,CAuC3B;AAsFD;;;GAGG;AACH,yCAHW,WAAW,GACT,iBAAiB,CAU7B;AApbD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH;;;;;GAKG;AAEH;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,wCAFU,MAAM;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,qBAAqB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC,CAwBrH;AAEF;;;;;;;;GAQG;AACH,gDAFU,cAAc,MAAM,CAAC,CAI7B;AAEF;;;;;;;;GAQG;AACH,oDAFU,MAAM,CAEuC;mDAnE5C,MAAM,EAAE,EAAE,WACV,wBAAwB,KACtB,MAAM,EAAE,EAAE,GAAC,IAAI;;;;;eAKd,UAAU,MAAM,CAAC;;;;;;qBACjB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,GAAC,IAAI;;;;oBAGnC,MAAM;;;;oBACN,MAAM;;kCApFc,6BAA6B;gCAE/B,2BAA2B"}
|
|
@@ -40,10 +40,10 @@ import { PARTICLE_PASS_SCHEDULE, pass_schedule } from "./pass_schedule.js";
|
|
|
40
40
|
*
|
|
41
41
|
* Passes are ordinary functions from an instruction array to a new one, with `null` for "changed
|
|
42
42
|
* nothing". All but one never reorder: every pass rewrites an instruction in place or drops it,
|
|
43
|
-
* which is what makes the ordering constraints — `RANDOM`'s draw sequence,
|
|
44
|
-
* aliasing — hold structurally rather than by each
|
|
45
|
-
* `pass_schedule`, moves nothing across an instruction
|
|
46
|
-
* constraints structural for it.
|
|
43
|
+
* which is what makes the ordering constraints — `RANDOM`'s draw sequence,
|
|
44
|
+
* `STORE_PARTICLE_FIELD`/`LOAD_PARTICLE_FIELD` aliasing — hold structurally rather than by each
|
|
45
|
+
* pass remembering them. The one that does, `pass_schedule`, moves nothing across an instruction
|
|
46
|
+
* with side effects, which keeps the same constraints structural for it.
|
|
47
47
|
*
|
|
48
48
|
* The pipeline sweeps the enabled passes in order until a whole sweep changes nothing or
|
|
49
49
|
* `max_iterations` sweeps have run, then schedules, allocates and packs the register file — and
|
|
@@ -356,6 +356,7 @@ export function optimize_particle_program(program, options = {}) {
|
|
|
356
356
|
update: update_words,
|
|
357
357
|
constants,
|
|
358
358
|
register_count: Math.max(init.register_count, update.register_count),
|
|
359
|
+
global_imports: program.global_imports,
|
|
359
360
|
});
|
|
360
361
|
}
|
|
361
362
|
|