@woosh/meep-engine 3.15.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/Editor.js +7 -7
- package/editor/actions/concrete/TransformModifyAction.d.ts +4 -4
- package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
- package/editor/actions/concrete/TransformModifyAction.js +4 -4
- package/editor/camera/camera_framing.js +7 -7
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts +20 -0
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/Transform64Editor.js +70 -0
- package/editor/ecs/component/prototypeObjectEditor.js +2 -2
- package/editor/ecs/component/registerEngineComponentEditors.js +3 -3
- package/editor/particles/effect/ParticleEffectDocument.d.ts +411 -0
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
- package/editor/particles/effect/ParticleEffectDocument.js +1010 -0
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +113 -0
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -0
- package/editor/particles/effect/ParticleReferenceSimulation.js +377 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts +35 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts.map +1 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.js +45 -0
- package/editor/particles/effect/make_starter_particle_effect.d.ts +23 -0
- package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -0
- package/editor/particles/effect/make_starter_particle_effect.js +177 -0
- package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -1
- package/editor/persistence/buildNewSceneDataset.js +10 -8
- package/editor/process/symbolic/AudioEmitterSymbolicDisplay.js +67 -67
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/GridPositionSymbolicDisplay.js +6 -6
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +1 -1
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +6 -3
- package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.js +6 -6
- package/editor/selection/editor_pick.js +130 -130
- package/editor/templates/entity_templates.js +7 -7
- package/editor/tools/TransformToolV2.d.ts +3 -3
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +58 -25
- package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -1
- package/editor/tools/paint/TerrainHeightPaintTool.js +11 -9
- package/editor/tools/v2/GizmoNode.js +2 -2
- package/editor/tools/v2/TransformControls.d.ts +3 -3
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +1003 -971
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +6 -1
- package/editor/view/ecs/components/common/AutoCanvasView.js +17 -0
- 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 +201 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +602 -7
- package/editor/view/node-graph/NodeGraphMinimapView.d.ts +120 -0
- package/editor/view/node-graph/NodeGraphMinimapView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphMinimapView.js +859 -0
- package/editor/view/node-graph/NodeGraphPaletteView.d.ts +112 -0
- package/editor/view/node-graph/NodeGraphPaletteView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphPaletteView.js +352 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts +76 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.js +247 -0
- package/editor/view/node-graph/NodeGraphView.d.ts +147 -5
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +891 -82
- package/editor/view/node-graph/NodeIconView.d.ts +33 -0
- package/editor/view/node-graph/NodeIconView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeIconView.js +54 -0
- package/editor/view/node-graph/NodeView.d.ts +71 -1
- package/editor/view/node-graph/NodeView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeView.js +318 -17
- package/editor/view/node-graph/PortView.d.ts +41 -1
- package/editor/view/node-graph/PortView.d.ts.map +1 -1
- package/editor/view/node-graph/PortView.js +121 -69
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +16 -3
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +29 -3
- package/editor/view/node-graph/actions/NodeCreateAction.d.ts +65 -0
- package/editor/view/node-graph/actions/NodeCreateAction.d.ts.map +1 -0
- package/editor/view/node-graph/actions/NodeCreateAction.js +108 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +6 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/NodeDeleteAction.js +24 -2
- 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/node-graph/connection_wire_geometry.d.ts +34 -0
- package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
- package/editor/view/node-graph/connection_wire_geometry.js +79 -3
- package/editor/view/node-graph/node-graph.css +678 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts +37 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.js +480 -0
- 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/ParticleEffectEditorView.d.ts +61 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.js +223 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +25 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +632 -0
- 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 +161 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1666 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +22 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.js +553 -0
- package/editor/view/particles/effect/ParticlePreviewView.d.ts +52 -0
- package/editor/view/particles/effect/ParticlePreviewView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticlePreviewView.js +533 -0
- package/editor/view/particles/effect/particle-editor.css +644 -0
- package/editor/view/prepareMeshLibrary.d.ts.map +1 -1
- package/editor/view/prepareMeshLibrary.js +8 -4
- package/package.json +1 -1
- package/samples/engine/first-scene/main.js +152 -152
- package/samples/generation/generators/mir_generator_place_bases.js +3 -3
- package/src/core/assert.d.ts +28 -24
- package/src/core/assert.d.ts.map +1 -1
- package/src/core/assert.js +34 -26
- 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/geom/3d/shape/PosedShape3D.d.ts +17 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +34 -2
- 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/graph/format/graphviz/graphviz_escape_html_label.d.ts +17 -0
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts.map +1 -0
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.js +25 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts +16 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts.map +1 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.js +24 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +12 -0
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +21 -6
- package/src/core/model/node-graph/node/NodeDescription.d.ts +36 -0
- package/src/core/model/node-graph/node/NodeDescription.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeDescription.js +41 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts +119 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.js +317 -0
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts +4 -0
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.js +125 -22
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +91 -2
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +164 -113
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts +162 -0
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.js +288 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +133 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.js +168 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +175 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +203 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +226 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +159 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.js +436 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +93 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.js +176 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts +48 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +561 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.js +202 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.js +254 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +191 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +35 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +109 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +59 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +173 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +46 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.js +534 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts +21 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.js +49 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts +70 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_connections.js +716 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +229 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +31 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.js +249 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.js +120 -0
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +593 -586
- package/src/engine/EntityCreator.js +116 -116
- package/src/engine/achievements/AchievementManager.js +437 -437
- package/src/engine/animation/AnimatedActions.js +111 -111
- package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
- package/src/engine/animation/AnimationUtils.js +20 -8
- package/src/engine/animation/Animations.d.ts +1 -0
- package/src/engine/animation/Animations.d.ts.map +1 -1
- package/src/engine/animation/Animations.js +74 -66
- package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
- package/src/engine/animation/clip/bind_property_writer.js +12 -5
- package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts +29 -0
- package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts.map +1 -0
- package/src/engine/animation/curve/binding/BoundTransform64Writer.js +80 -0
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +4 -4
- package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +1 -1
- package/src/engine/asset/loaders/gltf_test_fixtures.js +5 -4
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +12 -12
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2045
- package/src/engine/control/first-person/abilities/LedgeGrab.js +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +5 -9
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +59 -29
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +2 -2
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +7 -7
- package/src/engine/ecs/EventType.js +10 -10
- package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.js +12 -4
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts +4 -4
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +10 -11
- package/src/engine/ecs/grid/pick.js +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +13 -13
- package/src/engine/ecs/gui/hud/testHudEdgeStick.js +3 -3
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +10 -10
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +8 -8
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +120 -97
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +16 -5
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +16 -4
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +7 -3
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +20 -16
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +18 -0
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -0
- package/src/engine/ecs/ik/ik_write_local_rotation.js +26 -0
- package/src/engine/ecs/parent/EntityNode.d.ts +24 -6
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +49 -42
- package/src/engine/ecs/parent/EntityNodeFlags.d.ts +0 -1
- package/src/engine/ecs/parent/EntityNodeFlags.js +7 -8
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +4 -4
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +5 -2
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +7 -4
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +3 -3
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +7 -7
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -316
- 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 +521 -0
- package/src/engine/ecs/transform/Transform64.d.ts +48 -11
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +54 -15
- package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts +37 -0
- package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts.map +1 -0
- package/src/engine/ecs/transform/Transform64SerializationAdapter.js +75 -0
- package/src/engine/ecs/transform/t64_allocation_probe.d.ts +31 -0
- package/src/engine/ecs/transform/t64_allocation_probe.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_allocation_probe.js +78 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts +36 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_announce_change.js +39 -0
- package/src/engine/ecs/transform/t64_equals_components.d.ts +30 -0
- package/src/engine/ecs/transform/t64_equals_components.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_equals_components.js +59 -0
- package/src/engine/ecs/transform/t64_read_rotation.d.ts +13 -0
- package/src/engine/ecs/transform/t64_read_rotation.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_rotation.js +16 -0
- package/src/engine/ecs/transform/t64_read_translation.d.ts +14 -0
- package/src/engine/ecs/transform/t64_read_translation.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_translation.js +17 -0
- 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/TransformAttachment.d.ts +5 -5
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachment.js +4 -4
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +10 -10
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +63 -20
- package/src/engine/graphics/debug/createDebugLabel.js +3 -3
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +5 -4
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +8 -3
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +6 -6
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +25 -13
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
- package/src/engine/graphics/ecs/mesh/setMesh.js +2 -2
- package/src/engine/graphics/ecs/path/entity/EntityPath.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/entity/EntityPath.js +21 -7
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts +4 -4
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.js +4 -4
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +2 -2
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +141 -135
- package/src/engine/graphics/geometry/MikkT/Build4RuleGroups.js +2 -2
- package/src/engine/graphics/geometry/MikkT/DegenEpilogue.js +1 -1
- package/src/engine/graphics/geometry/MikkT/DegenPrologue.js +1 -1
- package/src/engine/graphics/geometry/MikkT/EvalTspace.js +1 -1
- package/src/engine/graphics/geometry/MikkT/GenerateTSpaces.js +3 -3
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +659 -0
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +21 -5
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +45 -0
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +282 -60
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.js +20 -9
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts +12 -0
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassNode.js +13 -0
- package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassResources.js +5 -0
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts +19 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.js +23 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts +15 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.js +33 -16
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.js +19 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +6 -6
- package/src/engine/graphics3/CameraSystem.d.ts +6 -6
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem.js +170 -170
- package/src/engine/graphics3/DecalSystem.d.ts +6 -6
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +449 -449
- package/src/engine/graphics3/LightSystem.d.ts +6 -6
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +230 -221
- package/src/engine/graphics3/MeshSystem.d.ts +6 -6
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +43 -22
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +20 -15
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem.js +198 -184
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +6 -6
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +306 -289
- package/src/engine/graphics3/PickingSystem.d.ts +6 -6
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +273 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -6
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +174 -169
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +565 -566
- package/src/engine/graphics3/Trail3DSystem.d.ts +6 -6
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +221 -221
- package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
- package/src/engine/graphics3/camera_sync_from_transform.d.ts.map +1 -1
- package/src/engine/graphics3/camera_sync_from_transform.js +2 -1
- package/src/engine/graphics3/debug/gizmo_view_from_camera.js +4 -4
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +6 -0
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/particles/GPUParticularRenderer.js +82 -53
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts +12 -8
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
- package/src/engine/graphics3/particles/particle_gpu_records.js +53 -45
- package/src/engine/graphics3/preview/make_model_preview_scene.js +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +4 -4
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +88 -84
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +7 -7
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +8 -8
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +9 -8
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +25 -8
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -204
- package/src/engine/intelligence/behavior/util/RotationBehavior.js +5 -5
- package/src/engine/intelligence/mcts/StateNode.js +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts +7 -7
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +14 -15
- package/src/engine/interpolation/pose_interpoland.d.ts +2 -2
- package/src/engine/interpolation/pose_interpoland.js +4 -4
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +4 -4
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +39 -14
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +7 -7
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformReplicationAdapter.js +19 -20
- package/src/engine/network/replication/Replicator.d.ts +5 -3
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +65 -16
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +9 -3
- package/src/engine/physics/constraint/solve_constraints.js +10 -10
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +8 -8
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ColliderObserverSystem.js +6 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +22 -32
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +2334 -2310
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +6 -6
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +7 -7
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +16 -8
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +4 -4
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidSystem.js +6 -6
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +4 -4
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +7 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +4 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +7 -7
- package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +13 -12
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +23 -5
- package/src/engine/physics/narrowphase/compute_penetration.js +18 -14
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +2 -2
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +9 -9
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +95 -68
- package/src/engine/physics/narrowphase/refine_ray_concave.js +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -3
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +19 -7
- package/src/engine/physics/queries/raycast.js +3 -3
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +628 -620
- package/src/engine/physics/solver/solve_contacts.js +10 -10
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts +6 -5
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +10 -5
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts +16 -4
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundListenerSystem.js +68 -11
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +7 -7
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +343 -338
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +2 -2
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +356 -345
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +23 -2
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +174 -140
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +6 -6
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +185 -184
- package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +1 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts +2 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.js +4 -3
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts +3 -2
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +6 -4
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +6 -6
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +25 -6
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts +7 -7
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +6 -6
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +8 -2
- package/src/format/scene/gltf/gltf_component_type.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_component_type.js +3 -1
- package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
- package/src/format/texture/ktx2/ktx2_read.js +2 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +8 -1
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts +4 -4
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarker.js +16 -6
- package/src/generation/markers/MarkerNode.d.ts +3 -3
- package/src/generation/markers/MarkerNode.d.ts.map +1 -1
- package/src/generation/markers/MarkerNode.js +3 -3
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts +4 -4
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +7 -7
- package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionImaginary.js +20 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +13 -3
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +11 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +8 -4
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +13 -5
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +8 -2
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +16 -2
- package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/BufferResourceDescriptor.js +193 -184
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +12 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +8 -0
- package/src/shade/playground/avboit/main.js +3 -3
- package/src/shade/playground/basis_textures/main.js +1 -1
- package/src/shade/playground/ground_seam/main.js +1 -1
- package/src/shade/playground/particle_editor/README.md +216 -0
- package/src/shade/playground/particle_editor/index.html +76 -0
- package/src/shade/playground/particle_editor/main.d.ts +2 -0
- package/src/shade/playground/particle_editor/main.d.ts.map +1 -0
- package/src/shade/playground/particle_editor/main.js +139 -0
- package/src/shade/playground/particle_system/README.md +92 -62
- package/src/shade/playground/particle_system/index.html +67 -21
- package/src/shade/playground/particle_system/main.js +247 -102
- package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.d.ts +21 -18
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -0
- package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.js +196 -181
- package/src/shade/playground/particle_system/particle_scene.d.ts +136 -20
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +487 -670
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +2 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +2 -1
- package/src/shade/playground/sponza_path_trace/main.js +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +917 -917
- package/src/shade/playground/volumetrics_froxel/measure.js +559 -559
- package/src/shade/renderer/Renderer.d.ts +28 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +152 -8
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +4 -2
- package/src/shade/renderer/buffer/graph_read_buffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/graph_read_buffer.js +8 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +30 -0
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +84 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.d.ts +24 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.js +92 -0
- package/src/shade/renderer/camera/Camera.d.ts +2 -2
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- package/src/shade/renderer/camera/Camera.js +11 -5
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +2 -1
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts +3 -3
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/OrbitalCameraController.js +31 -16
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +2 -2
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +4 -3
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +10 -5
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +8 -4
- package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameContext.js +5 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts +16 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameRecord.js +31 -0
- package/src/shade/renderer/extension/GBufferTextures.d.ts +11 -0
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/GBufferTextures.js +14 -0
- package/src/shade/renderer/geometry/attribute/gpu_vertex_buffer_layout_from_spec.js +1 -1
- package/src/shade/renderer/geometry/util/geometry_stripify.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +8 -8
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +14 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +17 -9
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +11 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.js +4 -2
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +5 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +35 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +361 -117
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +266 -87
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +919 -145
- package/src/shade/renderer/particles/ParticleConstants.d.ts +134 -5
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +148 -6
- 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/coherence/graph_particle_bucket.d.ts +5 -4
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +11 -15
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +2 -2
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +20 -15
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +7 -8
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +7 -17
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +56 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +68 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +39 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +52 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +83 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -0
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts +21 -5
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/chunk_particle_emitter.js +44 -85
- 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/data/particle_header.d.ts +62 -0
- package/src/shade/renderer/particles/data/particle_header.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/particle_header.js +103 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +179 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +138 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -44
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts +283 -0
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.js +419 -0
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +33 -2
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -185
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +188 -0
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -0
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +16 -9
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +469 -205
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts +11 -0
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts +27 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +81 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +83 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts +22 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -0
- 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/particle_groups_utility.d.ts +70 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.js +161 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts +8 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +88 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +234 -0
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +98 -0
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/make_particle_group.js +409 -0
- 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_authoring.d.ts +11 -4
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +121 -108
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +58 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts +29 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +87 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.js +196 -0
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts +86 -0
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_group_json.js +182 -0
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts +33 -0
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_group_library.js +75 -0
- package/src/shade/renderer/particles/graph/particle_node_library.d.ts +37 -0
- package/src/shade/renderer/particles/graph/particle_node_library.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_library.js +64 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +186 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts +30 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +342 -0
- 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 +72 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +495 -0
- package/src/shade/renderer/particles/graph_particles.d.ts +98 -69
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +277 -81
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +107 -0
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph_particles_avboit.js +313 -0
- 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 +83 -21
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +186 -48
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +13 -10
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +30 -26
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +74 -21
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +131 -81
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +372 -22
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +694 -66
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +173 -0
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_assembly.js +1214 -0
- 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 +48 -3
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +101 -5
- 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 +199 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -0
- 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 +371 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +128 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +43 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +107 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -0
- 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 +12 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +23 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -0
- 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 +4 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -0
- 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 +4 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +151 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
- package/src/shade/renderer/particles/particle_test_fixtures.js +229 -0
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +206 -64
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +404 -83
- 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 +249 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +425 -0
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +77 -18
- 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 +9 -6
- 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_avboit_contribution.d.ts +17 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +75 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +20 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +94 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +1 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +1 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +11 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +13 -0
- 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_emitter_age.d.ts +17 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.js +22 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +14 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +23 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts +18 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.js +24 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +59 -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_avboit_draw.d.ts +14 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +153 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +124 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts +19 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +147 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +27 -8
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +43 -68
- 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_emitter_tick.d.ts +5 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +216 -0
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +7 -3
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +132 -197
- 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 +42 -56
- 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/shaders/shader_particle_spawn_commands.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.js +66 -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/sort/shader_particle_sort.d.ts +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +21 -36
- 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 +6 -3
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +285 -154
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +264 -170
- 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/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +1 -2
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +0 -3
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +3 -2
- package/src/shade/renderer/postprocess/nss/generate_NSS_WEIGHTS_ACTUAL.js +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +87 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +61 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +179 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +27 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +9 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +12 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +58 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +25 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +69 -10
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +10 -4
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +4 -39
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +7 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +16 -2
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +3 -3
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +29 -23
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.js +3 -3
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +4 -4
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts +7 -7
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +79 -71
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.js +3 -1
- 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/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts +13 -3
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.js +15 -5
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts +8 -0
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.js +15 -5
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.js +17 -7
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.js +26 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.js +26 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +8 -2
- package/src/shade/renderer/shadow/map/PointLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +7 -2
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +3 -15
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +10 -4
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +7 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +2 -2
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +3 -3
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +3 -3
- 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 +115 -15
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +35 -4
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +227 -225
- package/src/view/minimap/MinimapCanvasView.js +3 -3
- package/src/view/minimap/MinimapMarker.d.ts +45 -0
- package/src/view/minimap/MinimapMarker.d.ts.map +1 -0
- package/src/view/minimap/MinimapMarker.js +80 -0
- package/src/view/minimap/MinimapMarkerCollection.d.ts +6 -5
- package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.js +6 -6
- package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts +19 -0
- package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts.map +1 -0
- package/src/view/minimap/MinimapMarkerSerializationAdapter.js +42 -0
- package/src/view/minimap/dom/MinimapCameraView.d.ts +1 -1
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +18 -4
- package/src/view/minimap/dom/MinimapMarkerView.js +3 -3
- package/src/view/minimap/gl/MarkerGL.js +3 -3
- package/src/view/util/DomLayoutFrame.d.ts +53 -0
- package/src/view/util/DomLayoutFrame.d.ts.map +1 -0
- package/src/view/util/DomLayoutFrame.js +122 -0
- 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/BoxLayoutSpec.js +0 -19
- 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/ConnectedBoxLayouter.js +0 -241
- 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/ConnectionEndpointLayoutSpec.js +0 -40
- 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/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
- package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
- package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
- package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
- 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/cull/chunk_particle_cull.js +0 -38
- 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/data/PARTICLE_EMITTER_LAYOUT.js +0 -214
- package/src/shade/renderer/particles/particle_prototype.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -43
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.js +0 -86
- package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -115
- 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/runtime/spawn_request_encoding.js +0 -52
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -22
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
|
@@ -7,32 +7,72 @@
|
|
|
7
7
|
*
|
|
8
8
|
* ## Encoding
|
|
9
9
|
*
|
|
10
|
-
* Every instruction is
|
|
10
|
+
* Every instruction is {@link PARTICLE_VM_INSTRUCTION_WORDS} `u32` words — the size of one
|
|
11
|
+
* `vec4<u32>`, so the four loads that fetch it are one 16-byte load by the time a shader compiler is
|
|
12
|
+
* done with them:
|
|
11
13
|
*
|
|
12
|
-
* [ op
|
|
14
|
+
* [ op | width << 8 | kinds << 16 | dst << 24, s0, s1, s2 ]
|
|
13
15
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
16
|
+
* Word 0 packs the opcode (bits 0..7), the lane count the operation spans (8..10), the kind of each
|
|
17
|
+
* source (two bits per slot at 16..21) and the destination register (24..31). The other three words
|
|
18
|
+
* are the sources. Registers hold single floats, so a `vec3` value is three consecutive slots and an
|
|
19
|
+
* `ADD` with width 3 adds three lanes; widths are what stop every value costing four registers.
|
|
18
20
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
21
|
+
* ## Operands
|
|
22
|
+
*
|
|
23
|
+
* A source word means what its kind says — see {@link VM_KIND}:
|
|
24
|
+
*
|
|
25
|
+
* - `NONE`: not an operand the VM resolves — an unused slot, or a raw field the opcode reads for
|
|
26
|
+
* itself: an attribute offset, a component count, a builtin id, a curve handle, a pool index.
|
|
27
|
+
* - `REG`: a register operand. Bits 0..7 are the first slot, bits 8..15 a swizzle — see below.
|
|
28
|
+
* - `IMM`: the word IS the `f32` bit pattern of a literal, read in every lane. A scalar or a
|
|
29
|
+
* lane-uniform vector costs no register and no load; only a vector whose lanes differ still goes
|
|
30
|
+
* through the pool with `LOAD_CONST`.
|
|
31
|
+
*
|
|
32
|
+
* The kinds exist so the interpreter can resolve every source the same way, before the opcode runs
|
|
33
|
+
* and without consulting a table: it reads the kind, gathers the lanes, and the opcode body sees
|
|
34
|
+
* three four-lane values whatever they came from. A kind is encoding, not an opcode mode.
|
|
35
|
+
*
|
|
36
|
+
* ## Swizzles
|
|
37
|
+
*
|
|
38
|
+
* Every register operand carries a swizzle: four two-bit lane selectors in bits 8..15, packed as
|
|
39
|
+
* {@link pack_swizzle} packs them, and stored XOR the identity pattern `.xyzw`
|
|
40
|
+
* ({@link VM_SWIZZLE_IDENTITY}). That choice is what makes a bare slot index a register operand:
|
|
41
|
+
* with a zero swizzle byte lane `c` reads slot `base + c`, the run as it lies, and `r5.xxxx` is the
|
|
42
|
+
* same word with the selectors that name lane 0 four times. Lane `c` of an operand reads slot
|
|
43
|
+
* `base + selector[c]`, so an operand reaches as far into the file as its widest selector below the
|
|
44
|
+
* instruction's width — never further, whatever the selectors above the width say.
|
|
45
|
+
*
|
|
46
|
+
* Swizzles are why there is no `SWIZZLE` opcode and no `SCALE`: a permutation or a broadcast is a
|
|
47
|
+
* `MOV` whose source is swizzled, and a vector times a scalar is `MUL v, s.xxxx`. Both were
|
|
48
|
+
* opcodes that existed to do what an operand can now say for itself, which is the direction the
|
|
49
|
+
* ISA takes whenever it can — see {@link VM_OP} for the holes they left.
|
|
50
|
+
*
|
|
51
|
+
* ## Resolution before execution
|
|
52
|
+
*
|
|
53
|
+
* The interpreter reads every source lane before it writes any destination lane. Operands may
|
|
54
|
+
* therefore overlap the destination in any way — `MOV.2 r0, r0.yx` swaps two slots in place — and
|
|
55
|
+
* there is no aliasing rule for a program to break. The reductions write one lane whatever they
|
|
56
|
+
* read (see {@link VM_DEST}); a few opcodes fix their lane count (see {@link VM_WIDTH}).
|
|
57
|
+
*
|
|
58
|
+
* There is no control flow: conditionals are `CMP` + `SELECT` and destruction is `KILL`, which
|
|
59
|
+
* keeps the interpreter a flat `switch` inside a bounded loop.
|
|
22
60
|
*/
|
|
23
61
|
|
|
62
|
+
/** Words per instruction. Four, so an instruction is one `vec4<u32>` fetch. @type {number} */
|
|
63
|
+
export const PARTICLE_VM_INSTRUCTION_WORDS = 4;
|
|
64
|
+
|
|
24
65
|
/**
|
|
25
|
-
* Operand slot roles
|
|
66
|
+
* Operand slot roles: what an opcode reads a source slot as. Used for assembler validation,
|
|
67
|
+
* disassembly and for deriving each slot's {@link VM_KIND}.
|
|
26
68
|
* @enum {string}
|
|
27
69
|
*/
|
|
28
70
|
export const VM_OPERAND = {
|
|
29
71
|
/** unused slot (must be 0) */
|
|
30
72
|
NONE: "none",
|
|
31
|
-
/** register
|
|
73
|
+
/** a register operand — a slot with a swizzle, or a literal */
|
|
32
74
|
REG: "reg",
|
|
33
|
-
/**
|
|
34
|
-
DST: "dst",
|
|
35
|
-
/** constant-pool index */
|
|
75
|
+
/** constant-pool word index */
|
|
36
76
|
CONST: "const",
|
|
37
77
|
/** attribute word offset within the record */
|
|
38
78
|
ATTR_OFFSET: "attr_offset",
|
|
@@ -42,10 +82,6 @@ export const VM_OPERAND = {
|
|
|
42
82
|
BUILTIN: "builtin",
|
|
43
83
|
/** curve handle (row index into the animation-curve table) */
|
|
44
84
|
CURVE: "curve",
|
|
45
|
-
/** random mode (see {@link VM_RANDOM_MODE}) */
|
|
46
|
-
RANDOM_MODE: "random_mode",
|
|
47
|
-
/** packed swizzle pattern: four 2-bit lane selectors, lane i in bits `[2i, 2i+2)` */
|
|
48
|
-
SWIZZLE: "swizzle",
|
|
49
85
|
};
|
|
50
86
|
|
|
51
87
|
/**
|
|
@@ -53,11 +89,11 @@ export const VM_OPERAND = {
|
|
|
53
89
|
* @enum {number}
|
|
54
90
|
*/
|
|
55
91
|
export const VM_BUILTIN = {
|
|
56
|
-
/** simulation time-step (seconds),
|
|
92
|
+
/** simulation time-step (seconds), in `.x` */
|
|
57
93
|
DELTA_TIME: 0,
|
|
58
94
|
/**
|
|
59
|
-
* Emitter age (seconds)
|
|
60
|
-
*
|
|
95
|
+
* Emitter age (seconds): how long the emitter's table row has been running, as the emitter tick
|
|
96
|
+
* pass integrates it on the GPU (`data/PARTICLE_EMITTER_STATE.js`). Restarts with the row.
|
|
61
97
|
*/
|
|
62
98
|
EMITTER_AGE: 1,
|
|
63
99
|
/** emitter world position, `.xyz` */
|
|
@@ -75,22 +111,26 @@ export const VM_BUILTIN = {
|
|
|
75
111
|
};
|
|
76
112
|
|
|
77
113
|
/**
|
|
78
|
-
*
|
|
79
|
-
* @
|
|
114
|
+
* How many lanes each builtin fills. The lanes past that read zero when a load is wider — see
|
|
115
|
+
* `vm_load_builtin` in {@link ../vm/chunk_particle_vm.js} — so this is a builtin's type as far as
|
|
116
|
+
* a program is concerned, and it is what types a `builtin` node in a graph.
|
|
117
|
+
*
|
|
118
|
+
* @type {Object<number, number>}
|
|
80
119
|
*/
|
|
81
|
-
export const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
};
|
|
120
|
+
export const VM_BUILTIN_COMPONENTS = Object.freeze({
|
|
121
|
+
[VM_BUILTIN.DELTA_TIME]: 1,
|
|
122
|
+
[VM_BUILTIN.EMITTER_AGE]: 1,
|
|
123
|
+
[VM_BUILTIN.EMITTER_POSITION]: 3,
|
|
124
|
+
[VM_BUILTIN.EMITTER_DIRECTION]: 3,
|
|
125
|
+
[VM_BUILTIN.EMITTER_UP]: 3,
|
|
126
|
+
[VM_BUILTIN.PARTICLE_INDEX]: 1,
|
|
127
|
+
[VM_BUILTIN.SPAWN_FRACTION]: 1,
|
|
128
|
+
[VM_BUILTIN.TIME]: 1,
|
|
129
|
+
});
|
|
91
130
|
|
|
92
131
|
/**
|
|
93
|
-
* Opcodes. Numbers are stable wire values — never renumber, only append.
|
|
132
|
+
* Opcodes. Numbers are stable wire values — never renumber, only append. 19 was `SCALE` and 45 was
|
|
133
|
+
* `SWIZZLE`; both are spelled by an operand swizzle now and the numbers stay unused.
|
|
94
134
|
* @enum {number}
|
|
95
135
|
*/
|
|
96
136
|
export const VM_OP = {
|
|
@@ -112,7 +152,6 @@ export const VM_OP = {
|
|
|
112
152
|
MAX: 16,
|
|
113
153
|
MIX: 17,
|
|
114
154
|
CLAMP: 18,
|
|
115
|
-
SCALE: 19,
|
|
116
155
|
|
|
117
156
|
NEG: 20,
|
|
118
157
|
ABS: 21,
|
|
@@ -126,13 +165,17 @@ export const VM_OP = {
|
|
|
126
165
|
POW: 29,
|
|
127
166
|
STEP: 30,
|
|
128
167
|
SMOOTHSTEP: 31,
|
|
168
|
+
RSQRT: 32,
|
|
169
|
+
TAN: 33,
|
|
170
|
+
ASIN: 34,
|
|
171
|
+
ACOS: 35,
|
|
172
|
+
ATAN2: 36,
|
|
129
173
|
|
|
130
174
|
DOT: 40,
|
|
131
175
|
CROSS: 41,
|
|
132
176
|
LENGTH: 42,
|
|
133
177
|
NORMALIZE: 43,
|
|
134
178
|
DISTANCE: 44,
|
|
135
|
-
SWIZZLE: 45,
|
|
136
179
|
|
|
137
180
|
CMP_LT: 50,
|
|
138
181
|
CMP_LE: 51,
|
|
@@ -145,34 +188,436 @@ export const VM_OP = {
|
|
|
145
188
|
CURVE: 61,
|
|
146
189
|
};
|
|
147
190
|
|
|
148
|
-
|
|
191
|
+
/**
|
|
192
|
+
* How an opcode reads the instruction's width field — the lane count it operates on.
|
|
193
|
+
* @enum {string}
|
|
194
|
+
*/
|
|
195
|
+
export const VM_WIDTH = {
|
|
196
|
+
/** operates on no lanes at all (`HALT`, `NOP`) */
|
|
197
|
+
NONE: "none",
|
|
198
|
+
/** the width field gives the lane count, `1..4` */
|
|
199
|
+
VARIABLE: "variable",
|
|
200
|
+
/** always one lane, whatever the field says (`KILL`) */
|
|
201
|
+
ONE: "one",
|
|
202
|
+
/** always three lanes (`CROSS`) */
|
|
203
|
+
THREE: "three",
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* How many lanes an opcode writes to its destination, relative to the operation's width.
|
|
208
|
+
* @enum {string}
|
|
209
|
+
*/
|
|
210
|
+
export const VM_DEST = {
|
|
211
|
+
/** writes nothing (`HALT`, `NOP`, `STORE_ATTR`, `KILL`) */
|
|
212
|
+
NONE: "none",
|
|
213
|
+
/** writes as many lanes as the operation is wide */
|
|
214
|
+
WIDTH: "width",
|
|
215
|
+
/** reduces to a single lane, whatever the operation's width (`DOT`, `LENGTH`, `DISTANCE`) */
|
|
216
|
+
ONE: "one",
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Widest an operation may be. Registers hold scalars; four is what a `vec4` value needs and what a
|
|
221
|
+
* two-bit lane selector can address.
|
|
222
|
+
* @type {number}
|
|
223
|
+
*/
|
|
224
|
+
export const VM_MAX_WIDTH = 4;
|
|
225
|
+
|
|
226
|
+
// --- word 0 -----------------------------------------------------------------------------------
|
|
227
|
+
|
|
228
|
+
/** Mask selecting the opcode out of word 0. @type {number} */
|
|
229
|
+
export const VM_OP_MASK = 0xff;
|
|
230
|
+
|
|
231
|
+
/** Bit position of the width field in word 0. @type {number} */
|
|
232
|
+
export const VM_WIDTH_SHIFT = 8;
|
|
233
|
+
|
|
234
|
+
/** Mask selecting the width out of word 0, once shifted down. @type {number} */
|
|
235
|
+
export const VM_WIDTH_MASK = 0x7;
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* What a source word means. Wire values; never renumber.
|
|
239
|
+
* @enum {number}
|
|
240
|
+
*/
|
|
241
|
+
export const VM_KIND = {
|
|
242
|
+
/** not an operand: an unused slot, or a raw field the opcode reads itself */
|
|
243
|
+
NONE: 0,
|
|
244
|
+
/** a register operand: base slot in bits 0..7, swizzle in bits 8..15 */
|
|
245
|
+
REG: 1,
|
|
246
|
+
/** the `f32` bit pattern of a literal, read in every lane */
|
|
247
|
+
IMM: 2,
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Bit position of the first source's kind in word 0. Source `n` has its two kind bits at
|
|
252
|
+
* `VM_KIND_SHIFT + 2n`, so the three together are bits 16..21.
|
|
253
|
+
* @type {number}
|
|
254
|
+
*/
|
|
255
|
+
export const VM_KIND_SHIFT = 16;
|
|
256
|
+
|
|
257
|
+
/** Bits per kind field. @type {number} */
|
|
258
|
+
export const VM_KIND_BITS = 2;
|
|
259
|
+
|
|
260
|
+
/** Mask selecting one kind field, once shifted down. @type {number} */
|
|
261
|
+
export const VM_KIND_MASK = 0x3;
|
|
262
|
+
|
|
263
|
+
/** Mask selecting all three kind fields, once shifted down by {@link VM_KIND_SHIFT}. @type {number} */
|
|
264
|
+
const VM_KINDS_MASK = 0x3f;
|
|
265
|
+
|
|
266
|
+
/** Bit position of the destination register in word 0. @type {number} */
|
|
267
|
+
export const VM_DST_SHIFT = 24;
|
|
268
|
+
|
|
269
|
+
/** Mask selecting the destination register out of word 0, once shifted down. @type {number} */
|
|
270
|
+
export const VM_DST_MASK = 0xff;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Pack word 0.
|
|
274
|
+
*
|
|
275
|
+
* @param {number} op
|
|
276
|
+
* @param {number} width lane count, `0..4`
|
|
277
|
+
* @param {number} dst destination register, `0..255`
|
|
278
|
+
* @param {number} kinds the three source kinds as one field — see {@link vm_pack_kinds}
|
|
279
|
+
* @returns {number}
|
|
280
|
+
*/
|
|
281
|
+
export function vm_encode_word0(op, width, dst, kinds) {
|
|
282
|
+
return (
|
|
283
|
+
(op & VM_OP_MASK)
|
|
284
|
+
| ((width & VM_WIDTH_MASK) << VM_WIDTH_SHIFT)
|
|
285
|
+
| ((kinds & VM_KINDS_MASK) << VM_KIND_SHIFT)
|
|
286
|
+
| ((dst & VM_DST_MASK) << VM_DST_SHIFT)
|
|
287
|
+
) >>> 0;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* The three source kinds as the one field {@link vm_encode_word0} takes.
|
|
292
|
+
*
|
|
293
|
+
* @param {number} s0
|
|
294
|
+
* @param {number} s1
|
|
295
|
+
* @param {number} s2
|
|
296
|
+
* @returns {number}
|
|
297
|
+
*/
|
|
298
|
+
export function vm_pack_kinds(s0, s1, s2) {
|
|
299
|
+
return (
|
|
300
|
+
(s0 & VM_KIND_MASK)
|
|
301
|
+
| ((s1 & VM_KIND_MASK) << VM_KIND_BITS)
|
|
302
|
+
| ((s2 & VM_KIND_MASK) << (2 * VM_KIND_BITS))
|
|
303
|
+
) >>> 0;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** @param {number} word0 @returns {number} opcode */
|
|
307
|
+
export function vm_decode_op(word0) {
|
|
308
|
+
return word0 & VM_OP_MASK;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** @param {number} word0 @returns {number} lane count */
|
|
312
|
+
export function vm_decode_width(word0) {
|
|
313
|
+
return (word0 >>> VM_WIDTH_SHIFT) & VM_WIDTH_MASK;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/** @param {number} word0 @returns {number} destination register */
|
|
317
|
+
export function vm_decode_dst(word0) {
|
|
318
|
+
return (word0 >>> VM_DST_SHIFT) & VM_DST_MASK;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/** @param {number} word0 @returns {number} the three source kinds as one field */
|
|
322
|
+
export function vm_decode_kinds(word0) {
|
|
323
|
+
return (word0 >>> VM_KIND_SHIFT) & VM_KINDS_MASK;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* @param {number} word0
|
|
328
|
+
* @param {number} slot source slot, `0..2`
|
|
329
|
+
* @returns {number} a {@link VM_KIND}
|
|
330
|
+
*/
|
|
331
|
+
export function vm_decode_kind(word0, slot) {
|
|
332
|
+
return (word0 >>> (VM_KIND_SHIFT + slot * VM_KIND_BITS)) & VM_KIND_MASK;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/** @returns {number} word 0 with its width replaced */
|
|
336
|
+
export function vm_with_width(word0, width) {
|
|
337
|
+
return ((word0 & ~(VM_WIDTH_MASK << VM_WIDTH_SHIFT)) | ((width & VM_WIDTH_MASK) << VM_WIDTH_SHIFT)) >>> 0;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/** @returns {number} word 0 with its destination replaced */
|
|
341
|
+
export function vm_with_dst(word0, dst) {
|
|
342
|
+
return ((word0 & ~(VM_DST_MASK << VM_DST_SHIFT)) | ((dst & VM_DST_MASK) << VM_DST_SHIFT)) >>> 0;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/** @returns {number} word 0 with one source's kind replaced */
|
|
346
|
+
export function vm_with_kind(word0, slot, kind) {
|
|
347
|
+
const shift = VM_KIND_SHIFT + slot * VM_KIND_BITS;
|
|
348
|
+
|
|
349
|
+
return ((word0 & ~(VM_KIND_MASK << shift)) | ((kind & VM_KIND_MASK) << shift)) >>> 0;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// --- register operands ------------------------------------------------------------------------
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Pack a swizzle pattern from four lane selectors: selector `i` in bits `[2i, 2i+2)`, values
|
|
356
|
+
* 0=x, 1=y, 2=z, 3=w.
|
|
357
|
+
*
|
|
358
|
+
* @param {number} x
|
|
359
|
+
* @param {number} y
|
|
360
|
+
* @param {number} z
|
|
361
|
+
* @param {number} w
|
|
362
|
+
* @returns {number}
|
|
363
|
+
*/
|
|
364
|
+
export function pack_swizzle(x, y, z, w) {
|
|
365
|
+
return (x & 3) | ((y & 3) << 2) | ((z & 3) << 4) | ((w & 3) << 6);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* @param {number} pattern
|
|
370
|
+
* @param {number} lane
|
|
371
|
+
* @returns {number} the lane the pattern selects for output lane `lane`
|
|
372
|
+
*/
|
|
373
|
+
export function swizzle_selector(pattern, lane) {
|
|
374
|
+
return (pattern >>> (2 * lane)) & 3;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/** The pattern that reads a run as it lies: `.xyzw`. @type {number} */
|
|
378
|
+
export const VM_SWIZZLE_IDENTITY = pack_swizzle(0, 1, 2, 3);
|
|
379
|
+
|
|
380
|
+
/** The pattern that reads lane 0 in every lane: `.xxxx`. @type {number} */
|
|
381
|
+
export const VM_SWIZZLE_BROADCAST = pack_swizzle(0, 0, 0, 0);
|
|
382
|
+
|
|
383
|
+
/** Mask selecting the base slot out of a register operand word. @type {number} */
|
|
384
|
+
export const VM_OPERAND_BASE_MASK = 0xff;
|
|
385
|
+
|
|
386
|
+
/** Bit position of the swizzle byte in a register operand word. @type {number} */
|
|
387
|
+
export const VM_OPERAND_SWIZZLE_SHIFT = 8;
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* A register operand word: a base slot read through a pattern.
|
|
391
|
+
*
|
|
392
|
+
* The pattern is stored XOR {@link VM_SWIZZLE_IDENTITY}, so the identity is a zero byte and a bare
|
|
393
|
+
* slot index is the run at that slot. Nothing else about the word depends on that choice; read the
|
|
394
|
+
* pattern back with {@link vm_operand_pattern} rather than the bits.
|
|
395
|
+
*
|
|
396
|
+
* @param {number} base first register slot
|
|
397
|
+
* @param {number} [pattern] a packed swizzle; the run as it lies when left out
|
|
398
|
+
* @returns {number}
|
|
399
|
+
*/
|
|
400
|
+
export function vm_register(base, pattern = VM_SWIZZLE_IDENTITY) {
|
|
401
|
+
return ((base & VM_OPERAND_BASE_MASK) | (((pattern ^ VM_SWIZZLE_IDENTITY) & 0xff) << VM_OPERAND_SWIZZLE_SHIFT)) >>> 0;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/** @param {number} word a register operand @returns {number} its base slot */
|
|
405
|
+
export function vm_operand_base(word) {
|
|
406
|
+
return word & VM_OPERAND_BASE_MASK;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/** @param {number} word a register operand @returns {number} its swizzle, as {@link pack_swizzle} packs one */
|
|
410
|
+
export function vm_operand_pattern(word) {
|
|
411
|
+
return ((word >>> VM_OPERAND_SWIZZLE_SHIFT) & 0xff) ^ VM_SWIZZLE_IDENTITY;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* @param {number} word a register operand
|
|
416
|
+
* @param {number} lane
|
|
417
|
+
* @returns {number} the slot lane `lane` of the operand reads
|
|
418
|
+
*/
|
|
419
|
+
export function vm_operand_slot(word, lane) {
|
|
420
|
+
return vm_operand_base(word) + swizzle_selector(vm_operand_pattern(word), lane);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/** @returns {number} the operand moved to another base, keeping its swizzle */
|
|
424
|
+
export function vm_operand_with_base(word, base) {
|
|
425
|
+
return vm_register(base, vm_operand_pattern(word));
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* How far into the file a register operand reaches when `lanes` lanes of it are read: one past the
|
|
430
|
+
* widest selector among them. The selectors above `lanes` are never read and do not count.
|
|
431
|
+
*
|
|
432
|
+
* @param {number} word a register operand
|
|
433
|
+
* @param {number} lanes how many lanes the instruction reads of it
|
|
434
|
+
* @returns {number}
|
|
435
|
+
*/
|
|
436
|
+
export function vm_operand_span(word, lanes) {
|
|
437
|
+
const pattern = vm_operand_pattern(word);
|
|
438
|
+
|
|
439
|
+
let span = 1;
|
|
440
|
+
|
|
441
|
+
for (let lane = 0; lane < lanes; lane++) {
|
|
442
|
+
span = Math.max(span, swizzle_selector(pattern, lane) + 1);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
return span;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* The canonical spelling of a register operand read at `lanes` lanes: the base is the lowest slot
|
|
450
|
+
* any lane reads, and selectors above the lanes read are the identity, since they name nothing. So
|
|
451
|
+
* `r0.yz` is `r1`, `r0.zy` is `r1.yx`, and a broadcast of lane 3 is the run at lane 3 — one
|
|
452
|
+
* spelling per meaning, which is what lets two instructions be compared word for word.
|
|
453
|
+
*
|
|
454
|
+
* @param {number} word a register operand
|
|
455
|
+
* @param {number} lanes how many lanes the instruction reads of it
|
|
456
|
+
* @returns {number}
|
|
457
|
+
*/
|
|
458
|
+
export function vm_canonical_register(word, lanes) {
|
|
459
|
+
const pattern = vm_operand_pattern(word);
|
|
460
|
+
|
|
461
|
+
let lowest = lanes > 0 ? 3 : 0;
|
|
462
|
+
|
|
463
|
+
for (let lane = 0; lane < lanes; lane++) {
|
|
464
|
+
lowest = Math.min(lowest, swizzle_selector(pattern, lane));
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
let canonical = 0;
|
|
468
|
+
|
|
469
|
+
for (let lane = 0; lane < VM_MAX_WIDTH; lane++) {
|
|
470
|
+
const selector = lane < lanes ? swizzle_selector(pattern, lane) - lowest : lane;
|
|
471
|
+
|
|
472
|
+
canonical |= selector << (2 * lane);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
return vm_register(vm_operand_base(word) + lowest, canonical);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// --- immediates -------------------------------------------------------------------------------
|
|
479
|
+
|
|
480
|
+
/** Scratch for converting between a literal and its bits. */
|
|
481
|
+
const F32_SCRATCH = new Float32Array(1);
|
|
482
|
+
|
|
483
|
+
/** @type {Uint32Array} the same four bytes */
|
|
484
|
+
const U32_SCRATCH = new Uint32Array(F32_SCRATCH.buffer);
|
|
485
|
+
|
|
486
|
+
/** @param {number} value @returns {number} the `f32` bit pattern the value rounds to */
|
|
487
|
+
export function vm_f32_bits(value) {
|
|
488
|
+
F32_SCRATCH[0] = value;
|
|
489
|
+
|
|
490
|
+
return U32_SCRATCH[0];
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/** @param {number} bits @returns {number} the `f32` those bits are */
|
|
494
|
+
export function vm_f32_value(bits) {
|
|
495
|
+
U32_SCRATCH[0] = bits;
|
|
496
|
+
|
|
497
|
+
return F32_SCRATCH[0];
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* A literal source operand, as `InstructionStream.emit` takes one in a source slot.
|
|
502
|
+
*
|
|
503
|
+
* @param {number} value
|
|
504
|
+
* @returns {{kind: number, word: number}}
|
|
505
|
+
*/
|
|
506
|
+
export function vm_immediate(value) {
|
|
507
|
+
return { kind: VM_KIND.IMM, word: vm_f32_bits(value) };
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// --- the opcode table -------------------------------------------------------------------------
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Widths are read out of the opcode's metadata; see {@link VM_ISA}.
|
|
514
|
+
*
|
|
515
|
+
* @param {number} op
|
|
516
|
+
* @param {number} width the instruction's width field
|
|
517
|
+
* @returns {number} the lane count the opcode actually operates on
|
|
518
|
+
*/
|
|
519
|
+
export function vm_operation_width(op, width) {
|
|
520
|
+
const meta = VM_ISA.get(op);
|
|
521
|
+
|
|
522
|
+
if (meta === undefined) {
|
|
523
|
+
return 0;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
switch (meta.width) {
|
|
527
|
+
case VM_WIDTH.NONE: return 0;
|
|
528
|
+
case VM_WIDTH.ONE: return 1;
|
|
529
|
+
case VM_WIDTH.THREE: return 3;
|
|
530
|
+
default: return width;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* How many lanes an instruction writes to its destination register.
|
|
536
|
+
* @param {number} op
|
|
537
|
+
* @param {number} width the instruction's width field
|
|
538
|
+
* @returns {number}
|
|
539
|
+
*/
|
|
540
|
+
export function vm_dest_width(op, width) {
|
|
541
|
+
const meta = VM_ISA.get(op);
|
|
542
|
+
|
|
543
|
+
if (meta === undefined) {
|
|
544
|
+
return 0;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
switch (meta.dest) {
|
|
548
|
+
case VM_DEST.NONE: return 0;
|
|
549
|
+
case VM_DEST.ONE: return 1;
|
|
550
|
+
default: return vm_operation_width(op, width);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
149
554
|
const R = VM_OPERAND.REG;
|
|
150
555
|
const _ = VM_OPERAND.NONE;
|
|
151
556
|
|
|
152
557
|
/**
|
|
153
|
-
* Per-opcode metadata: mnemonic
|
|
558
|
+
* Per-opcode metadata: mnemonic, whether it writes a destination, and the role of each source slot.
|
|
154
559
|
*
|
|
155
560
|
* Keyed by opcode number. Used by the assembler for validation/disassembly and by the parity
|
|
156
561
|
* meta-test to enforce that every opcode is handled by both executors.
|
|
157
|
-
* @type {Map<number, {name: string, dst: boolean, operands: [string, string, string]}>}
|
|
562
|
+
* @type {Map<number, {name: string, dst: boolean, operands: [string, string, string], width: string, dest: string, default_width: number, min_width: number, scalar_operands: number[]}>}
|
|
158
563
|
*/
|
|
159
564
|
export const VM_ISA = new Map();
|
|
160
565
|
|
|
161
|
-
|
|
566
|
+
/**
|
|
567
|
+
* @param {number} op
|
|
568
|
+
* @param {string} name
|
|
569
|
+
* @param {boolean} dst whether the opcode writes a destination register
|
|
570
|
+
* @param {string} [s0]
|
|
571
|
+
* @param {string} [s1]
|
|
572
|
+
* @param {string} [s2]
|
|
573
|
+
* @param {object} [options]
|
|
574
|
+
* @param {string} [options.width] see {@link VM_WIDTH}; variable unless the opcode's lane count is fixed
|
|
575
|
+
* @param {string} [options.dest] see {@link VM_DEST}; as wide as the operation unless it reduces
|
|
576
|
+
* @param {number} [options.default_width] width the assembler uses when the text does not say
|
|
577
|
+
* @param {number} [options.min_width] narrowest the opcode is meaningful at
|
|
578
|
+
* @param {number[]} [options.scalar_operands] source slots read as a single lane whatever the width
|
|
579
|
+
*/
|
|
580
|
+
function def(op, name, dst, s0 = _, s1 = _, s2 = _, options = {}) {
|
|
162
581
|
if (VM_ISA.has(op)) {
|
|
163
582
|
throw new Error(`Duplicate opcode ${op} (${name})`);
|
|
164
583
|
}
|
|
165
|
-
|
|
584
|
+
|
|
585
|
+
const width = options.width ?? VM_WIDTH.VARIABLE;
|
|
586
|
+
const dest = dst ? (options.dest ?? VM_DEST.WIDTH) : VM_DEST.NONE;
|
|
587
|
+
|
|
588
|
+
let default_width = options.default_width ?? VM_MAX_WIDTH;
|
|
589
|
+
|
|
590
|
+
if (width === VM_WIDTH.NONE) {
|
|
591
|
+
default_width = 0;
|
|
592
|
+
} else if (width === VM_WIDTH.ONE) {
|
|
593
|
+
default_width = 1;
|
|
594
|
+
} else if (width === VM_WIDTH.THREE) {
|
|
595
|
+
default_width = 3;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
VM_ISA.set(op, {
|
|
599
|
+
name,
|
|
600
|
+
dst,
|
|
601
|
+
operands: [s0, s1, s2],
|
|
602
|
+
width,
|
|
603
|
+
dest,
|
|
604
|
+
default_width,
|
|
605
|
+
min_width: options.min_width ?? 1,
|
|
606
|
+
scalar_operands: options.scalar_operands ?? [],
|
|
607
|
+
});
|
|
166
608
|
}
|
|
167
609
|
|
|
168
|
-
def(VM_OP.HALT, "HALT", false);
|
|
169
|
-
def(VM_OP.NOP, "NOP", false);
|
|
610
|
+
def(VM_OP.HALT, "HALT", false, _, _, _, { width: VM_WIDTH.NONE });
|
|
611
|
+
def(VM_OP.NOP, "NOP", false, _, _, _, { width: VM_WIDTH.NONE });
|
|
170
612
|
def(VM_OP.MOV, "MOV", true, R);
|
|
171
613
|
def(VM_OP.LOAD_CONST, "LOAD_CONST", true, VM_OPERAND.CONST);
|
|
172
614
|
def(VM_OP.LOAD_ATTR, "LOAD_ATTR", true, VM_OPERAND.ATTR_OFFSET, VM_OPERAND.COMP);
|
|
173
|
-
|
|
615
|
+
// The value to store is an ordinary source — a register run or a literal — and the width must equal
|
|
616
|
+
// the component count, since a store cannot write lanes the value does not have.
|
|
617
|
+
def(VM_OP.STORE_ATTR, "STORE_ATTR", false, R, VM_OPERAND.ATTR_OFFSET, VM_OPERAND.COMP);
|
|
174
618
|
def(VM_OP.LOAD_BUILTIN, "LOAD_BUILTIN", true, VM_OPERAND.BUILTIN);
|
|
175
|
-
|
|
619
|
+
// The condition is one lane of an ordinary source.
|
|
620
|
+
def(VM_OP.KILL, "KILL", false, R, _, _, { width: VM_WIDTH.ONE });
|
|
176
621
|
|
|
177
622
|
def(VM_OP.ADD, "ADD", true, R, R);
|
|
178
623
|
def(VM_OP.SUB, "SUB", true, R, R);
|
|
@@ -183,7 +628,6 @@ def(VM_OP.MIN, "MIN", true, R, R);
|
|
|
183
628
|
def(VM_OP.MAX, "MAX", true, R, R);
|
|
184
629
|
def(VM_OP.MIX, "MIX", true, R, R, R);
|
|
185
630
|
def(VM_OP.CLAMP, "CLAMP", true, R, R, R);
|
|
186
|
-
def(VM_OP.SCALE, "SCALE", true, R, R);
|
|
187
631
|
|
|
188
632
|
def(VM_OP.NEG, "NEG", true, R);
|
|
189
633
|
def(VM_OP.ABS, "ABS", true, R);
|
|
@@ -197,13 +641,23 @@ def(VM_OP.LOG, "LOG", true, R);
|
|
|
197
641
|
def(VM_OP.POW, "POW", true, R, R);
|
|
198
642
|
def(VM_OP.STEP, "STEP", true, R, R);
|
|
199
643
|
def(VM_OP.SMOOTHSTEP, "SMOOTHSTEP", true, R, R, R);
|
|
644
|
+
def(VM_OP.RSQRT, "RSQRT", true, R);
|
|
645
|
+
def(VM_OP.TAN, "TAN", true, R);
|
|
646
|
+
def(VM_OP.ASIN, "ASIN", true, R);
|
|
647
|
+
def(VM_OP.ACOS, "ACOS", true, R);
|
|
648
|
+
// `atan2(y, x)`: the angle of the point, with the quadrant the signs put it in — so the first
|
|
649
|
+
// source is the one a plot puts on the vertical axis, as it is in every shading language.
|
|
650
|
+
def(VM_OP.ATAN2, "ATAN2", true, R, R);
|
|
200
651
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
def(VM_OP.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
def(VM_OP.
|
|
652
|
+
// The reductions read `width` lanes and write one. Whatever wants the result wider reads it through
|
|
653
|
+
// an `.xxxx` swizzle, which is what tracking widths is for.
|
|
654
|
+
def(VM_OP.DOT, "DOT", true, R, R, _, { dest: VM_DEST.ONE, default_width: 3 });
|
|
655
|
+
// A cross product is three lanes wide. It may be asked for a fourth, which it writes as zero, but
|
|
656
|
+
// never for fewer, so `min_width` is a floor rather than a fix.
|
|
657
|
+
def(VM_OP.CROSS, "CROSS", true, R, R, _, { default_width: 3, min_width: 3 });
|
|
658
|
+
def(VM_OP.LENGTH, "LENGTH", true, R, _, _, { dest: VM_DEST.ONE, default_width: 3 });
|
|
659
|
+
def(VM_OP.NORMALIZE, "NORMALIZE", true, R, _, _, { default_width: 3 });
|
|
660
|
+
def(VM_OP.DISTANCE, "DISTANCE", true, R, R, _, { dest: VM_DEST.ONE, default_width: 3 });
|
|
207
661
|
|
|
208
662
|
def(VM_OP.CMP_LT, "CMP_LT", true, R, R);
|
|
209
663
|
def(VM_OP.CMP_LE, "CMP_LE", true, R, R);
|
|
@@ -212,27 +666,201 @@ def(VM_OP.CMP_GE, "CMP_GE", true, R, R);
|
|
|
212
666
|
def(VM_OP.CMP_EQ, "CMP_EQ", true, R, R);
|
|
213
667
|
def(VM_OP.SELECT, "SELECT", true, R, R, R);
|
|
214
668
|
|
|
215
|
-
|
|
216
|
-
|
|
669
|
+
// One independent uniform draw in `[0, 1)` per lane, and nothing else: a shaped distribution is
|
|
670
|
+
// arithmetic a program writes over this draw — see ../graph/particle_graph_distributions.js.
|
|
671
|
+
def(VM_OP.RANDOM, "RANDOM", true);
|
|
672
|
+
// `t` is one lane; the sampled value fills the destination's width.
|
|
673
|
+
def(VM_OP.CURVE, "CURVE", true, VM_OPERAND.CURVE, R, _, { scalar_operands: [1] });
|
|
674
|
+
|
|
675
|
+
// --- packing an instruction ---------------------------------------------------------------------
|
|
217
676
|
|
|
218
677
|
/**
|
|
678
|
+
* The four words of an instruction, with every register operand in its canonical spelling.
|
|
679
|
+
*
|
|
680
|
+
* Both the assembler's `InstructionStream.emit` and the assembly parser build instructions here, so
|
|
681
|
+
* the one encoding rule that is a choice rather than a fact — how a swizzle is spelled — is made in
|
|
682
|
+
* one place: selectors above the lanes an operand is read at are the identity, and a run of
|
|
683
|
+
* consecutive selectors is the identity at a higher base. Two instructions that mean the same thing
|
|
684
|
+
* then have the same words, which is what lets the optimizer compare them.
|
|
685
|
+
*
|
|
219
686
|
* @param {number} op
|
|
220
|
-
* @
|
|
687
|
+
* @param {number} width lane count, `0..4`
|
|
688
|
+
* @param {number} dst destination register
|
|
689
|
+
* @param {number[]} kinds a {@link VM_KIND} per source slot
|
|
690
|
+
* @param {number[]} sources the three source words
|
|
691
|
+
* @returns {number[]}
|
|
221
692
|
*/
|
|
222
|
-
export function
|
|
693
|
+
export function vm_pack_instruction(op, width, dst, kinds, sources) {
|
|
223
694
|
const meta = VM_ISA.get(op);
|
|
224
|
-
|
|
695
|
+
const operation_width = vm_operation_width(op, width);
|
|
696
|
+
const words = [vm_encode_word0(op, width, dst, vm_pack_kinds(kinds[0], kinds[1], kinds[2])), 0, 0, 0];
|
|
697
|
+
|
|
698
|
+
for (let slot = 0; slot < 3; slot++) {
|
|
699
|
+
const word = sources[slot] >>> 0;
|
|
700
|
+
|
|
701
|
+
words[1 + slot] = kinds[slot] === VM_KIND.REG && meta !== undefined
|
|
702
|
+
? vm_canonical_register(word, meta.scalar_operands.includes(slot) ? 1 : operation_width)
|
|
703
|
+
: word;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
return words;
|
|
225
707
|
}
|
|
226
708
|
|
|
227
709
|
/**
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
* @param {number}
|
|
231
|
-
* @
|
|
232
|
-
* @param {number} z
|
|
233
|
-
* @param {number} w
|
|
234
|
-
* @returns {number}
|
|
710
|
+
* An encoded instruction, re-spelled canonically — what a pass wants after it has moved an operand.
|
|
711
|
+
*
|
|
712
|
+
* @param {ArrayLike<number>} words the four words of a single instruction
|
|
713
|
+
* @returns {number[]}
|
|
235
714
|
*/
|
|
236
|
-
export function
|
|
237
|
-
|
|
715
|
+
export function vm_repack_instruction(words) {
|
|
716
|
+
const word0 = words[0];
|
|
717
|
+
|
|
718
|
+
return vm_pack_instruction(
|
|
719
|
+
vm_decode_op(word0),
|
|
720
|
+
vm_decode_width(word0),
|
|
721
|
+
vm_decode_dst(word0),
|
|
722
|
+
[vm_decode_kind(word0, 0), vm_decode_kind(word0, 1), vm_decode_kind(word0, 2)],
|
|
723
|
+
[words[1], words[2], words[3]]
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
// --- reading an instruction ---------------------------------------------------------------------
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* @typedef {object} ParticleVMOperand
|
|
731
|
+
* @property {number} slot source slot, `0..2`
|
|
732
|
+
* @property {number} kind a {@link VM_KIND}, never `NONE`
|
|
733
|
+
* @property {number} word the source word as encoded
|
|
734
|
+
* @property {number} lanes how many lanes the instruction reads of it: the operation's width, or one
|
|
735
|
+
* for a slot the ISA marks scalar
|
|
736
|
+
* @property {number} span register slots the operand reaches from its base, for a register; `0` for a
|
|
737
|
+
* literal
|
|
738
|
+
*/
|
|
739
|
+
|
|
740
|
+
/**
|
|
741
|
+
* Visit every source operand of an instruction — every slot whose kind is not `NONE` — with how
|
|
742
|
+
* many lanes the opcode reads of it and how far into the file it reaches.
|
|
743
|
+
*
|
|
744
|
+
* The rules for the reach are not uniform and live here rather than in each caller: a source is
|
|
745
|
+
* read as wide as the operation runs unless the ISA marks that slot scalar, and a register operand
|
|
746
|
+
* reaches as far as its widest selector among the lanes read.
|
|
747
|
+
*
|
|
748
|
+
* @param {ArrayLike<number>} words an instruction stream
|
|
749
|
+
* @param {number} base index of the instruction's first word
|
|
750
|
+
* @param {function(ParticleVMOperand):void} visit the one object is reused between calls; copy it
|
|
751
|
+
* to keep it
|
|
752
|
+
*/
|
|
753
|
+
export function vm_visit_operands(words, base, visit) {
|
|
754
|
+
const word0 = words[base];
|
|
755
|
+
const op = vm_decode_op(word0);
|
|
756
|
+
const meta = VM_ISA.get(op);
|
|
757
|
+
|
|
758
|
+
if (meta === undefined) {
|
|
759
|
+
return;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
const operation_width = vm_operation_width(op, vm_decode_width(word0));
|
|
763
|
+
const operand = { slot: 0, kind: 0, word: 0, lanes: 0, span: 0 };
|
|
764
|
+
|
|
765
|
+
for (let slot = 0; slot < 3; slot++) {
|
|
766
|
+
const kind = vm_decode_kind(word0, slot);
|
|
767
|
+
|
|
768
|
+
if (kind === VM_KIND.NONE) {
|
|
769
|
+
continue;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
const word = words[base + 1 + slot];
|
|
773
|
+
const lanes = meta.scalar_operands.includes(slot) ? 1 : operation_width;
|
|
774
|
+
|
|
775
|
+
operand.slot = slot;
|
|
776
|
+
operand.kind = kind;
|
|
777
|
+
operand.word = word;
|
|
778
|
+
operand.lanes = lanes;
|
|
779
|
+
operand.span = kind === VM_KIND.REG ? vm_operand_span(word, lanes) : 0;
|
|
780
|
+
visit(operand);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* Visit every run of the register file an instruction touches, as the slot it starts at and how
|
|
786
|
+
* many consecutive slots it reaches: the destination as far as the opcode writes, and each register
|
|
787
|
+
* source as far as its selectors read. What anyone sizing or bounds-checking the file wants; a
|
|
788
|
+
* literal is not a run of the file and is not visited.
|
|
789
|
+
*
|
|
790
|
+
* @param {ArrayLike<number>} words an instruction stream
|
|
791
|
+
* @param {number} base index of the instruction's first word
|
|
792
|
+
* @param {function(number, number):void} visit called `(slot, span)` per run
|
|
793
|
+
*/
|
|
794
|
+
export function vm_visit_register_runs(words, base, visit) {
|
|
795
|
+
const word0 = words[base];
|
|
796
|
+
const op = vm_decode_op(word0);
|
|
797
|
+
const dest = vm_dest_width(op, vm_decode_width(word0));
|
|
798
|
+
|
|
799
|
+
if (dest > 0) {
|
|
800
|
+
visit(vm_decode_dst(word0), dest);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
vm_visit_operands(words, base, (operand) => {
|
|
804
|
+
if (operand.kind === VM_KIND.REG) {
|
|
805
|
+
visit(vm_operand_base(operand.word), operand.span);
|
|
806
|
+
}
|
|
807
|
+
});
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
/**
|
|
811
|
+
* Whether the kind bits of an instruction agree with what its opcode reads: a register-role slot
|
|
812
|
+
* carries a register or a literal, every other slot carries nothing. Both the assembler and
|
|
813
|
+
* `ParticleProgram.validate` ask here rather than each restating the rule.
|
|
814
|
+
*
|
|
815
|
+
* @param {ArrayLike<number>} words an instruction stream
|
|
816
|
+
* @param {number} base index of the instruction's first word
|
|
817
|
+
* @returns {string|null} what is wrong, or `null` when nothing is
|
|
818
|
+
*/
|
|
819
|
+
export function vm_kinds_problem(words, base) {
|
|
820
|
+
const word0 = words[base];
|
|
821
|
+
const meta = VM_ISA.get(vm_decode_op(word0));
|
|
822
|
+
|
|
823
|
+
if (meta === undefined) {
|
|
824
|
+
return null;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
for (let slot = 0; slot < 3; slot++) {
|
|
828
|
+
const kind = vm_decode_kind(word0, slot);
|
|
829
|
+
const role = meta.operands[slot];
|
|
830
|
+
|
|
831
|
+
if (kind > VM_KIND.IMM) {
|
|
832
|
+
return `s${slot} has operand kind ${kind}, which the ISA does not define`;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
if (role === VM_OPERAND.REG && kind === VM_KIND.NONE) {
|
|
836
|
+
return `s${slot} of ${meta.name} must be a register or a literal`;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
if (role !== VM_OPERAND.REG && kind !== VM_KIND.NONE) {
|
|
840
|
+
return `s${slot} of ${meta.name} is ${role === VM_OPERAND.NONE ? "unused" : `a ${role}`} and has no kind`;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
return null;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* The kinds an opcode's sources carry when every register-role slot holds a register: the default
|
|
849
|
+
* an assembler starts from, before any literal is marked.
|
|
850
|
+
*
|
|
851
|
+
* @param {number} op
|
|
852
|
+
* @returns {number} a kinds field for {@link vm_encode_word0}
|
|
853
|
+
*/
|
|
854
|
+
export function vm_register_kinds(op) {
|
|
855
|
+
const meta = VM_ISA.get(op);
|
|
856
|
+
|
|
857
|
+
if (meta === undefined) {
|
|
858
|
+
return 0;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
return vm_pack_kinds(
|
|
862
|
+
meta.operands[0] === R ? VM_KIND.REG : VM_KIND.NONE,
|
|
863
|
+
meta.operands[1] === R ? VM_KIND.REG : VM_KIND.NONE,
|
|
864
|
+
meta.operands[2] === R ? VM_KIND.REG : VM_KIND.NONE
|
|
865
|
+
);
|
|
238
866
|
}
|