@woosh/meep-engine 3.16.0 → 3.17.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 +21 -6
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +38 -17
- package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
- package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
- package/editor/view/node-graph/NodeGraphEditorView.d.ts +59 -1
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +248 -5
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +84 -8
- package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
- package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
- package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleCodeEditorView.js +4 -3
- package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
- package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +27 -1
- package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
- package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +5 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +61 -31
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +33 -0
- package/editor/view/particles/effect/particle-editor.css +123 -35
- package/package.json +1 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +10 -1
- package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
- package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
- package/src/core/collection/array/typed/float32_array_hash.js +38 -0
- package/src/core/graph/csr/CSRGraph.d.ts +8 -1
- package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
- package/src/core/graph/csr/CSRGraph.js +14 -6
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +24 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/LayoutProblem.js +27 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +26 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +28 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +92 -3
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -242
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +50 -5
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/RouteSearch.js +160 -24
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +7 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/RouteSet.js +8 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +9 -3
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +7 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +9 -3
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +17 -3
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +9 -6
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +49 -7
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +11 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.js +135 -16
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/route_connections.js +716 -309
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +3 -2
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +7 -15
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +6 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/route_nudge.js +42 -13
- package/src/engine/animation/AnimationUtils.js +246 -246
- package/src/engine/animation/Animations.js +74 -74
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2078
- package/src/engine/ecs/EventType.d.ts +0 -1
- package/src/engine/ecs/EventType.js +1 -26
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +3 -7
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +4 -9
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -364
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +8 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts +10 -7
- package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_announce_change.js +12 -12
- package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
- package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +13 -21
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +4 -8
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +4 -8
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +9 -19
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +4 -8
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +4 -10
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +4 -8
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -218
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundListenerSystem.js +6 -8
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +0 -4
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +5 -11
- package/src/shade/playground/particle_editor/README.md +43 -2
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +4 -5
- package/src/shade/playground/particle_system/particle_scene.js +4 -4
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +13 -1
- package/src/shade/renderer/particles/DESIGN.md +104 -19
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +64 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +176 -78
- package/src/shade/renderer/particles/ParticleConstants.d.ts +59 -23
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +66 -23
- package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
- package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
- package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -166
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -303
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +18 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -133
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +0 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -621
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +8 -3
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -213
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +6 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -319
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -517
- package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -159
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +2 -20
- package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
- package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +28 -8
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -25
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +40 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -234
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +59 -3
- package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
- package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +7 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +66 -10
- package/src/shade/renderer/particles/graph_particles.d.ts +23 -69
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +105 -262
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +3 -2
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +51 -22
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +98 -38
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +49 -8
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +95 -150
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +306 -64
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +505 -136
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +36 -12
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +354 -139
- package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +23 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +68 -0
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +81 -42
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -478
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +139 -59
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -647
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +40 -7
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -213
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +30 -3
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -223
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +24 -38
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -206
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -197
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +19 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -561
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -72
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -86
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -271
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -268
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -151
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +20 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -1
- package/src/shade/renderer/particles/particle_test_fixtures.js +229 -203
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +99 -25
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +438 -286
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +87 -102
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +184 -163
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +26 -0
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
- package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
- package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +5 -2
- 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 -19
- package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -9
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +20 -80
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +33 -101
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
- package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +4 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +261 -140
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +217 -255
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +49 -10
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +4 -9
- package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
- package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
- package/src/engine/ecs/transform/__probe.d.ts +0 -4
- package/src/engine/ecs/transform/__probe.d.ts.map +0 -1
- package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
- package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +0 -27
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +0 -1
- package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
- package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/Emitter.d.ts +0 -219
- package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -77
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -155
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +0 -15
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -32
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The analysis every optimizer pass reads: instructions decoded into the
|
|
3
|
-
* the def-use graph over those
|
|
2
|
+
* The analysis every optimizer pass reads: instructions decoded into the operands they resolve and
|
|
3
|
+
* the run they write, the def-use graph over those, and per-lane liveness.
|
|
4
4
|
*
|
|
5
5
|
* Everything here is derived, never authoritative — the instruction words are. A pass rewrites
|
|
6
6
|
* words and the next one re-derives, which is why there is no incremental update path and no
|
|
@@ -11,56 +11,79 @@
|
|
|
11
11
|
*
|
|
12
12
|
* ## Lanes, not registers
|
|
13
13
|
*
|
|
14
|
-
* A register is one `f32` slot and
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
14
|
+
* A register is one `f32` slot and a value of width `w` is a run of `w` of them, so nothing here is
|
|
15
|
+
* per-register: a value's producer is per (instruction, lane), and so is its liveness. Which slots a
|
|
16
|
+
* source reads is the operand's own business — its base and its swizzle, read at as many lanes as the
|
|
17
|
+
* opcode takes of it — and {@link particle_read_slots} is the one place that turns an operand into
|
|
18
|
+
* slots. The ISA's {@link vm_visit_operands} is the one place that says how many lanes that is.
|
|
19
|
+
*
|
|
20
|
+
* ## Kinds
|
|
21
|
+
*
|
|
22
|
+
* A source is a register run or a literal, by the kind bits its instruction carries. Only the first
|
|
23
|
+
* is a run of the file, so `reads` holds only those — every question about liveness, aliasing and
|
|
24
|
+
* dependency is a question about the file, and a literal whose bits happen to look like a slot index
|
|
25
|
+
* must never answer it. The passes that care what a source *is* rather than where it lives — folding,
|
|
26
|
+
* sharing, the copy rewrites — read `sources`, which lists every operand with its kind.
|
|
20
27
|
*/
|
|
21
28
|
/**
|
|
22
29
|
* @typedef {object} ParticleOperandRun
|
|
23
|
-
* @property {number} operand which
|
|
24
|
-
*
|
|
25
|
-
* @property {number}
|
|
26
|
-
* @property {number}
|
|
30
|
+
* @property {number} operand which source slot this is, `0..2`; `-1` for the destination
|
|
31
|
+
* @property {number} kind a `VM_KIND`; `REG` for every entry of `reads` and for the write
|
|
32
|
+
* @property {number} word the operand word as encoded
|
|
33
|
+
* @property {number} base first register slot, or `-1` for a literal
|
|
34
|
+
* @property {number} pattern the swizzle the operand reads through, as `pack_swizzle` packs one; the
|
|
35
|
+
* identity for a write
|
|
36
|
+
* @property {number} lanes how many lanes the instruction reads of it — the operation's width, or one
|
|
37
|
+
* for a slot the ISA marks scalar; for the write, how many it writes
|
|
38
|
+
* @property {number} span consecutive slots the operand reaches from its base
|
|
27
39
|
*/
|
|
28
40
|
/**
|
|
29
41
|
* @typedef {object} ParticleDecodedInstruction
|
|
30
42
|
* @property {number} index position in the stream
|
|
31
|
-
* @property {number[]} words the
|
|
43
|
+
* @property {number[]} words the four instruction words
|
|
32
44
|
* @property {number} op
|
|
33
45
|
* @property {number} width the encoded width field
|
|
46
|
+
* @property {number} dst the encoded destination register
|
|
47
|
+
* @property {number} kinds the three source kinds as one field, as word 0 carries them
|
|
34
48
|
* @property {number} operation_width lanes the operation spans, after the ISA's fixed-width rules
|
|
35
49
|
* @property {object} meta the {@link VM_ISA} entry
|
|
36
50
|
* @property {import("./particle_vm_semantics.js").ParticleOpSemantics} semantics
|
|
37
51
|
* @property {ParticleOperandRun|null} write destination run, or null when the opcode writes nothing
|
|
38
|
-
* @property {ParticleOperandRun[]} reads every register
|
|
52
|
+
* @property {ParticleOperandRun[]} reads every register operand the instruction reads — the `REG` sources
|
|
53
|
+
* @property {ParticleOperandRun[]} sources every source operand, whatever its kind, in slot order
|
|
39
54
|
*/
|
|
40
55
|
/**
|
|
41
|
-
* Decode one instruction into the
|
|
56
|
+
* Decode one instruction into the operands it resolves and the run it writes.
|
|
42
57
|
*
|
|
43
|
-
* @param {ArrayLike<number>} words the
|
|
58
|
+
* @param {ArrayLike<number>} words the four words of a single instruction
|
|
44
59
|
* @param {number} [index]
|
|
45
60
|
* @returns {ParticleDecodedInstruction}
|
|
46
61
|
*/
|
|
47
62
|
export function decode_particle_instruction(words: ArrayLike<number>, index?: number): ParticleDecodedInstruction;
|
|
48
63
|
/**
|
|
49
|
-
* @param {ArrayLike<ArrayLike<number>>} instructions
|
|
64
|
+
* @param {ArrayLike<ArrayLike<number>>} instructions four-word tuples
|
|
50
65
|
* @returns {ParticleDecodedInstruction[]}
|
|
51
66
|
*/
|
|
52
67
|
export function decode_particle_instructions(instructions: ArrayLike<ArrayLike<number>>): ParticleDecodedInstruction[];
|
|
53
68
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
69
|
+
* The slots a register operand reads, one per lane read — in lane order, and a slot appears once per
|
|
70
|
+
* lane that reads it, so a broadcast lists the same slot several times.
|
|
71
|
+
*
|
|
72
|
+
* @param {ParticleOperandRun} read a `REG` run
|
|
73
|
+
* @param {number} [lanes] how many lanes to read; the operand's own count when left out
|
|
74
|
+
* @returns {number[]}
|
|
75
|
+
*/
|
|
76
|
+
export function particle_read_slots(read: ParticleOperandRun, lanes?: number): number[];
|
|
77
|
+
/**
|
|
78
|
+
* Whether an instruction fits the register file: its kinds agree with its opcode, and every run it
|
|
79
|
+
* touches ends inside the file.
|
|
56
80
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* it keeps the rule stated once.
|
|
81
|
+
* There is no aliasing rule to check. Every executor resolves every source before it writes the
|
|
82
|
+
* destination, so a source may overlap the destination in any way and mean what it held before the
|
|
83
|
+
* instruction — which is also what lets a pass move a base or fold a swizzle without asking how the
|
|
84
|
+
* result sits against the other operands.
|
|
62
85
|
*
|
|
63
|
-
* @param {ArrayLike<number>} words the
|
|
86
|
+
* @param {ArrayLike<number>} words the four words of a single instruction
|
|
64
87
|
* @returns {boolean}
|
|
65
88
|
*/
|
|
66
89
|
export function particle_instruction_is_well_formed(words: ArrayLike<number>): boolean;
|
|
@@ -88,8 +111,6 @@ export function build_particle_def_use_graph(decoded: ParticleDecodedInstruction
|
|
|
88
111
|
* has an effect beyond its destination or something reads a lane it writes
|
|
89
112
|
* @property {Int32Array} width per instruction: the width field it could carry, once the lanes
|
|
90
113
|
* nothing reads are dropped. Equal to the encoded one wherever narrowing is not allowed.
|
|
91
|
-
* @property {Int32Array} pattern per instruction: the swizzle pattern at that width; the encoded
|
|
92
|
-
* one for every other opcode.
|
|
93
114
|
* @property {Uint8Array} live_lanes per instruction: bitmask of destination lanes read later
|
|
94
115
|
* @property {number} halt_index index of the first `HALT`, or `-1`
|
|
95
116
|
*/
|
|
@@ -102,8 +123,8 @@ export function build_particle_def_use_graph(decoded: ParticleDecodedInstruction
|
|
|
102
123
|
* record, the kill flag or the RNG by the time it ends.
|
|
103
124
|
*
|
|
104
125
|
* Narrowing is decided inside the same backward pass rather than after it, because an instruction's
|
|
105
|
-
* reads follow its width:
|
|
106
|
-
*
|
|
126
|
+
* reads follow its width: a narrowed copy reads fewer lanes of its source, which is what makes the
|
|
127
|
+
* value above it dead. Deciding both at once reaches that fixed point in one sweep.
|
|
107
128
|
*
|
|
108
129
|
* @param {ParticleDecodedInstruction[]} decoded
|
|
109
130
|
* @param {number} [register_slots]
|
|
@@ -111,15 +132,18 @@ export function build_particle_def_use_graph(decoded: ParticleDecodedInstruction
|
|
|
111
132
|
*/
|
|
112
133
|
export function analyze_particle_lanes(decoded: ParticleDecodedInstruction[], register_slots?: number): ParticleLaneAnalysis;
|
|
113
134
|
/**
|
|
114
|
-
*
|
|
135
|
+
* The most slots alive at once anywhere in the section — what a perfect allocator would need, and
|
|
136
|
+
* the one measure of an instruction order the scheduling pass is for.
|
|
115
137
|
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
138
|
+
* A slot is alive between a write and a later read of it; a read at the instruction that overwrites
|
|
139
|
+
* the slot counts for the value above, since every executor reads its sources before it writes.
|
|
140
|
+
* `HALT` is not special here: what follows one is dead code, and counting it can only overstate.
|
|
141
|
+
*
|
|
142
|
+
* @param {ParticleDecodedInstruction[]} decoded
|
|
143
|
+
* @param {number} [register_slots]
|
|
120
144
|
* @returns {number}
|
|
121
145
|
*/
|
|
122
|
-
export function
|
|
146
|
+
export function particle_peak_live_slots(decoded: ParticleDecodedInstruction[], register_slots?: number): number;
|
|
123
147
|
/**
|
|
124
148
|
* @param {number} base_a
|
|
125
149
|
* @param {number} span_a
|
|
@@ -132,7 +156,8 @@ export function particle_runs_overlap(base_a: number, span_a: number, base_b: nu
|
|
|
132
156
|
* Whether anything in `[from, to)` reads or writes any slot of a run.
|
|
133
157
|
*
|
|
134
158
|
* What a pass moving an instruction has to ask: a value that nothing in the gap looks at or
|
|
135
|
-
* disturbs can be produced anywhere in that gap.
|
|
159
|
+
* disturbs can be produced anywhere in that gap. A read is taken at its whole span, which is at
|
|
160
|
+
* least what it touches.
|
|
136
161
|
*
|
|
137
162
|
* @param {ParticleDecodedInstruction[]} decoded
|
|
138
163
|
* @param {number} from inclusive
|
|
@@ -142,6 +167,18 @@ export function particle_runs_overlap(base_a: number, span_a: number, base_b: nu
|
|
|
142
167
|
* @returns {boolean}
|
|
143
168
|
*/
|
|
144
169
|
export function particle_run_is_touched_between(decoded: ParticleDecodedInstruction[], from: number, to: number, base: number, span: number): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Whether anything in `[from, to)` writes any slot of a run — the weaker question, for a pass that
|
|
172
|
+
* needs a value to still be where it was but does not mind who has looked at it in between.
|
|
173
|
+
*
|
|
174
|
+
* @param {ParticleDecodedInstruction[]} decoded
|
|
175
|
+
* @param {number} from inclusive
|
|
176
|
+
* @param {number} to exclusive
|
|
177
|
+
* @param {number} base
|
|
178
|
+
* @param {number} span
|
|
179
|
+
* @returns {boolean}
|
|
180
|
+
*/
|
|
181
|
+
export function particle_run_is_written_between(decoded: ParticleDecodedInstruction[], from: number, to: number, base: number, span: number): boolean;
|
|
145
182
|
/**
|
|
146
183
|
* Whether every slot of a run is overwritten — or the section ends — before anything reads it again.
|
|
147
184
|
*
|
|
@@ -163,9 +200,11 @@ export function particle_run_is_dead_after(decoded: ParticleDecodedInstruction[]
|
|
|
163
200
|
* numbers, and both need a copy to carry its source's number across rather than minting a new one —
|
|
164
201
|
* otherwise a value moved between registers stops being recognisable as itself.
|
|
165
202
|
*
|
|
166
|
-
* Numbers are minted per write and inherited by `MOV
|
|
167
|
-
*
|
|
168
|
-
*
|
|
203
|
+
* Numbers are minted per write and inherited by `MOV`, the one opcode that moves a value without
|
|
204
|
+
* changing it — through whatever swizzle its source carries, so a broadcast's lanes all hold one
|
|
205
|
+
* number and a permutation's hold the source's in the permuted order. Because a number is never
|
|
206
|
+
* reused, a slot overwritten since simply fails to match, and there is no invalidation step to get
|
|
207
|
+
* wrong.
|
|
169
208
|
*/
|
|
170
209
|
export class ParticleValueNumbering {
|
|
171
210
|
/**
|
|
@@ -178,14 +217,25 @@ export class ParticleValueNumbering {
|
|
|
178
217
|
value_id: Int32Array;
|
|
179
218
|
/** @type {Int32Array} the slot each value was first computed in */
|
|
180
219
|
home: Int32Array;
|
|
220
|
+
/** @type {Int32Array} which publish computed the value in each slot; `-1` for the reset's zero */
|
|
221
|
+
producer: Int32Array;
|
|
181
222
|
/** @type {number} */
|
|
182
223
|
next_id: number;
|
|
224
|
+
/** @type {number} publishes so far, which is what names a producer */
|
|
225
|
+
published: number;
|
|
183
226
|
/**
|
|
184
227
|
* @param {number} base
|
|
185
228
|
* @param {number} span
|
|
186
229
|
* @returns {number[]|null} the numbers in that run, or `null` if it leaves the file
|
|
187
230
|
*/
|
|
188
231
|
ids_of(base: number, span: number): number[] | null;
|
|
232
|
+
/**
|
|
233
|
+
* The numbers a register operand reads, one per lane, through its swizzle.
|
|
234
|
+
*
|
|
235
|
+
* @param {ParticleOperandRun} read a `REG` run
|
|
236
|
+
* @returns {number[]|null} `null` if a lane reaches outside the file
|
|
237
|
+
*/
|
|
238
|
+
ids_read(read: ParticleOperandRun): number[] | null;
|
|
189
239
|
/**
|
|
190
240
|
* @param {number} base
|
|
191
241
|
* @param {number[]} ids
|
|
@@ -193,17 +243,23 @@ export class ParticleValueNumbering {
|
|
|
193
243
|
*/
|
|
194
244
|
holds(base: number, ids: number[]): boolean;
|
|
195
245
|
/**
|
|
196
|
-
*
|
|
197
|
-
* them.
|
|
246
|
+
* The register operand that reads the same values from where they were first computed.
|
|
198
247
|
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
248
|
+
* Lane by lane, the value a read sees has a home slot; if every home still holds its value and
|
|
249
|
+
* the homes fit in the four slots a swizzle can reach from one base, the read can be redirected
|
|
250
|
+
* there. That is how a copy is read through, a broadcast folds into the consumer's swizzle, and a
|
|
251
|
+
* value moved between registers stays recognisable as itself.
|
|
201
252
|
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
253
|
+
* Every lane has to come from ONE instruction. Two producers' results side by side could be named
|
|
254
|
+
* by one swizzled operand too, but folding them there would leave both producers where they are;
|
|
255
|
+
* forwarding one of them into the copy's slot deletes the copy outright, and that is the rewrite
|
|
256
|
+
* the copy-propagation pass wants to have the chance to make.
|
|
257
|
+
*
|
|
258
|
+
* @param {ParticleOperandRun} read a `REG` run
|
|
259
|
+
* @returns {number} a register operand word, or `-1` when the values are not all at home, come from
|
|
260
|
+
* more than one producer, or their homes do not fit one operand
|
|
205
261
|
*/
|
|
206
|
-
|
|
262
|
+
origin_of_read(read: ParticleOperandRun): number;
|
|
207
263
|
/**
|
|
208
264
|
* Record what an instruction leaves in its destination.
|
|
209
265
|
*
|
|
@@ -211,22 +267,39 @@ export class ParticleValueNumbering {
|
|
|
211
267
|
* moved a source or rewritten the opcode by the time it gets here — the state has to describe
|
|
212
268
|
* the program that will run.
|
|
213
269
|
*
|
|
214
|
-
* @param {ArrayLike<number>} words the
|
|
270
|
+
* @param {ArrayLike<number>} words the four words of a single instruction
|
|
215
271
|
*/
|
|
216
272
|
publish(words: ArrayLike<number>): void;
|
|
217
273
|
}
|
|
218
274
|
export type ParticleOperandRun = {
|
|
219
275
|
/**
|
|
220
|
-
* which
|
|
221
|
-
* `KILL` keep in the destination slot, otherwise the source slot `0..2`.
|
|
276
|
+
* which source slot this is, `0..2`; `-1` for the destination
|
|
222
277
|
*/
|
|
223
278
|
operand: number;
|
|
224
279
|
/**
|
|
225
|
-
*
|
|
280
|
+
* a `VM_KIND`; `REG` for every entry of `reads` and for the write
|
|
281
|
+
*/
|
|
282
|
+
kind: number;
|
|
283
|
+
/**
|
|
284
|
+
* the operand word as encoded
|
|
285
|
+
*/
|
|
286
|
+
word: number;
|
|
287
|
+
/**
|
|
288
|
+
* first register slot, or `-1` for a literal
|
|
226
289
|
*/
|
|
227
290
|
base: number;
|
|
228
291
|
/**
|
|
229
|
-
*
|
|
292
|
+
* the swizzle the operand reads through, as `pack_swizzle` packs one; the
|
|
293
|
+
* identity for a write
|
|
294
|
+
*/
|
|
295
|
+
pattern: number;
|
|
296
|
+
/**
|
|
297
|
+
* how many lanes the instruction reads of it — the operation's width, or one
|
|
298
|
+
* for a slot the ISA marks scalar; for the write, how many it writes
|
|
299
|
+
*/
|
|
300
|
+
lanes: number;
|
|
301
|
+
/**
|
|
302
|
+
* consecutive slots the operand reaches from its base
|
|
230
303
|
*/
|
|
231
304
|
span: number;
|
|
232
305
|
};
|
|
@@ -236,7 +309,7 @@ export type ParticleDecodedInstruction = {
|
|
|
236
309
|
*/
|
|
237
310
|
index: number;
|
|
238
311
|
/**
|
|
239
|
-
* the
|
|
312
|
+
* the four instruction words
|
|
240
313
|
*/
|
|
241
314
|
words: number[];
|
|
242
315
|
op: number;
|
|
@@ -244,6 +317,14 @@ export type ParticleDecodedInstruction = {
|
|
|
244
317
|
* the encoded width field
|
|
245
318
|
*/
|
|
246
319
|
width: number;
|
|
320
|
+
/**
|
|
321
|
+
* the encoded destination register
|
|
322
|
+
*/
|
|
323
|
+
dst: number;
|
|
324
|
+
/**
|
|
325
|
+
* the three source kinds as one field, as word 0 carries them
|
|
326
|
+
*/
|
|
327
|
+
kinds: number;
|
|
247
328
|
/**
|
|
248
329
|
* lanes the operation spans, after the ISA's fixed-width rules
|
|
249
330
|
*/
|
|
@@ -258,9 +339,13 @@ export type ParticleDecodedInstruction = {
|
|
|
258
339
|
*/
|
|
259
340
|
write: ParticleOperandRun | null;
|
|
260
341
|
/**
|
|
261
|
-
* every register
|
|
342
|
+
* every register operand the instruction reads — the `REG` sources
|
|
262
343
|
*/
|
|
263
344
|
reads: ParticleOperandRun[];
|
|
345
|
+
/**
|
|
346
|
+
* every source operand, whatever its kind, in slot order
|
|
347
|
+
*/
|
|
348
|
+
sources: ParticleOperandRun[];
|
|
264
349
|
};
|
|
265
350
|
export type ParticleLaneAnalysis = {
|
|
266
351
|
/**
|
|
@@ -273,11 +358,6 @@ export type ParticleLaneAnalysis = {
|
|
|
273
358
|
* nothing reads are dropped. Equal to the encoded one wherever narrowing is not allowed.
|
|
274
359
|
*/
|
|
275
360
|
width: Int32Array;
|
|
276
|
-
/**
|
|
277
|
-
* per instruction: the swizzle pattern at that width; the encoded
|
|
278
|
-
* one for every other opcode.
|
|
279
|
-
*/
|
|
280
|
-
pattern: Int32Array;
|
|
281
361
|
/**
|
|
282
362
|
* per instruction: bitmask of destination lanes read later
|
|
283
363
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle_program_analysis.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/particle_program_analysis.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"particle_program_analysis.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/particle_program_analysis.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AACH,mDAJW,UAAU,MAAM,CAAC,UACjB,MAAM,GACJ,0BAA0B,CAiDtC;AAED;;;GAGG;AACH,2DAHW,UAAU,UAAU,MAAM,CAAC,CAAC,GAC1B,0BAA0B,EAAE,CAUxC;AAED;;;;;;;GAOG;AACH,0CAJW,kBAAkB,UAClB,MAAM,GACJ,MAAM,EAAE,CAUpB;AAED;;;;;;;;;;;GAWG;AACH,2DAHW,UAAU,MAAM,CAAC,GACf,OAAO,CAiBnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,sDAJW,0BAA0B,EAAE,mBAC5B,MAAM,GACJ,QAAQ,CAyDpB;AAED;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,gDAJW,0BAA0B,EAAE,mBAC5B,MAAM,GACJ,oBAAoB,CA6EhC;AAED;;;;;;;;;;;GAWG;AACH,kDAJW,0BAA0B,EAAE,mBAC5B,MAAM,GACJ,MAAM,CAmClB;AAeD;;;;;;GAMG;AACH,8CANW,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,GACJ,OAAO,CAInB;AAED;;;;;;;;;;;;;GAaG;AACH,yDAPW,0BAA0B,EAAE,QAC5B,MAAM,MACN,MAAM,QACN,MAAM,QACN,MAAM,GACJ,OAAO,CAmBnB;AAED;;;;;;;;;;GAUG;AACH,yDAPW,0BAA0B,EAAE,QAC5B,MAAM,MACN,MAAM,QACN,MAAM,QACN,MAAM,GACJ,OAAO,CAanB;AAED;;;;;;;;;;;GAWG;AACH,oDANW,0BAA0B,EAAE,SAC5B,MAAM,QACN,MAAM,QACN,MAAM,GACJ,OAAO,CAiCnB;AAED;;;;;;;;;;;;;GAaG;AACH;IACI;;OAEG;IACH,oBAFW,MAAM,EAsBhB;IAnBG,qBAAqB;IACrB,OADW,MAAM,CACC;IAClB,gDAAgD;IAChD,UADW,UAAU,CACgB;IACrC,mEAAmE;IACnE,MADW,UAAU,CACY;IACjC,kGAAkG;IAClG,UADW,UAAU,CACyB;IAC9C,qBAAqB;IACrB,SADW,MAAM,CACG;IACpB,sEAAsE;IACtE,WADW,MAAM,CACC;IAUtB;;;;OAIG;IACH,aAJW,MAAM,QACN,MAAM,GACJ,MAAM,EAAE,GAAC,IAAI,CAczB;IAED;;;;;OAKG;IACH,eAHW,kBAAkB,GAChB,MAAM,EAAE,GAAC,IAAI,CAUzB;IAED;;;;OAIG;IACH,YAJW,MAAM,OACN,MAAM,EAAE,GACN,OAAO,CAcnB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,qBAJW,kBAAkB,GAChB,MAAM,CAiDlB;IAED;;;;;;;;OAQG;IACH,eAFW,UAAU,MAAM,CAAC,QAgD3B;CACJ;;;;;aArsBa,MAAM;;;;UACN,MAAM;;;;UACN,MAAM;;;;UACN,MAAM;;;;;aACN,MAAM;;;;;WAEN,MAAM;;;;UAEN,MAAM;;;;;;WAKN,MAAM;;;;WACN,MAAM,EAAE;QACR,MAAM;;;;WACN,MAAM;;;;SACN,MAAM;;;;WACN,MAAM;;;;qBACN,MAAM;;;;UACN,MAAM;eACN,OAAO,4BAA4B,EAAE,mBAAmB;;;;WACxD,kBAAkB,GAAC,IAAI;;;;WACvB,kBAAkB,EAAE;;;;aACpB,kBAAkB,EAAE;;;;;;;UAoMpB,UAAU;;;;;WAEV,UAAU;;;;gBAEV,UAAU;;;;gBACV,MAAM;;yBAvRK,wCAAwC"}
|