@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,29 +1,123 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pack
|
|
2
|
+
* Pack word 0.
|
|
3
|
+
*
|
|
3
4
|
* @param {number} op
|
|
4
5
|
* @param {number} width lane count, `0..4`
|
|
6
|
+
* @param {number} dst destination register, `0..255`
|
|
7
|
+
* @param {number} kinds the three source kinds as one field — see {@link vm_pack_kinds}
|
|
5
8
|
* @returns {number}
|
|
6
9
|
*/
|
|
7
|
-
export function vm_encode_word0(op: number, width: number): number;
|
|
10
|
+
export function vm_encode_word0(op: number, width: number, dst: number, kinds: number): number;
|
|
8
11
|
/**
|
|
9
|
-
* @
|
|
10
|
-
*
|
|
12
|
+
* The three source kinds as the one field {@link vm_encode_word0} takes.
|
|
13
|
+
*
|
|
14
|
+
* @param {number} s0
|
|
15
|
+
* @param {number} s1
|
|
16
|
+
* @param {number} s2
|
|
17
|
+
* @returns {number}
|
|
11
18
|
*/
|
|
19
|
+
export function vm_pack_kinds(s0: number, s1: number, s2: number): number;
|
|
20
|
+
/** @param {number} word0 @returns {number} opcode */
|
|
12
21
|
export function vm_decode_op(word0: number): number;
|
|
22
|
+
/** @param {number} word0 @returns {number} lane count */
|
|
23
|
+
export function vm_decode_width(word0: number): number;
|
|
24
|
+
/** @param {number} word0 @returns {number} destination register */
|
|
25
|
+
export function vm_decode_dst(word0: number): number;
|
|
26
|
+
/** @param {number} word0 @returns {number} the three source kinds as one field */
|
|
27
|
+
export function vm_decode_kinds(word0: number): number;
|
|
13
28
|
/**
|
|
14
29
|
* @param {number} word0
|
|
15
|
-
* @
|
|
30
|
+
* @param {number} slot source slot, `0..2`
|
|
31
|
+
* @returns {number} a {@link VM_KIND}
|
|
16
32
|
*/
|
|
17
|
-
export function
|
|
33
|
+
export function vm_decode_kind(word0: number, slot: number): number;
|
|
34
|
+
/** @returns {number} word 0 with its width replaced */
|
|
35
|
+
export function vm_with_width(word0: any, width: any): number;
|
|
36
|
+
/** @returns {number} word 0 with its destination replaced */
|
|
37
|
+
export function vm_with_dst(word0: any, dst: any): number;
|
|
38
|
+
/** @returns {number} word 0 with one source's kind replaced */
|
|
39
|
+
export function vm_with_kind(word0: any, slot: any, kind: any): number;
|
|
40
|
+
/**
|
|
41
|
+
* Pack a swizzle pattern from four lane selectors: selector `i` in bits `[2i, 2i+2)`, values
|
|
42
|
+
* 0=x, 1=y, 2=z, 3=w.
|
|
43
|
+
*
|
|
44
|
+
* @param {number} x
|
|
45
|
+
* @param {number} y
|
|
46
|
+
* @param {number} z
|
|
47
|
+
* @param {number} w
|
|
48
|
+
* @returns {number}
|
|
49
|
+
*/
|
|
50
|
+
export function pack_swizzle(x: number, y: number, z: number, w: number): number;
|
|
51
|
+
/**
|
|
52
|
+
* @param {number} pattern
|
|
53
|
+
* @param {number} lane
|
|
54
|
+
* @returns {number} the lane the pattern selects for output lane `lane`
|
|
55
|
+
*/
|
|
56
|
+
export function swizzle_selector(pattern: number, lane: number): number;
|
|
57
|
+
/**
|
|
58
|
+
* A register operand word: a base slot read through a pattern.
|
|
59
|
+
*
|
|
60
|
+
* The pattern is stored XOR {@link VM_SWIZZLE_IDENTITY}, so the identity is a zero byte and a bare
|
|
61
|
+
* slot index is the run at that slot. Nothing else about the word depends on that choice; read the
|
|
62
|
+
* pattern back with {@link vm_operand_pattern} rather than the bits.
|
|
63
|
+
*
|
|
64
|
+
* @param {number} base first register slot
|
|
65
|
+
* @param {number} [pattern] a packed swizzle; the run as it lies when left out
|
|
66
|
+
* @returns {number}
|
|
67
|
+
*/
|
|
68
|
+
export function vm_register(base: number, pattern?: number): number;
|
|
69
|
+
/** @param {number} word a register operand @returns {number} its base slot */
|
|
70
|
+
export function vm_operand_base(word: number): number;
|
|
71
|
+
/** @param {number} word a register operand @returns {number} its swizzle, as {@link pack_swizzle} packs one */
|
|
72
|
+
export function vm_operand_pattern(word: number): number;
|
|
18
73
|
/**
|
|
19
|
-
*
|
|
74
|
+
* @param {number} word a register operand
|
|
75
|
+
* @param {number} lane
|
|
76
|
+
* @returns {number} the slot lane `lane` of the operand reads
|
|
77
|
+
*/
|
|
78
|
+
export function vm_operand_slot(word: number, lane: number): number;
|
|
79
|
+
/** @returns {number} the operand moved to another base, keeping its swizzle */
|
|
80
|
+
export function vm_operand_with_base(word: any, base: any): number;
|
|
81
|
+
/**
|
|
82
|
+
* How far into the file a register operand reaches when `lanes` lanes of it are read: one past the
|
|
83
|
+
* widest selector among them. The selectors above `lanes` are never read and do not count.
|
|
84
|
+
*
|
|
85
|
+
* @param {number} word a register operand
|
|
86
|
+
* @param {number} lanes how many lanes the instruction reads of it
|
|
87
|
+
* @returns {number}
|
|
88
|
+
*/
|
|
89
|
+
export function vm_operand_span(word: number, lanes: number): number;
|
|
90
|
+
/**
|
|
91
|
+
* The canonical spelling of a register operand read at `lanes` lanes: the base is the lowest slot
|
|
92
|
+
* any lane reads, and selectors above the lanes read are the identity, since they name nothing. So
|
|
93
|
+
* `r0.yz` is `r1`, `r0.zy` is `r1.yx`, and a broadcast of lane 3 is the run at lane 3 — one
|
|
94
|
+
* spelling per meaning, which is what lets two instructions be compared word for word.
|
|
20
95
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
96
|
+
* @param {number} word a register operand
|
|
97
|
+
* @param {number} lanes how many lanes the instruction reads of it
|
|
98
|
+
* @returns {number}
|
|
99
|
+
*/
|
|
100
|
+
export function vm_canonical_register(word: number, lanes: number): number;
|
|
101
|
+
/** @param {number} value @returns {number} the `f32` bit pattern the value rounds to */
|
|
102
|
+
export function vm_f32_bits(value: number): number;
|
|
103
|
+
/** @param {number} bits @returns {number} the `f32` those bits are */
|
|
104
|
+
export function vm_f32_value(bits: number): number;
|
|
105
|
+
/**
|
|
106
|
+
* A literal source operand, as `InstructionStream.emit` takes one in a source slot.
|
|
107
|
+
*
|
|
108
|
+
* @param {number} value
|
|
109
|
+
* @returns {{kind: number, word: number}}
|
|
110
|
+
*/
|
|
111
|
+
export function vm_immediate(value: number): {
|
|
112
|
+
kind: number;
|
|
113
|
+
word: number;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Widths are read out of the opcode's metadata; see {@link VM_ISA}.
|
|
23
117
|
*
|
|
24
118
|
* @param {number} op
|
|
25
119
|
* @param {number} width the instruction's width field
|
|
26
|
-
* @returns {number}
|
|
120
|
+
* @returns {number} the lane count the opcode actually operates on
|
|
27
121
|
*/
|
|
28
122
|
export function vm_operation_width(op: number, width: number): number;
|
|
29
123
|
/**
|
|
@@ -34,65 +128,157 @@ export function vm_operation_width(op: number, width: number): number;
|
|
|
34
128
|
*/
|
|
35
129
|
export function vm_dest_width(op: number, width: number): number;
|
|
36
130
|
/**
|
|
131
|
+
* The four words of an instruction, with every register operand in its canonical spelling.
|
|
132
|
+
*
|
|
133
|
+
* Both the assembler's `InstructionStream.emit` and the assembly parser build instructions here, so
|
|
134
|
+
* the one encoding rule that is a choice rather than a fact — how a swizzle is spelled — is made in
|
|
135
|
+
* one place: selectors above the lanes an operand is read at are the identity, and a run of
|
|
136
|
+
* consecutive selectors is the identity at a higher base. Two instructions that mean the same thing
|
|
137
|
+
* then have the same words, which is what lets the optimizer compare them.
|
|
138
|
+
*
|
|
37
139
|
* @param {number} op
|
|
38
|
-
* @
|
|
140
|
+
* @param {number} width lane count, `0..4`
|
|
141
|
+
* @param {number} dst destination register
|
|
142
|
+
* @param {number[]} kinds a {@link VM_KIND} per source slot
|
|
143
|
+
* @param {number[]} sources the three source words
|
|
144
|
+
* @returns {number[]}
|
|
39
145
|
*/
|
|
40
|
-
export function
|
|
146
|
+
export function vm_pack_instruction(op: number, width: number, dst: number, kinds: number[], sources: number[]): number[];
|
|
41
147
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @param {number}
|
|
45
|
-
* @
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
148
|
+
* An encoded instruction, re-spelled canonically — what a pass wants after it has moved an operand.
|
|
149
|
+
*
|
|
150
|
+
* @param {ArrayLike<number>} words the four words of a single instruction
|
|
151
|
+
* @returns {number[]}
|
|
152
|
+
*/
|
|
153
|
+
export function vm_repack_instruction(words: ArrayLike<number>): number[];
|
|
154
|
+
/**
|
|
155
|
+
* @typedef {object} ParticleVMOperand
|
|
156
|
+
* @property {number} slot source slot, `0..2`
|
|
157
|
+
* @property {number} kind a {@link VM_KIND}, never `NONE`
|
|
158
|
+
* @property {number} word the source word as encoded
|
|
159
|
+
* @property {number} lanes how many lanes the instruction reads of it: the operation's width, or one
|
|
160
|
+
* for a slot the ISA marks scalar
|
|
161
|
+
* @property {number} span register slots the operand reaches from its base, for a register; `0` for a
|
|
162
|
+
* literal
|
|
49
163
|
*/
|
|
50
|
-
export function pack_swizzle(x: number, y: number, z: number, w: number): number;
|
|
51
164
|
/**
|
|
52
|
-
*
|
|
53
|
-
* the
|
|
165
|
+
* Visit every source operand of an instruction — every slot whose kind is not `NONE` — with how
|
|
166
|
+
* many lanes the opcode reads of it and how far into the file it reaches.
|
|
54
167
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
168
|
+
* The rules for the reach are not uniform and live here rather than in each caller: a source is
|
|
169
|
+
* read as wide as the operation runs unless the ISA marks that slot scalar, and a register operand
|
|
170
|
+
* reaches as far as its widest selector among the lanes read.
|
|
58
171
|
*
|
|
59
|
-
* @param {number}
|
|
60
|
-
* @
|
|
172
|
+
* @param {ArrayLike<number>} words an instruction stream
|
|
173
|
+
* @param {number} base index of the instruction's first word
|
|
174
|
+
* @param {function(ParticleVMOperand):void} visit the one object is reused between calls; copy it
|
|
175
|
+
* to keep it
|
|
61
176
|
*/
|
|
62
|
-
export function
|
|
177
|
+
export function vm_visit_operands(words: ArrayLike<number>, base: number, visit: (arg0: ParticleVMOperand) => void): void;
|
|
63
178
|
/**
|
|
64
|
-
* Visit every register
|
|
65
|
-
* slots it reaches
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* of the file it touches: a `vec3` at r0 occupies r0, r1 and r2. Anyone sizing a register file or
|
|
69
|
-
* bounds-checking one needs the reach rather than the base, and the rules for it are not uniform —
|
|
70
|
-
* so they live here, in one place, instead of being re-derived by each caller until they disagree:
|
|
179
|
+
* Visit every run of the register file an instruction touches, as the slot it starts at and how
|
|
180
|
+
* many consecutive slots it reaches: the destination as far as the opcode writes, and each register
|
|
181
|
+
* source as far as its selectors read. What anyone sizing or bounds-checking the file wants; a
|
|
182
|
+
* literal is not a run of the file and is not visited.
|
|
71
183
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
|
|
184
|
+
* @param {ArrayLike<number>} words an instruction stream
|
|
185
|
+
* @param {number} base index of the instruction's first word
|
|
186
|
+
* @param {function(number, number):void} visit called `(slot, span)` per run
|
|
187
|
+
*/
|
|
188
|
+
export function vm_visit_register_runs(words: ArrayLike<number>, base: number, visit: (arg0: number, arg1: number) => void): void;
|
|
189
|
+
/**
|
|
190
|
+
* Whether the kind bits of an instruction agree with what its opcode reads: a register-role slot
|
|
191
|
+
* carries a register or a literal, every other slot carries nothing. Both the assembler and
|
|
192
|
+
* `ParticleProgram.validate` ask here rather than each restating the rule.
|
|
76
193
|
*
|
|
77
194
|
* @param {ArrayLike<number>} words an instruction stream
|
|
78
195
|
* @param {number} base index of the instruction's first word
|
|
79
|
-
* @
|
|
196
|
+
* @returns {string|null} what is wrong, or `null` when nothing is
|
|
80
197
|
*/
|
|
81
|
-
export function
|
|
198
|
+
export function vm_kinds_problem(words: ArrayLike<number>, base: number): string | null;
|
|
82
199
|
/**
|
|
83
|
-
*
|
|
200
|
+
* The kinds an opcode's sources carry when every register-role slot holds a register: the default
|
|
201
|
+
* an assembler starts from, before any literal is marked.
|
|
202
|
+
*
|
|
203
|
+
* @param {number} op
|
|
204
|
+
* @returns {number} a kinds field for {@link vm_encode_word0}
|
|
205
|
+
*/
|
|
206
|
+
export function vm_register_kinds(op: number): number;
|
|
207
|
+
/**
|
|
208
|
+
* Particle VM instruction-set architecture — the single source of truth.
|
|
209
|
+
*
|
|
210
|
+
* Both executors (the JS reference in {@link ../vm/ParticleVMReference.js} and the WGSL interpreter
|
|
211
|
+
* in {@link ../vm/chunk_particle_vm.js}) implement exactly this table, and the parity spec asserts
|
|
212
|
+
* that neither drifts from it. The assembler and node compiler emit against these opcode numbers.
|
|
213
|
+
*
|
|
214
|
+
* ## Encoding
|
|
215
|
+
*
|
|
216
|
+
* Every instruction is {@link PARTICLE_VM_INSTRUCTION_WORDS} `u32` words — the size of one
|
|
217
|
+
* `vec4<u32>`, so the four loads that fetch it are one 16-byte load by the time a shader compiler is
|
|
218
|
+
* done with them:
|
|
219
|
+
*
|
|
220
|
+
* [ op | width << 8 | kinds << 16 | dst << 24, s0, s1, s2 ]
|
|
221
|
+
*
|
|
222
|
+
* Word 0 packs the opcode (bits 0..7), the lane count the operation spans (8..10), the kind of each
|
|
223
|
+
* source (two bits per slot at 16..21) and the destination register (24..31). The other three words
|
|
224
|
+
* are the sources. Registers hold single floats, so a `vec3` value is three consecutive slots and an
|
|
225
|
+
* `ADD` with width 3 adds three lanes; widths are what stop every value costing four registers.
|
|
226
|
+
*
|
|
227
|
+
* ## Operands
|
|
228
|
+
*
|
|
229
|
+
* A source word means what its kind says — see {@link VM_KIND}:
|
|
230
|
+
*
|
|
231
|
+
* - `NONE`: not an operand the VM resolves — an unused slot, or a raw field the opcode reads for
|
|
232
|
+
* itself: an attribute offset, a component count, a builtin id, a curve handle, a pool index.
|
|
233
|
+
* - `REG`: a register operand. Bits 0..7 are the first slot, bits 8..15 a swizzle — see below.
|
|
234
|
+
* - `IMM`: the word IS the `f32` bit pattern of a literal, read in every lane. A scalar or a
|
|
235
|
+
* lane-uniform vector costs no register and no load; only a vector whose lanes differ still goes
|
|
236
|
+
* through the pool with `LOAD_CONST`.
|
|
237
|
+
*
|
|
238
|
+
* The kinds exist so the interpreter can resolve every source the same way, before the opcode runs
|
|
239
|
+
* and without consulting a table: it reads the kind, gathers the lanes, and the opcode body sees
|
|
240
|
+
* three four-lane values whatever they came from. A kind is encoding, not an opcode mode.
|
|
241
|
+
*
|
|
242
|
+
* ## Swizzles
|
|
243
|
+
*
|
|
244
|
+
* Every register operand carries a swizzle: four two-bit lane selectors in bits 8..15, packed as
|
|
245
|
+
* {@link pack_swizzle} packs them, and stored XOR the identity pattern `.xyzw`
|
|
246
|
+
* ({@link VM_SWIZZLE_IDENTITY}). That choice is what makes a bare slot index a register operand:
|
|
247
|
+
* with a zero swizzle byte lane `c` reads slot `base + c`, the run as it lies, and `r5.xxxx` is the
|
|
248
|
+
* same word with the selectors that name lane 0 four times. Lane `c` of an operand reads slot
|
|
249
|
+
* `base + selector[c]`, so an operand reaches as far into the file as its widest selector below the
|
|
250
|
+
* instruction's width — never further, whatever the selectors above the width say.
|
|
251
|
+
*
|
|
252
|
+
* Swizzles are why there is no `SWIZZLE` opcode and no `SCALE`: a permutation or a broadcast is a
|
|
253
|
+
* `MOV` whose source is swizzled, and a vector times a scalar is `MUL v, s.xxxx`. Both were
|
|
254
|
+
* opcodes that existed to do what an operand can now say for itself, which is the direction the
|
|
255
|
+
* ISA takes whenever it can — see {@link VM_OP} for the holes they left.
|
|
256
|
+
*
|
|
257
|
+
* ## Resolution before execution
|
|
258
|
+
*
|
|
259
|
+
* The interpreter reads every source lane before it writes any destination lane. Operands may
|
|
260
|
+
* therefore overlap the destination in any way — `MOV.2 r0, r0.yx` swaps two slots in place — and
|
|
261
|
+
* there is no aliasing rule for a program to break. The reductions write one lane whatever they
|
|
262
|
+
* read (see {@link VM_DEST}); a few opcodes fix their lane count (see {@link VM_WIDTH}).
|
|
263
|
+
*
|
|
264
|
+
* There is no control flow: conditionals are `CMP` + `SELECT` and destruction is `KILL`, which
|
|
265
|
+
* keeps the interpreter a flat `switch` inside a bounded loop.
|
|
266
|
+
*/
|
|
267
|
+
/** Words per instruction. Four, so an instruction is one `vec4<u32>` fetch. @type {number} */
|
|
268
|
+
export const PARTICLE_VM_INSTRUCTION_WORDS: number;
|
|
269
|
+
/**
|
|
270
|
+
* Operand slot roles: what an opcode reads a source slot as. Used for assembler validation,
|
|
271
|
+
* disassembly and for deriving each slot's {@link VM_KIND }.
|
|
84
272
|
*/
|
|
85
273
|
export type VM_OPERAND = string;
|
|
86
274
|
export namespace VM_OPERAND {
|
|
87
275
|
let NONE: string;
|
|
88
276
|
let REG: string;
|
|
89
|
-
let DST: string;
|
|
90
277
|
let CONST: string;
|
|
91
278
|
let ATTR_OFFSET: string;
|
|
92
279
|
let COMP: string;
|
|
93
280
|
let BUILTIN: string;
|
|
94
281
|
let CURVE: string;
|
|
95
|
-
let SWIZZLE: string;
|
|
96
282
|
}
|
|
97
283
|
/**
|
|
98
284
|
* Builtin inputs the host shader assembles per-invocation and the VM reads via `LOAD_BUILTIN`.
|
|
@@ -119,7 +305,8 @@ export const VM_BUILTIN_COMPONENTS: {
|
|
|
119
305
|
[x: number]: number;
|
|
120
306
|
};
|
|
121
307
|
/**
|
|
122
|
-
* Opcodes. Numbers are stable wire values — never renumber, only append.
|
|
308
|
+
* Opcodes. Numbers are stable wire values — never renumber, only append. 19 was `SCALE` and 45 was
|
|
309
|
+
* `SWIZZLE`; both are spelled by an operand swizzle now and the numbers stay unused.
|
|
123
310
|
*/
|
|
124
311
|
export type VM_OP = number;
|
|
125
312
|
export namespace VM_OP {
|
|
@@ -140,7 +327,6 @@ export namespace VM_OP {
|
|
|
140
327
|
export let MAX: number;
|
|
141
328
|
export let MIX: number;
|
|
142
329
|
export let CLAMP: number;
|
|
143
|
-
export let SCALE: number;
|
|
144
330
|
export let NEG: number;
|
|
145
331
|
export let ABS: number;
|
|
146
332
|
export let FLOOR: number;
|
|
@@ -153,13 +339,16 @@ export namespace VM_OP {
|
|
|
153
339
|
export let POW: number;
|
|
154
340
|
export let STEP: number;
|
|
155
341
|
export let SMOOTHSTEP: number;
|
|
342
|
+
export let RSQRT: number;
|
|
343
|
+
export let TAN: number;
|
|
344
|
+
export let ASIN: number;
|
|
345
|
+
export let ACOS: number;
|
|
346
|
+
export let ATAN2: number;
|
|
156
347
|
export let DOT: number;
|
|
157
348
|
export let CROSS: number;
|
|
158
349
|
export let LENGTH: number;
|
|
159
350
|
export let NORMALIZE: number;
|
|
160
351
|
export let DISTANCE: number;
|
|
161
|
-
let SWIZZLE_1: number;
|
|
162
|
-
export { SWIZZLE_1 as SWIZZLE };
|
|
163
352
|
export let CMP_LT: number;
|
|
164
353
|
export let CMP_LE: number;
|
|
165
354
|
export let CMP_GT: number;
|
|
@@ -193,36 +382,89 @@ export namespace VM_DEST {
|
|
|
193
382
|
export { ONE_1 as ONE };
|
|
194
383
|
}
|
|
195
384
|
/**
|
|
196
|
-
* Widest an operation may be. Registers hold scalars; four is what a `vec4` value needs and what
|
|
197
|
-
*
|
|
385
|
+
* Widest an operation may be. Registers hold scalars; four is what a `vec4` value needs and what a
|
|
386
|
+
* two-bit lane selector can address.
|
|
198
387
|
* @type {number}
|
|
199
388
|
*/
|
|
200
389
|
export const VM_MAX_WIDTH: number;
|
|
390
|
+
/** Mask selecting the opcode out of word 0. @type {number} */
|
|
391
|
+
export const VM_OP_MASK: number;
|
|
392
|
+
/** Bit position of the width field in word 0. @type {number} */
|
|
393
|
+
export const VM_WIDTH_SHIFT: number;
|
|
394
|
+
/** Mask selecting the width out of word 0, once shifted down. @type {number} */
|
|
395
|
+
export const VM_WIDTH_MASK: number;
|
|
201
396
|
/**
|
|
202
|
-
*
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
397
|
+
* What a source word means. Wire values; never renumber.
|
|
398
|
+
*/
|
|
399
|
+
export type VM_KIND = number;
|
|
400
|
+
export namespace VM_KIND {
|
|
401
|
+
let NONE_3: number;
|
|
402
|
+
export { NONE_3 as NONE };
|
|
403
|
+
let REG_1: number;
|
|
404
|
+
export { REG_1 as REG };
|
|
405
|
+
export let IMM: number;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Bit position of the first source's kind in word 0. Source `n` has its two kind bits at
|
|
409
|
+
* `VM_KIND_SHIFT + 2n`, so the three together are bits 16..21.
|
|
209
410
|
* @type {number}
|
|
210
411
|
*/
|
|
211
|
-
export const
|
|
212
|
-
/**
|
|
213
|
-
export const
|
|
214
|
-
/** Mask selecting
|
|
215
|
-
export const
|
|
412
|
+
export const VM_KIND_SHIFT: number;
|
|
413
|
+
/** Bits per kind field. @type {number} */
|
|
414
|
+
export const VM_KIND_BITS: number;
|
|
415
|
+
/** Mask selecting one kind field, once shifted down. @type {number} */
|
|
416
|
+
export const VM_KIND_MASK: number;
|
|
417
|
+
/** Bit position of the destination register in word 0. @type {number} */
|
|
418
|
+
export const VM_DST_SHIFT: number;
|
|
419
|
+
/** Mask selecting the destination register out of word 0, once shifted down. @type {number} */
|
|
420
|
+
export const VM_DST_MASK: number;
|
|
421
|
+
/** The pattern that reads a run as it lies: `.xyzw`. @type {number} */
|
|
422
|
+
export const VM_SWIZZLE_IDENTITY: number;
|
|
423
|
+
/** The pattern that reads lane 0 in every lane: `.xxxx`. @type {number} */
|
|
424
|
+
export const VM_SWIZZLE_BROADCAST: number;
|
|
425
|
+
/** Mask selecting the base slot out of a register operand word. @type {number} */
|
|
426
|
+
export const VM_OPERAND_BASE_MASK: number;
|
|
427
|
+
/** Bit position of the swizzle byte in a register operand word. @type {number} */
|
|
428
|
+
export const VM_OPERAND_SWIZZLE_SHIFT: number;
|
|
216
429
|
/**
|
|
217
|
-
* Per-opcode metadata: mnemonic
|
|
430
|
+
* Per-opcode metadata: mnemonic, whether it writes a destination, and the role of each source slot.
|
|
218
431
|
*
|
|
219
432
|
* Keyed by opcode number. Used by the assembler for validation/disassembly and by the parity
|
|
220
433
|
* meta-test to enforce that every opcode is handled by both executors.
|
|
221
|
-
* @type {Map<number, {name: string, dst: boolean, operands: [string, string, string]}>}
|
|
434
|
+
* @type {Map<number, {name: string, dst: boolean, operands: [string, string, string], width: string, dest: string, default_width: number, min_width: number, scalar_operands: number[]}>}
|
|
222
435
|
*/
|
|
223
436
|
export const VM_ISA: Map<number, {
|
|
224
437
|
name: string;
|
|
225
438
|
dst: boolean;
|
|
226
439
|
operands: [string, string, string];
|
|
440
|
+
width: string;
|
|
441
|
+
dest: string;
|
|
442
|
+
default_width: number;
|
|
443
|
+
min_width: number;
|
|
444
|
+
scalar_operands: number[];
|
|
227
445
|
}>;
|
|
446
|
+
export type ParticleVMOperand = {
|
|
447
|
+
/**
|
|
448
|
+
* source slot, `0..2`
|
|
449
|
+
*/
|
|
450
|
+
slot: number;
|
|
451
|
+
/**
|
|
452
|
+
* a {@link VM_KIND }, never `NONE`
|
|
453
|
+
*/
|
|
454
|
+
kind: number;
|
|
455
|
+
/**
|
|
456
|
+
* the source word as encoded
|
|
457
|
+
*/
|
|
458
|
+
word: number;
|
|
459
|
+
/**
|
|
460
|
+
* how many lanes the instruction reads of it: the operation's width, or one
|
|
461
|
+
* for a slot the ISA marks scalar
|
|
462
|
+
*/
|
|
463
|
+
lanes: number;
|
|
464
|
+
/**
|
|
465
|
+
* register slots the operand reaches from its base, for a register; `0` for a
|
|
466
|
+
* literal
|
|
467
|
+
*/
|
|
468
|
+
span: number;
|
|
469
|
+
};
|
|
228
470
|
//# sourceMappingURL=ParticleVMISA.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleVMISA.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/isa/ParticleVMISA.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticleVMISA.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/isa/ParticleVMISA.js"],"names":[],"mappings":"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"}
|