@woosh/meep-engine 3.15.0 → 3.16.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 +396 -0
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
- package/editor/particles/effect/ParticleEffectDocument.js +989 -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/NodeGraphEditorView.d.ts +143 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +358 -6
- 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 +809 -76
- 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/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 +479 -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 +606 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +156 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1636 -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 +520 -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 +556 -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/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/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 +109 -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 +141 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +149 -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 +175 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +137 -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 +242 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +114 -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 +300 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +86 -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 +168 -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 +555 -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 +184 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +29 -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 +95 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +56 -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 +131 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +36 -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 +415 -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 +41 -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 +309 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +33 -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 +237 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +25 -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 +220 -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 +246 -234
- 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 +13 -5
- 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 +77 -44
- 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.d.ts +1 -0
- package/src/engine/ecs/EventType.js +35 -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 +30 -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 +54 -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 +84 -36
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +513 -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/__probe.d.ts +4 -0
- package/src/engine/ecs/transform/__probe.d.ts.map +1 -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 +33 -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/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 +71 -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 +145 -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 +234 -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 +53 -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 +310 -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 +180 -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 +29 -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 +35 -21
- 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 +2337 -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 +70 -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 +10 -6
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +32 -7
- 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 +175 -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 +197 -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 +140 -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_emulator_image.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +1 -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 +271 -112
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +251 -86
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +822 -146
- package/src/shade/renderer/particles/ParticleConstants.d.ts +96 -3
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +103 -4
- 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 +166 -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_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 +120 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +90 -1
- 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 +44 -2
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +476 -40
- 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 +464 -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 +213 -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 +75 -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 +319 -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 +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 +159 -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 +427 -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 +38 -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 +25 -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 +146 -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 +234 -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 +286 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +66 -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 +439 -0
- package/src/shade/renderer/particles/graph_particles.d.ts +143 -68
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +424 -71
- 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 +312 -0
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +41 -8
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +111 -33
- 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 +27 -15
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +139 -34
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +117 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +296 -37
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +149 -0
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_assembly.js +999 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +25 -3
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +33 -5
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +160 -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 +478 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +291 -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 +647 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +95 -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 +213 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +16 -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 +223 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +121 -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 +206 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +11 -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 +197 -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 +4 -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 +561 -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 +72 -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 +86 -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 +271 -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 +268 -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 +151 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +131 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
- package/src/shade/renderer/particles/particle_test_fixtures.js +203 -0
- package/src/shade/renderer/particles/runtime/Emitter.d.ts +219 -0
- package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +128 -60
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +286 -117
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +264 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +404 -0
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +49 -15
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +51 -18
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.js +72 -32
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +4 -4
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +4 -4
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +15 -0
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +1 -0
- 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_context.d.ts +15 -5
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +1 -1
- 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_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/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 +18 -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 +72 -37
- 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.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +78 -24
- 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/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/ParticleVMReference.d.ts +2 -2
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +100 -90
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +270 -138
- 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/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/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +66 -5
- 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 +23 -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.js +0 -19
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.js +0 -241
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.js +0 -40
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
- package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
- package/src/shade/renderer/particles/cull/chunk_particle_cull.js +0 -38
- 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.js +0 -86
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.js +0 -52
- package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run one section and return everything a program can be observed to have done.
|
|
3
|
+
*
|
|
4
|
+
* @param {object} params
|
|
5
|
+
* @param {Uint32Array} params.words
|
|
6
|
+
* @param {Float32Array|number[]} params.constants
|
|
7
|
+
* @param {number} params.register_count
|
|
8
|
+
* @param {object} params.environment one of {@link PARTICLE_ENVIRONMENTS}
|
|
9
|
+
* @returns {{ record: Uint32Array, killed: boolean, rng_state: number }}
|
|
10
|
+
*/
|
|
11
|
+
export function run_particle_section({ words, constants, register_count, environment }: {
|
|
12
|
+
words: Uint32Array;
|
|
13
|
+
constants: Float32Array | number[];
|
|
14
|
+
register_count: number;
|
|
15
|
+
environment: object;
|
|
16
|
+
}): {
|
|
17
|
+
record: Uint32Array;
|
|
18
|
+
killed: boolean;
|
|
19
|
+
rng_state: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Compare two runs. Record words are compared as raw bits first — which is the strict answer,
|
|
23
|
+
* including the sign of a zero — and only a pair that differs is re-read as floats, so a `NaN` on
|
|
24
|
+
* both sides counts as agreement whatever payload it carries.
|
|
25
|
+
*
|
|
26
|
+
* @param {{record: Uint32Array, killed: boolean, rng_state: number}} before
|
|
27
|
+
* @param {{record: Uint32Array, killed: boolean, rng_state: number}} after
|
|
28
|
+
* @param {object} [comparison]
|
|
29
|
+
* @param {number} [comparison.tolerance] relative slack on record words; zero means the bits match
|
|
30
|
+
* @param {boolean} [comparison.absorbed_zero] accept the two things `x * 0 -> +0` gives up: a `-0`
|
|
31
|
+
* that became a `+0`, and a `NaN` that became a zero. Nothing else — a number that moved is still
|
|
32
|
+
* a failure, and a zero that became a `NaN` is a failure in the direction that cannot happen.
|
|
33
|
+
* @returns {string|null} what differs, or `null` when nothing does
|
|
34
|
+
*/
|
|
35
|
+
export function diff_particle_section_result(before: {
|
|
36
|
+
record: Uint32Array;
|
|
37
|
+
killed: boolean;
|
|
38
|
+
rng_state: number;
|
|
39
|
+
}, after: {
|
|
40
|
+
record: Uint32Array;
|
|
41
|
+
killed: boolean;
|
|
42
|
+
rng_state: number;
|
|
43
|
+
}, { tolerance, absorbed_zero }?: {
|
|
44
|
+
tolerance?: number;
|
|
45
|
+
absorbed_zero?: boolean;
|
|
46
|
+
}): string | null;
|
|
47
|
+
/**
|
|
48
|
+
* Compare an optimized section against the original across every environment.
|
|
49
|
+
*
|
|
50
|
+
* The two may have different register counts and different constant pools — the optimizer shrinks
|
|
51
|
+
* one and may extend the other — so both are passed per side rather than assumed shared.
|
|
52
|
+
*
|
|
53
|
+
* @param {object} params
|
|
54
|
+
* @param {{words: Uint32Array, constants: Float32Array|number[], register_count: number}} params.before
|
|
55
|
+
* @param {{words: Uint32Array, constants: Float32Array|number[], register_count: number}} params.after
|
|
56
|
+
* @param {Array<object>} [params.environments]
|
|
57
|
+
* @param {object} [params.comparison] see {@link diff_particle_section_result}
|
|
58
|
+
* @returns {string|null} a description of the first divergence, or `null`
|
|
59
|
+
*/
|
|
60
|
+
export function diff_particle_sections({ before, after, environments, comparison }: {
|
|
61
|
+
before: {
|
|
62
|
+
words: Uint32Array;
|
|
63
|
+
constants: Float32Array | number[];
|
|
64
|
+
register_count: number;
|
|
65
|
+
};
|
|
66
|
+
after: {
|
|
67
|
+
words: Uint32Array;
|
|
68
|
+
constants: Float32Array | number[];
|
|
69
|
+
register_count: number;
|
|
70
|
+
};
|
|
71
|
+
environments?: Array<object>;
|
|
72
|
+
comparison?: object;
|
|
73
|
+
}): string | null;
|
|
74
|
+
/**
|
|
75
|
+
* Compare every section of two compiled programs.
|
|
76
|
+
*
|
|
77
|
+
* @param {ParticleProgram} before
|
|
78
|
+
* @param {ParticleProgram} after
|
|
79
|
+
* @param {object} [comparison] see {@link diff_particle_section_result}, plus `environments`
|
|
80
|
+
* @returns {string|null}
|
|
81
|
+
*/
|
|
82
|
+
export function diff_particle_programs(before: ParticleProgram, after: ParticleProgram, comparison?: object): string | null;
|
|
83
|
+
/**
|
|
84
|
+
* The contexts a program is compared in. Seeds differ so a pass that dropped or added a draw shows
|
|
85
|
+
* up as a diverging RNG state rather than only as a diverging record.
|
|
86
|
+
*
|
|
87
|
+
* @type {Array<{name: string, builtins: number[][], rng_state: number, record: () => Uint32Array}>}
|
|
88
|
+
*/
|
|
89
|
+
export const PARTICLE_ENVIRONMENTS: Array<{
|
|
90
|
+
name: string;
|
|
91
|
+
builtins: number[][];
|
|
92
|
+
rng_state: number;
|
|
93
|
+
record: () => Uint32Array;
|
|
94
|
+
}>;
|
|
95
|
+
//# sourceMappingURL=particle_program_equivalence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"particle_program_equivalence.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/particle_program_equivalence.js"],"names":[],"mappings":"AAiFA;;;;;;;;;GASG;AACH;IAN+B,KAAK,EAAzB,WAAW;IACmB,SAAS,EAAvC,YAAY,GAAC,MAAM,EAAE;IACN,cAAc,EAA7B,MAAM;IACS,WAAW,EAA1B,MAAM;;YACM,WAAW;YAAU,OAAO;eAAa,MAAM;EAgBrE;AAED;;;;;;;;;;;;;GAaG;AACH,qDATW;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,SACzD;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC;IAErC,SAAS,GAA7B,MAAM;IACe,aAAa,GAAlC,OAAO;IAGL,MAAM,GAAC,IAAI,CAqCvB;AAED;;;;;;;;;;;;GAYG;AACH;IANkG,MAAM,EAA7F;QAAC,KAAK,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,YAAY,GAAC,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC;IACS,KAAK,EAA5F;QAAC,KAAK,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,YAAY,GAAC,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC;IACvD,YAAY,GAAnC,MAAM,MAAM,CAAC;IACG,UAAU,GAA1B,MAAM;IACJ,MAAM,GAAC,IAAI,CAgBvB;AAED;;;;;;;GAOG;AACH,qGAHW,MAAM,GACJ,MAAM,GAAC,IAAI,CAmBvB;AAhJD;;;;;GAKG;AACH,oCAFU,MAAM;IAAC,MAAM,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,WAAW,CAAA;CAAC,CAAC,CAOjG"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { PARTICLE_RECORD_WORD_COUNT } from "../ParticleConstants.js";
|
|
2
|
+
import { VM_BUILTIN } from "../isa/ParticleVMISA.js";
|
|
3
|
+
import { execute_particle_vm } from "../vm/ParticleVMReference.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The property every optimizer pass is held to: an optimized program leaves the same record, the
|
|
7
|
+
* same kill flag and the same RNG state as the one it was built from — to the bit.
|
|
8
|
+
*
|
|
9
|
+
* This is a differential harness rather than a set of expected outputs because the interesting
|
|
10
|
+
* failures are not "the optimizer produced something odd", they are "the optimizer produced
|
|
11
|
+
* something plausible that computes a slightly different number". Running both programs on
|
|
12
|
+
* {@link execute_particle_vm} and comparing the whole observable state catches those without anyone
|
|
13
|
+
* having to predict them.
|
|
14
|
+
*
|
|
15
|
+
* ## Bit-identical, and the two relaxations that are named rather than tolerated
|
|
16
|
+
*
|
|
17
|
+
* Float rewrites that look obviously fine mostly are not, so the default here is that the bits
|
|
18
|
+
* match. Two rewrites deliberately do not, and each has a comparison mode that accepts EXACTLY what
|
|
19
|
+
* it gives up and nothing else — a blanket tolerance would accept those and also whatever else went
|
|
20
|
+
* wrong:
|
|
21
|
+
*
|
|
22
|
+
* - `absorbed_zero`, for `fold_constants.fold_multiply_by_zero` (on by default). Folding `x * 0` to
|
|
23
|
+
* `+0` gives up the sign of that zero, and turns a `NaN` from an upstream overflow into a zero.
|
|
24
|
+
* Those two shapes are accepted; a value that merely moved is not.
|
|
25
|
+
* - `tolerance`, for `peephole.fuse_multiply_add` (off by default), which is a rounding difference
|
|
26
|
+
* and so has no shape to name.
|
|
27
|
+
*
|
|
28
|
+
* ## Environments
|
|
29
|
+
*
|
|
30
|
+
* A program reads more than its constants — record words, builtins, the RNG, curve samples — and a
|
|
31
|
+
* pass that mishandled any of those could still agree on a single run. {@link PARTICLE_ENVIRONMENTS}
|
|
32
|
+
* varies all of them, including a record pre-filled with values a `LOAD_ATTR` can pick up.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/** Distinct, non-round values, so a builtin read from the wrong id or lane lands on a wrong number. */
|
|
36
|
+
const BUILTINS_A = [];
|
|
37
|
+
BUILTINS_A[VM_BUILTIN.DELTA_TIME] = [0.0125, 0, 0, 0];
|
|
38
|
+
BUILTINS_A[VM_BUILTIN.EMITTER_AGE] = [3.5, 0, 0, 0];
|
|
39
|
+
BUILTINS_A[VM_BUILTIN.EMITTER_POSITION] = [1.25, -2.5, 7, 1];
|
|
40
|
+
BUILTINS_A[VM_BUILTIN.EMITTER_DIRECTION] = [0.6, -0.5, -0.8, 0];
|
|
41
|
+
BUILTINS_A[VM_BUILTIN.EMITTER_UP] = [-0.25, 1, 0.375, 0];
|
|
42
|
+
BUILTINS_A[VM_BUILTIN.PARTICLE_INDEX] = [11, 0, 0, 0];
|
|
43
|
+
BUILTINS_A[VM_BUILTIN.SPAWN_FRACTION] = [0.75, 0, 0, 0];
|
|
44
|
+
BUILTINS_A[VM_BUILTIN.TIME] = [12.5, 0, 0, 0];
|
|
45
|
+
|
|
46
|
+
/** A second set, negated and shuffled, so nothing passes by holding a builtin's value constant. */
|
|
47
|
+
const BUILTINS_B = BUILTINS_A.map(v => v.map(x => -x + 0.5));
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A record with something in every user word — a program that loads an attribute the harness left
|
|
51
|
+
* at zero is a program whose loads are all interchangeable.
|
|
52
|
+
*
|
|
53
|
+
* @returns {Uint32Array}
|
|
54
|
+
*/
|
|
55
|
+
function seeded_record() {
|
|
56
|
+
const record = new Uint32Array(PARTICLE_RECORD_WORD_COUNT);
|
|
57
|
+
const floats = new Float32Array(record.buffer);
|
|
58
|
+
|
|
59
|
+
for (let i = 1; i < PARTICLE_RECORD_WORD_COUNT; i++) {
|
|
60
|
+
floats[i] = (i % 7) - 3.25 + i / 32;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return record;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** @param {number} handle @param {number} t @returns {number} */
|
|
67
|
+
const sample_curve = (handle, t) => Math.sin(handle + t * 3) * 0.5 + handle * 0.125;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The contexts a program is compared in. Seeds differ so a pass that dropped or added a draw shows
|
|
71
|
+
* up as a diverging RNG state rather than only as a diverging record.
|
|
72
|
+
*
|
|
73
|
+
* @type {Array<{name: string, builtins: number[][], rng_state: number, record: () => Uint32Array}>}
|
|
74
|
+
*/
|
|
75
|
+
export const PARTICLE_ENVIRONMENTS = [
|
|
76
|
+
{ name: "zeroed record, seed 1", builtins: BUILTINS_A, rng_state: 1, record: () => new Uint32Array(PARTICLE_RECORD_WORD_COUNT) },
|
|
77
|
+
{ name: "seeded record, seed 1", builtins: BUILTINS_A, rng_state: 1, record: seeded_record },
|
|
78
|
+
{ name: "seeded record, seed 0x9e3779b9", builtins: BUILTINS_B, rng_state: 0x9e3779b9, record: seeded_record },
|
|
79
|
+
{ name: "seeded record, seed 12345", builtins: BUILTINS_B, rng_state: 12345, record: seeded_record },
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Run one section and return everything a program can be observed to have done.
|
|
84
|
+
*
|
|
85
|
+
* @param {object} params
|
|
86
|
+
* @param {Uint32Array} params.words
|
|
87
|
+
* @param {Float32Array|number[]} params.constants
|
|
88
|
+
* @param {number} params.register_count
|
|
89
|
+
* @param {object} params.environment one of {@link PARTICLE_ENVIRONMENTS}
|
|
90
|
+
* @returns {{ record: Uint32Array, killed: boolean, rng_state: number }}
|
|
91
|
+
*/
|
|
92
|
+
export function run_particle_section({ words, constants, register_count, environment }) {
|
|
93
|
+
const record = environment.record();
|
|
94
|
+
|
|
95
|
+
const result = execute_particle_vm({
|
|
96
|
+
words,
|
|
97
|
+
constants: constants instanceof Float32Array ? constants : new Float32Array(constants),
|
|
98
|
+
register_count,
|
|
99
|
+
record,
|
|
100
|
+
builtins: environment.builtins,
|
|
101
|
+
rng_state: environment.rng_state,
|
|
102
|
+
sampleCurve: sample_curve,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
return { record, killed: result.killed, rng_state: result.rng_state };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Compare two runs. Record words are compared as raw bits first — which is the strict answer,
|
|
110
|
+
* including the sign of a zero — and only a pair that differs is re-read as floats, so a `NaN` on
|
|
111
|
+
* both sides counts as agreement whatever payload it carries.
|
|
112
|
+
*
|
|
113
|
+
* @param {{record: Uint32Array, killed: boolean, rng_state: number}} before
|
|
114
|
+
* @param {{record: Uint32Array, killed: boolean, rng_state: number}} after
|
|
115
|
+
* @param {object} [comparison]
|
|
116
|
+
* @param {number} [comparison.tolerance] relative slack on record words; zero means the bits match
|
|
117
|
+
* @param {boolean} [comparison.absorbed_zero] accept the two things `x * 0 -> +0` gives up: a `-0`
|
|
118
|
+
* that became a `+0`, and a `NaN` that became a zero. Nothing else — a number that moved is still
|
|
119
|
+
* a failure, and a zero that became a `NaN` is a failure in the direction that cannot happen.
|
|
120
|
+
* @returns {string|null} what differs, or `null` when nothing does
|
|
121
|
+
*/
|
|
122
|
+
export function diff_particle_section_result(before, after, { tolerance = 0, absorbed_zero = false } = {}) {
|
|
123
|
+
if (before.killed !== after.killed) {
|
|
124
|
+
return `kill flag: ${before.killed} -> ${after.killed}`;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (before.rng_state !== after.rng_state) {
|
|
128
|
+
return `RNG state: ${before.rng_state} -> ${after.rng_state}`;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const a = new Float32Array(before.record.buffer);
|
|
132
|
+
const b = new Float32Array(after.record.buffer);
|
|
133
|
+
|
|
134
|
+
for (let i = 0; i < before.record.length; i++) {
|
|
135
|
+
if (before.record[i] === after.record[i]) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (Number.isNaN(a[i]) && Number.isNaN(b[i])) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// `===` rather than `Object.is`, so the two zeros compare equal and nothing else does.
|
|
144
|
+
if (absorbed_zero && (a[i] === b[i] || (Number.isNaN(a[i]) && b[i] === 0))) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (tolerance > 0 && Math.abs(a[i] - b[i]) <= tolerance * Math.max(1, Math.abs(a[i]), Math.abs(b[i]))) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return `record word ${i}: ${a[i]} (0x${before.record[i].toString(16)})`
|
|
153
|
+
+ ` -> ${b[i]} (0x${after.record[i].toString(16)})`;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Compare an optimized section against the original across every environment.
|
|
161
|
+
*
|
|
162
|
+
* The two may have different register counts and different constant pools — the optimizer shrinks
|
|
163
|
+
* one and may extend the other — so both are passed per side rather than assumed shared.
|
|
164
|
+
*
|
|
165
|
+
* @param {object} params
|
|
166
|
+
* @param {{words: Uint32Array, constants: Float32Array|number[], register_count: number}} params.before
|
|
167
|
+
* @param {{words: Uint32Array, constants: Float32Array|number[], register_count: number}} params.after
|
|
168
|
+
* @param {Array<object>} [params.environments]
|
|
169
|
+
* @param {object} [params.comparison] see {@link diff_particle_section_result}
|
|
170
|
+
* @returns {string|null} a description of the first divergence, or `null`
|
|
171
|
+
*/
|
|
172
|
+
export function diff_particle_sections({ before, after, environments = PARTICLE_ENVIRONMENTS, comparison }) {
|
|
173
|
+
for (const environment of environments) {
|
|
174
|
+
const difference = diff_particle_section_result(
|
|
175
|
+
run_particle_section({ ...before, environment }),
|
|
176
|
+
run_particle_section({ ...after, environment }),
|
|
177
|
+
comparison
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
if (difference !== null) {
|
|
181
|
+
return `${environment.name}: ${difference}`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Compare every section of two compiled programs.
|
|
190
|
+
*
|
|
191
|
+
* @param {ParticleProgram} before
|
|
192
|
+
* @param {ParticleProgram} after
|
|
193
|
+
* @param {object} [comparison] see {@link diff_particle_section_result}, plus `environments`
|
|
194
|
+
* @returns {string|null}
|
|
195
|
+
*/
|
|
196
|
+
export function diff_particle_programs(before, after, comparison = {}) {
|
|
197
|
+
const { environments = PARTICLE_ENVIRONMENTS, ...rest } = comparison;
|
|
198
|
+
|
|
199
|
+
for (const section of ["init", "update"]) {
|
|
200
|
+
const difference = diff_particle_sections({
|
|
201
|
+
before: { words: before[section], constants: before.constants, register_count: before.register_count },
|
|
202
|
+
after: { words: after[section], constants: after.constants, register_count: after.register_count },
|
|
203
|
+
environments,
|
|
204
|
+
comparison: rest,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
if (difference !== null) {
|
|
208
|
+
return `${section}: ${difference}`;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** @param {number} seed @returns {function(): number} */
|
|
2
|
+
export function mulberry32(seed: number): () => number;
|
|
3
|
+
/**
|
|
4
|
+
* A random program, in the UPDATE section.
|
|
5
|
+
*
|
|
6
|
+
* @param {function(): number} rand
|
|
7
|
+
* @param {object} [options]
|
|
8
|
+
* @param {number} [options.body_length] instructions in the body, before the closing stores
|
|
9
|
+
* @param {boolean} [options.halt] place a `HALT` part-way through, so unreachable code exists
|
|
10
|
+
* @returns {ParticleProgram}
|
|
11
|
+
*/
|
|
12
|
+
export function random_particle_program(rand: () => number, { body_length, halt }?: {
|
|
13
|
+
body_length?: number;
|
|
14
|
+
halt?: boolean;
|
|
15
|
+
}): ParticleProgram;
|
|
16
|
+
//# sourceMappingURL=particle_program_fuzz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"particle_program_fuzz.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/particle_program_fuzz.js"],"names":[],"mappings":"AAoCA,yDAAyD;AACzD,iCADY,MAAM,SAA6B,MAAM,CAWpD;AAED;;;;;;;;GAQG;AACH,oDANuB,MAAM;IAED,WAAW,GAA5B,MAAM;IACY,IAAI,GAAtB,OAAO;oBAoFjB"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { PARTICLE_RECORD_WORD_COUNT, PARTICLE_VM_REGISTER_SLOTS } from "../ParticleConstants.js";
|
|
2
|
+
import { ParticleAssembler } from "../isa/ParticleAssembler.js";
|
|
3
|
+
import { VM_BUILTIN, VM_ISA, VM_OP, VM_OPERAND, pack_swizzle } from "../isa/ParticleVMISA.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Random but well-formed particle programs, for holding the optimizer to
|
|
7
|
+
* {@link ./particle_program_equivalence.js}'s bit-identity property on programs nobody wrote.
|
|
8
|
+
*
|
|
9
|
+
* The generator carves the register file into value runs of random width and draws every operand of
|
|
10
|
+
* an instruction from one width class, which is what makes the results legal: the ISA lets two
|
|
11
|
+
* operands of an instruction name the same run or disjoint ones, never a partial overlap, and runs
|
|
12
|
+
* of equal width either coincide or do not touch. `../vm/chunk_particle_vm.spec.js` fuzzes the two
|
|
13
|
+
* executors against each other the same way; the difference here is that nothing is excluded for
|
|
14
|
+
* being numerically awkward. Division by zero, `sqrt` of a negative and `log` of zero are all fair
|
|
15
|
+
* game, because both sides of this comparison are the same executor and an optimizer that turns
|
|
16
|
+
* `NaN` into a number is exactly what wants catching.
|
|
17
|
+
*
|
|
18
|
+
* The mix is deliberately biased towards what the optimizer has opinions about: constants that are
|
|
19
|
+
* 0 and 1, `SELECT`s whose condition is one of them, copies, broadcasts, and results that nothing
|
|
20
|
+
* ever stores.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/** Every opcode a generated program may contain, `HALT` aside — that one is placed by hand. */
|
|
24
|
+
const FUZZ_OPS = [
|
|
25
|
+
VM_OP.MOV, VM_OP.ADD, VM_OP.SUB, VM_OP.MUL, VM_OP.DIV, VM_OP.MAD, VM_OP.MIN, VM_OP.MAX,
|
|
26
|
+
VM_OP.MIX, VM_OP.CLAMP, VM_OP.SCALE, VM_OP.NEG, VM_OP.ABS, VM_OP.FLOOR, VM_OP.FRACT,
|
|
27
|
+
VM_OP.SQRT, VM_OP.SIN, VM_OP.COS, VM_OP.EXP, VM_OP.LOG, VM_OP.POW, VM_OP.STEP,
|
|
28
|
+
VM_OP.SMOOTHSTEP, VM_OP.DOT, VM_OP.CROSS, VM_OP.LENGTH, VM_OP.NORMALIZE, VM_OP.DISTANCE,
|
|
29
|
+
VM_OP.SWIZZLE, VM_OP.CMP_LT, VM_OP.CMP_LE, VM_OP.CMP_GT, VM_OP.CMP_GE, VM_OP.CMP_EQ,
|
|
30
|
+
VM_OP.SELECT, VM_OP.RANDOM, VM_OP.CURVE, VM_OP.LOAD_CONST, VM_OP.LOAD_ATTR, VM_OP.LOAD_BUILTIN,
|
|
31
|
+
VM_OP.NOP,
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
/** Values the folding pass has rules about, mixed in with arbitrary ones. */
|
|
35
|
+
const NOTABLE_CONSTANTS = [0, 1, -1, 0.5, 2, -0];
|
|
36
|
+
|
|
37
|
+
/** @param {number} seed @returns {function(): number} */
|
|
38
|
+
export function mulberry32(seed) {
|
|
39
|
+
let a = seed >>> 0;
|
|
40
|
+
|
|
41
|
+
return function () {
|
|
42
|
+
a |= 0;
|
|
43
|
+
a = (a + 0x6D2B79F5) | 0;
|
|
44
|
+
let t = Math.imul(a ^ (a >>> 15), 1 | a);
|
|
45
|
+
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
|
|
46
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A random program, in the UPDATE section.
|
|
52
|
+
*
|
|
53
|
+
* @param {function(): number} rand
|
|
54
|
+
* @param {object} [options]
|
|
55
|
+
* @param {number} [options.body_length] instructions in the body, before the closing stores
|
|
56
|
+
* @param {boolean} [options.halt] place a `HALT` part-way through, so unreachable code exists
|
|
57
|
+
* @returns {ParticleProgram}
|
|
58
|
+
*/
|
|
59
|
+
export function random_particle_program(rand, { body_length = 24, halt = false } = {}) {
|
|
60
|
+
const assembler = new ParticleAssembler();
|
|
61
|
+
const stream = assembler.update;
|
|
62
|
+
|
|
63
|
+
/** @type {Array<{base: number, width: number}>} the file, carved into runs */
|
|
64
|
+
const values = [];
|
|
65
|
+
|
|
66
|
+
for (let base = 0; base < PARTICLE_VM_REGISTER_SLOTS;) {
|
|
67
|
+
const width = 1 + Math.floor(rand() * 4);
|
|
68
|
+
|
|
69
|
+
if (base + width > PARTICLE_VM_REGISTER_SLOTS) {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
values.push({ base, width });
|
|
74
|
+
base += width;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** @type {Map<number, Array<{base: number, width: number}>>} */
|
|
78
|
+
const by_width = new Map();
|
|
79
|
+
|
|
80
|
+
for (const value of values) {
|
|
81
|
+
if (!by_width.has(value.width)) {
|
|
82
|
+
by_width.set(value.width, []);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
by_width.get(value.width).push(value);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const widths = Array.from(by_width.keys());
|
|
89
|
+
const pick = (list) => list[Math.floor(rand() * list.length)];
|
|
90
|
+
const constant = () => (rand() < 0.45
|
|
91
|
+
? NOTABLE_CONSTANTS[Math.floor(rand() * NOTABLE_CONSTANTS.length)]
|
|
92
|
+
: Math.round((rand() * 8 - 4) * 64) / 64);
|
|
93
|
+
|
|
94
|
+
// Seed the file, so a read is a read of something rather than of the zeroed file.
|
|
95
|
+
for (const value of values) {
|
|
96
|
+
stream.loadConst(
|
|
97
|
+
value.base,
|
|
98
|
+
assembler.constant(constant(), constant(), constant(), constant()),
|
|
99
|
+
value.width
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
for (let i = 0; i < body_length; i++) {
|
|
104
|
+
emit_random_instruction(stream, assembler, rand, { values, by_width, widths, pick, constant });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Store what the file holds, so the fuzzed results are actually observed rather than dropped by
|
|
108
|
+
// the very dead-code pass under test.
|
|
109
|
+
let cursor = 1;
|
|
110
|
+
|
|
111
|
+
for (const value of values) {
|
|
112
|
+
if (cursor + value.width > PARTICLE_RECORD_WORD_COUNT) {
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
stream.storeAttr(value.base, cursor, value.width);
|
|
117
|
+
cursor += value.width;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (rand() < 0.35) {
|
|
121
|
+
stream.kill(pick(values).base);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// A tail behind a `HALT`: more instructions, more draws and another store, none of which run.
|
|
125
|
+
// Anything the optimizer keeps here it has kept for nothing; anything it lets influence the
|
|
126
|
+
// program above is a bug the equivalence check will name.
|
|
127
|
+
if (halt) {
|
|
128
|
+
stream.halt();
|
|
129
|
+
|
|
130
|
+
for (let i = 0; i < 4; i++) {
|
|
131
|
+
emit_random_instruction(stream, assembler, rand, { values, by_width, widths, pick, constant });
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const unreachable = pick(values);
|
|
135
|
+
|
|
136
|
+
stream.storeAttr(unreachable.base, 1, unreachable.width);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return assembler.build();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* One instruction, with operands drawn from a single width class so the operand runs coincide or
|
|
144
|
+
* stay disjoint.
|
|
145
|
+
*
|
|
146
|
+
* @param {import("../isa/InstructionStream.js").InstructionStream} stream
|
|
147
|
+
* @param {ParticleAssembler} assembler
|
|
148
|
+
* @param {function(): number} rand
|
|
149
|
+
* @param {object} pool
|
|
150
|
+
*/
|
|
151
|
+
function emit_random_instruction(stream, assembler, rand, pool) {
|
|
152
|
+
const { by_width, widths, pick, constant } = pool;
|
|
153
|
+
const op = FUZZ_OPS[Math.floor(rand() * FUZZ_OPS.length)];
|
|
154
|
+
const meta = VM_ISA.get(op);
|
|
155
|
+
const candidates = widths.filter(w => w >= meta.min_width);
|
|
156
|
+
|
|
157
|
+
if (candidates.length === 0) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const width = pick(candidates);
|
|
162
|
+
const group = by_width.get(width);
|
|
163
|
+
const destination = pick(group);
|
|
164
|
+
const dst = destination.base;
|
|
165
|
+
|
|
166
|
+
switch (op) {
|
|
167
|
+
case VM_OP.NOP:
|
|
168
|
+
stream.emit(VM_OP.NOP);
|
|
169
|
+
return;
|
|
170
|
+
|
|
171
|
+
case VM_OP.RANDOM:
|
|
172
|
+
stream.random(dst, width);
|
|
173
|
+
return;
|
|
174
|
+
|
|
175
|
+
case VM_OP.LOAD_CONST:
|
|
176
|
+
stream.loadConst(dst, assembler.constant(constant(), constant(), constant(), constant()), width);
|
|
177
|
+
return;
|
|
178
|
+
|
|
179
|
+
case VM_OP.LOAD_BUILTIN:
|
|
180
|
+
stream.loadBuiltin(dst, Math.floor(rand() * Object.keys(VM_BUILTIN).length), width);
|
|
181
|
+
return;
|
|
182
|
+
|
|
183
|
+
case VM_OP.LOAD_ATTR: {
|
|
184
|
+
const components = 1 + Math.floor(rand() * 4);
|
|
185
|
+
const offset = 1 + Math.floor(rand() * (PARTICLE_RECORD_WORD_COUNT - components - 1));
|
|
186
|
+
|
|
187
|
+
stream.loadAttr(dst, offset, components, width);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
case VM_OP.CURVE:
|
|
192
|
+
stream.curve(dst, Math.floor(rand() * 4), pick(group).base, width);
|
|
193
|
+
return;
|
|
194
|
+
|
|
195
|
+
case VM_OP.SWIZZLE: {
|
|
196
|
+
const source = pick(group);
|
|
197
|
+
const lane = () => Math.floor(rand() * source.width);
|
|
198
|
+
|
|
199
|
+
stream.emit(op, dst, source.base, pack_swizzle(lane(), lane(), lane(), lane()), 0, width);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
default: {
|
|
204
|
+
// A `SELECT` whose condition is a constant is the shape the folding pass exists for, and
|
|
205
|
+
// random registers hold one about never — so it is worth steering into deliberately.
|
|
206
|
+
if (op === VM_OP.SELECT && rand() < 0.4) {
|
|
207
|
+
const condition = pick(group).base;
|
|
208
|
+
|
|
209
|
+
stream.loadConst(
|
|
210
|
+
condition,
|
|
211
|
+
assembler.constant(...Array.from({ length: 4 }, () => (rand() < 0.5 ? 0 : 1))),
|
|
212
|
+
width
|
|
213
|
+
);
|
|
214
|
+
stream.emit(op, dst, pick(group).base, pick(group).base, condition, width);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const operand = (slot) => (meta.operands[slot] === VM_OPERAND.REG ? pick(group).base : 0);
|
|
219
|
+
|
|
220
|
+
stream.emit(op, dst, operand(0), operand(1), operand(2), width);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What may be assumed about an opcode. An unknown one is assumed to do everything, so a new opcode
|
|
3
|
+
* is inert to the optimizer until somebody adds it to the table above.
|
|
4
|
+
*
|
|
5
|
+
* @param {number} op
|
|
6
|
+
* @returns {ParticleOpSemantics}
|
|
7
|
+
*/
|
|
8
|
+
export function vm_semantics_of(op: number): ParticleOpSemantics;
|
|
9
|
+
/**
|
|
10
|
+
* Which lane of a source operand feeds a given output lane.
|
|
11
|
+
*
|
|
12
|
+
* A scalar operand feeds every output lane from lane 0, a `SWIZZLE` reads the lane its pattern
|
|
13
|
+
* names, and everything lanewise reads straight across.
|
|
14
|
+
*
|
|
15
|
+
* @param {number} op
|
|
16
|
+
* @param {number} lane output lane
|
|
17
|
+
* @param {boolean} is_scalar whether the ISA marks this source slot scalar
|
|
18
|
+
* @param {number} pattern packed swizzle pattern, read only for `SWIZZLE`
|
|
19
|
+
* @returns {number} lane of the source operand read into `lane`
|
|
20
|
+
*/
|
|
21
|
+
export function vm_source_lane(op: number, lane: number, is_scalar: boolean, pattern: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Rewrite a swizzle pattern so its lanes past `width` name nothing new.
|
|
24
|
+
*
|
|
25
|
+
* A pattern's four selectors are read whatever the instruction's width, so a narrowed broadcast
|
|
26
|
+
* still reaches as far as its widest selector — {@link swizzle_span} counts all four. Pointing the
|
|
27
|
+
* unused ones at lane 0's selector shrinks the source run to what the live lanes actually read,
|
|
28
|
+
* which is what frees the slots above it.
|
|
29
|
+
*
|
|
30
|
+
* @param {number} pattern
|
|
31
|
+
* @param {number} width lanes the instruction still writes
|
|
32
|
+
* @returns {number} a pattern equivalent at that width
|
|
33
|
+
*/
|
|
34
|
+
export function vm_trim_swizzle(pattern: number, width: number): number;
|
|
35
|
+
/**
|
|
36
|
+
* How far into its source a swizzle reaches once trimmed to `width`.
|
|
37
|
+
*
|
|
38
|
+
* @param {number} pattern
|
|
39
|
+
* @param {number} width
|
|
40
|
+
* @returns {number}
|
|
41
|
+
*/
|
|
42
|
+
export function vm_trimmed_swizzle_span(pattern: number, width: number): number;
|
|
43
|
+
/**
|
|
44
|
+
* What the optimizer is allowed to assume about each opcode.
|
|
45
|
+
*
|
|
46
|
+
* {@link ../isa/ParticleVMISA.js} says what an instruction *does*; this says what may be done *to*
|
|
47
|
+
* it — whether it can be deleted when its result is unread, narrowed when its high lanes are dead,
|
|
48
|
+
* evaluated at compile time, or recognised as a recomputation of something already in a register.
|
|
49
|
+
* Those are four different questions and an opcode can answer them differently: `LOAD_ATTR` is
|
|
50
|
+
* removable but not shareable across a store, `RANDOM` is neither, and `CURVE` is both.
|
|
51
|
+
*
|
|
52
|
+
* Every opcode has to appear in {@link VM_SEMANTICS} — the spec asserts it — because the safe
|
|
53
|
+
* default for a new one is "assume nothing", and a table that silently omitted it would instead have
|
|
54
|
+
* the optimizer assume everything.
|
|
55
|
+
*/
|
|
56
|
+
/**
|
|
57
|
+
* @typedef {object} ParticleOpSemantics
|
|
58
|
+
* @property {boolean} side_effects execution changes something other than the destination register:
|
|
59
|
+
* the RNG stream, the record, the kill flag, or where the section stops. Never removable, never
|
|
60
|
+
* duplicated, never widened or narrowed.
|
|
61
|
+
* @property {boolean} lanewise output lane `i` is a function of lane `i` of every non-scalar source
|
|
62
|
+
* (and of the whole of a scalar one). The reductions and `CROSS` are not; `SWIZZLE` is lane-mapped
|
|
63
|
+
* rather than lanewise and is handled by {@link vm_source_lane}.
|
|
64
|
+
* @property {boolean} narrowable dropping trailing output lanes leaves the remaining ones unchanged.
|
|
65
|
+
* Weaker than `lanewise` — `CROSS` writes a fourth lane nothing else depends on — and not implied
|
|
66
|
+
* by it for `RANDOM`, whose lanes are independent but whose count is the draw count.
|
|
67
|
+
* @property {boolean} shareable two executions with equal operand values produce equal results, so a
|
|
68
|
+
* second one can read the first one's register instead. False for anything reading the record or
|
|
69
|
+
* the RNG.
|
|
70
|
+
* @property {boolean} broadcasts every lane of the destination holds the same value, by construction
|
|
71
|
+
* rather than by what the operands happen to be. Lane `i` is then a copy of lane 0 and may be read
|
|
72
|
+
* as one.
|
|
73
|
+
* @property {boolean} foldable the JS reference and the WGSL interpreter are both obliged to produce
|
|
74
|
+
* the *same bits* for this operation, so evaluating it here and baking a constant changes nothing
|
|
75
|
+
* on either. Correctly-rounded IEEE arithmetic qualifies; a transcendental does not — JS
|
|
76
|
+
* `Math.sin` and a GPU's `sin` agree to about a part in 10^7, which is what the parity spec's
|
|
77
|
+
* tolerance is for, and folding would quietly pick the CPU's answer for the GPU.
|
|
78
|
+
*/
|
|
79
|
+
/** @type {Map<number, ParticleOpSemantics>} */
|
|
80
|
+
export const VM_SEMANTICS: Map<number, ParticleOpSemantics>;
|
|
81
|
+
export type ParticleOpSemantics = {
|
|
82
|
+
/**
|
|
83
|
+
* execution changes something other than the destination register:
|
|
84
|
+
* the RNG stream, the record, the kill flag, or where the section stops. Never removable, never
|
|
85
|
+
* duplicated, never widened or narrowed.
|
|
86
|
+
*/
|
|
87
|
+
side_effects: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* output lane `i` is a function of lane `i` of every non-scalar source
|
|
90
|
+
* (and of the whole of a scalar one). The reductions and `CROSS` are not; `SWIZZLE` is lane-mapped
|
|
91
|
+
* rather than lanewise and is handled by {@link vm_source_lane }.
|
|
92
|
+
*/
|
|
93
|
+
lanewise: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* dropping trailing output lanes leaves the remaining ones unchanged.
|
|
96
|
+
* Weaker than `lanewise` — `CROSS` writes a fourth lane nothing else depends on — and not implied
|
|
97
|
+
* by it for `RANDOM`, whose lanes are independent but whose count is the draw count.
|
|
98
|
+
*/
|
|
99
|
+
narrowable: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* two executions with equal operand values produce equal results, so a
|
|
102
|
+
* second one can read the first one's register instead. False for anything reading the record or
|
|
103
|
+
* the RNG.
|
|
104
|
+
*/
|
|
105
|
+
shareable: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* every lane of the destination holds the same value, by construction
|
|
108
|
+
* rather than by what the operands happen to be. Lane `i` is then a copy of lane 0 and may be read
|
|
109
|
+
* as one.
|
|
110
|
+
*/
|
|
111
|
+
broadcasts: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* the JS reference and the WGSL interpreter are both obliged to produce
|
|
114
|
+
* the *same bits* for this operation, so evaluating it here and baking a constant changes nothing
|
|
115
|
+
* on either. Correctly-rounded IEEE arithmetic qualifies; a transcendental does not — JS
|
|
116
|
+
* `Math.sin` and a GPU's `sin` agree to about a part in 10^7, which is what the parity spec's
|
|
117
|
+
* tolerance is for, and folding would quietly pick the CPU's answer for the GPU.
|
|
118
|
+
*/
|
|
119
|
+
foldable: boolean;
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=particle_vm_semantics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"particle_vm_semantics.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/optimizer/particle_vm_semantics.js"],"names":[],"mappings":"AAgIA;;;;;;GAMG;AACH,oCAHW,MAAM,GACJ,mBAAmB,CAW/B;AAED;;;;;;;;;;;GAWG;AACH,mCANW,MAAM,QACN,MAAM,aACN,OAAO,WACP,MAAM,GACJ,MAAM,CAYlB;AAED;;;;;;;;;;;GAWG;AACH,yCAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAclB;AAED;;;;;;GAMG;AACH,iDAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAIlB;AA3MD;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+CAA+C;AAC/C,2BADW,IAAI,MAAM,EAAE,mBAAmB,CAAC,CACL;;;;;;;kBAvBxB,OAAO;;;;;;cAGP,OAAO;;;;;;gBAGP,OAAO;;;;;;eAGP,OAAO;;;;;;gBAGP,OAAO;;;;;;;;cAGP,OAAO"}
|