super-three 0.179.0 → 0.184.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import { instanceIndex } from '../core/IndexNode.js';
|
|
3
|
+
import StackTrace from '../core/StackTrace.js';
|
|
4
|
+
import { uniform } from '../core/UniformNode.js';
|
|
2
5
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
6
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
7
|
+
import { warn, error } from '../../utils.js';
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
|
-
*
|
|
10
|
+
* Represents a compute shader node.
|
|
7
11
|
*
|
|
8
12
|
* @augments Node
|
|
9
13
|
*/
|
|
@@ -18,8 +22,8 @@ class ComputeNode extends Node {
|
|
|
18
22
|
/**
|
|
19
23
|
* Constructs a new compute node.
|
|
20
24
|
*
|
|
21
|
-
* @param {Node} computeNode -
|
|
22
|
-
* @param {Array<number>} workgroupSize -
|
|
25
|
+
* @param {Node} computeNode - The node that defines the compute shader logic.
|
|
26
|
+
* @param {Array<number>} workgroupSize - An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
|
|
23
27
|
*/
|
|
24
28
|
constructor( computeNode, workgroupSize ) {
|
|
25
29
|
|
|
@@ -35,15 +39,14 @@ class ComputeNode extends Node {
|
|
|
35
39
|
this.isComputeNode = true;
|
|
36
40
|
|
|
37
41
|
/**
|
|
38
|
-
*
|
|
42
|
+
* The node that defines the compute shader logic.
|
|
39
43
|
*
|
|
40
44
|
* @type {Node}
|
|
41
45
|
*/
|
|
42
46
|
this.computeNode = computeNode;
|
|
43
47
|
|
|
44
|
-
|
|
45
48
|
/**
|
|
46
|
-
*
|
|
49
|
+
* An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
|
|
47
50
|
*
|
|
48
51
|
* @type {Array<number>}
|
|
49
52
|
* @default [ 64 ]
|
|
@@ -51,14 +54,23 @@ class ComputeNode extends Node {
|
|
|
51
54
|
this.workgroupSize = workgroupSize;
|
|
52
55
|
|
|
53
56
|
/**
|
|
54
|
-
*
|
|
57
|
+
* The total number of threads (invocations) to execute. If it is a number, it will be used
|
|
58
|
+
* to automatically generate bounds checking against `instanceIndex`.
|
|
55
59
|
*
|
|
56
|
-
* @type {number}
|
|
60
|
+
* @type {number|Array<number>}
|
|
57
61
|
*/
|
|
58
62
|
this.count = null;
|
|
59
63
|
|
|
60
64
|
/**
|
|
61
|
-
*
|
|
65
|
+
* The dispatch size for workgroups on X, Y, and Z axes.
|
|
66
|
+
* Used directly if `count` is not provided.
|
|
67
|
+
*
|
|
68
|
+
* @type {number|Array<number>}
|
|
69
|
+
*/
|
|
70
|
+
this.dispatchSize = null;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The version of the node.
|
|
62
74
|
*
|
|
63
75
|
* @type {number}
|
|
64
76
|
*/
|
|
@@ -82,25 +94,19 @@ class ComputeNode extends Node {
|
|
|
82
94
|
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
83
95
|
|
|
84
96
|
/**
|
|
85
|
-
*
|
|
97
|
+
* A callback executed when the compute node finishes initialization.
|
|
86
98
|
*
|
|
87
99
|
* @type {?Function}
|
|
88
100
|
*/
|
|
89
101
|
this.onInitFunction = null;
|
|
90
102
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
getCount() {
|
|
102
|
-
|
|
103
|
-
return this.count;
|
|
103
|
+
/**
|
|
104
|
+
* A uniform node holding the dispatch count for bounds checking.
|
|
105
|
+
* Created automatically when `count` is a number.
|
|
106
|
+
*
|
|
107
|
+
* @type {?UniformNode}
|
|
108
|
+
*/
|
|
109
|
+
this.countNode = null;
|
|
104
110
|
|
|
105
111
|
}
|
|
106
112
|
|
|
@@ -136,16 +142,16 @@ class ComputeNode extends Node {
|
|
|
136
142
|
*/
|
|
137
143
|
label( name ) {
|
|
138
144
|
|
|
139
|
-
|
|
145
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
140
146
|
|
|
141
147
|
return this.setName( name );
|
|
142
148
|
|
|
143
149
|
}
|
|
144
150
|
|
|
145
151
|
/**
|
|
146
|
-
*
|
|
152
|
+
* Sets the callback to run during initialization.
|
|
147
153
|
*
|
|
148
|
-
* @param {Function} callback -
|
|
154
|
+
* @param {Function} callback - The callback function.
|
|
149
155
|
* @return {ComputeNode} A reference to this node.
|
|
150
156
|
*/
|
|
151
157
|
onInit( callback ) {
|
|
@@ -169,6 +175,12 @@ class ComputeNode extends Node {
|
|
|
169
175
|
|
|
170
176
|
setup( builder ) {
|
|
171
177
|
|
|
178
|
+
if ( this.count !== null && this.countNode === null ) {
|
|
179
|
+
|
|
180
|
+
this.countNode = uniform( this.count, 'uint' ).onObjectUpdate( () => this.count );
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
172
184
|
const result = this.computeNode.build( builder );
|
|
173
185
|
|
|
174
186
|
if ( result ) {
|
|
@@ -198,6 +210,16 @@ class ComputeNode extends Node {
|
|
|
198
210
|
|
|
199
211
|
}
|
|
200
212
|
|
|
213
|
+
if ( this.count !== null && builder.allowEarlyReturns === true ) {
|
|
214
|
+
|
|
215
|
+
const countSnippet = this.countNode.build( builder, 'uint' );
|
|
216
|
+
const indexSnippet = instanceIndex.build( builder, 'uint' );
|
|
217
|
+
|
|
218
|
+
builder.flow.code = `${ builder.tab }if ( ${ indexSnippet } >= ${ countSnippet } ) { return; }\n\n${ builder.flow.code }`;
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
201
223
|
} else {
|
|
202
224
|
|
|
203
225
|
const properties = builder.getNodeProperties( this );
|
|
@@ -222,15 +244,15 @@ export default ComputeNode;
|
|
|
222
244
|
*
|
|
223
245
|
* @tsl
|
|
224
246
|
* @function
|
|
225
|
-
* @param {Node} node -
|
|
226
|
-
* @param {Array<number>} [workgroupSize=[64]] -
|
|
227
|
-
* @returns {
|
|
247
|
+
* @param {Node} node - The TSL logic for the compute shader.
|
|
248
|
+
* @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
|
|
249
|
+
* @returns {ComputeNode}
|
|
228
250
|
*/
|
|
229
251
|
export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
230
252
|
|
|
231
253
|
if ( workgroupSize.length === 0 || workgroupSize.length > 3 ) {
|
|
232
254
|
|
|
233
|
-
|
|
255
|
+
error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements', new StackTrace() );
|
|
234
256
|
|
|
235
257
|
}
|
|
236
258
|
|
|
@@ -240,7 +262,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
240
262
|
|
|
241
263
|
if ( typeof val !== 'number' || val <= 0 || ! Number.isInteger( val ) ) {
|
|
242
264
|
|
|
243
|
-
|
|
265
|
+
error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer`, new StackTrace() );
|
|
244
266
|
|
|
245
267
|
}
|
|
246
268
|
|
|
@@ -252,7 +274,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
252
274
|
|
|
253
275
|
//
|
|
254
276
|
|
|
255
|
-
return
|
|
277
|
+
return new ComputeNode( nodeObject( node ), workgroupSize );
|
|
256
278
|
|
|
257
279
|
};
|
|
258
280
|
|
|
@@ -261,12 +283,28 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
|
|
|
261
283
|
*
|
|
262
284
|
* @tsl
|
|
263
285
|
* @function
|
|
264
|
-
* @param {Node} node -
|
|
265
|
-
* @param {number} count -
|
|
266
|
-
* @param {Array<number>} [workgroupSize=[64]] -
|
|
267
|
-
* @returns {
|
|
268
|
-
|
|
269
|
-
export const compute = ( node, count, workgroupSize ) =>
|
|
286
|
+
* @param {Node} node - The TSL logic for the compute shader.
|
|
287
|
+
* @param {number|Array<number>} count - The compute count or dispatch size.
|
|
288
|
+
* @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
|
|
289
|
+
* @returns {ComputeNode}
|
|
290
|
+
, */
|
|
291
|
+
export const compute = ( node, count, workgroupSize ) => {
|
|
292
|
+
|
|
293
|
+
const computeNode = computeKernel( node, workgroupSize );
|
|
294
|
+
|
|
295
|
+
if ( typeof count === 'number' ) {
|
|
296
|
+
|
|
297
|
+
computeNode.count = count;
|
|
298
|
+
|
|
299
|
+
} else {
|
|
300
|
+
|
|
301
|
+
computeNode.dispatchSize = count;
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return computeNode;
|
|
306
|
+
|
|
307
|
+
};
|
|
270
308
|
|
|
271
309
|
addMethodChaining( 'compute', compute );
|
|
272
310
|
addMethodChaining( 'computeKernel', computeKernel );
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { nodeProxyIntent } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This class represents a set of built in WGSL shader functions that sync
|
|
7
|
+
* synchronously execute an operation across a subgroup, or 'warp', of compute
|
|
8
|
+
* or fragment shader invocations within a workgroup. Typically, these functions
|
|
9
|
+
* will synchronously execute an operation using data from all active invocations
|
|
10
|
+
* within the subgroup, then broadcast that result to all active invocations. In
|
|
11
|
+
* other graphics APIs, subgroup functions are also referred to as wave intrinsics
|
|
12
|
+
* (DirectX/HLSL) or warp intrinsics (CUDA).
|
|
13
|
+
*
|
|
14
|
+
* @augments TempNode
|
|
15
|
+
*/
|
|
16
|
+
class SubgroupFunctionNode extends TempNode {
|
|
17
|
+
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'SubgroupFunctionNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new function node.
|
|
26
|
+
*
|
|
27
|
+
* @param {string} method - The subgroup/wave intrinsic method to construct.
|
|
28
|
+
* @param {Node} [aNode=null] - The method's first argument.
|
|
29
|
+
* @param {Node} [bNode=null] - The method's second argument.
|
|
30
|
+
*/
|
|
31
|
+
constructor( method, aNode = null, bNode = null ) {
|
|
32
|
+
|
|
33
|
+
super();
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The subgroup/wave intrinsic method to construct.
|
|
37
|
+
*
|
|
38
|
+
* @type {string}
|
|
39
|
+
*/
|
|
40
|
+
this.method = method;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The method's first argument.
|
|
44
|
+
*
|
|
45
|
+
* @type {Node}
|
|
46
|
+
*/
|
|
47
|
+
this.aNode = aNode;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The method's second argument.
|
|
51
|
+
*
|
|
52
|
+
* @type {Node}
|
|
53
|
+
*/
|
|
54
|
+
this.bNode = bNode;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getInputType( builder ) {
|
|
59
|
+
|
|
60
|
+
const aType = this.aNode ? this.aNode.getNodeType( builder ) : null;
|
|
61
|
+
const bType = this.bNode ? this.bNode.getNodeType( builder ) : null;
|
|
62
|
+
|
|
63
|
+
const aLen = builder.isMatrix( aType ) ? 0 : builder.getTypeLength( aType );
|
|
64
|
+
const bLen = builder.isMatrix( bType ) ? 0 : builder.getTypeLength( bType );
|
|
65
|
+
|
|
66
|
+
if ( aLen > bLen ) {
|
|
67
|
+
|
|
68
|
+
return aType;
|
|
69
|
+
|
|
70
|
+
} else {
|
|
71
|
+
|
|
72
|
+
return bType;
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
generateNodeType( builder ) {
|
|
79
|
+
|
|
80
|
+
const method = this.method;
|
|
81
|
+
|
|
82
|
+
if ( method === SubgroupFunctionNode.SUBGROUP_ELECT ) {
|
|
83
|
+
|
|
84
|
+
return 'bool';
|
|
85
|
+
|
|
86
|
+
} else if ( method === SubgroupFunctionNode.SUBGROUP_BALLOT ) {
|
|
87
|
+
|
|
88
|
+
return 'uvec4';
|
|
89
|
+
|
|
90
|
+
} else {
|
|
91
|
+
|
|
92
|
+
return this.getInputType( builder );
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
generate( builder, output ) {
|
|
99
|
+
|
|
100
|
+
const method = this.method;
|
|
101
|
+
|
|
102
|
+
const type = this.getNodeType( builder );
|
|
103
|
+
const inputType = this.getInputType( builder );
|
|
104
|
+
|
|
105
|
+
const a = this.aNode;
|
|
106
|
+
const b = this.bNode;
|
|
107
|
+
|
|
108
|
+
const params = [];
|
|
109
|
+
|
|
110
|
+
if (
|
|
111
|
+
method === SubgroupFunctionNode.SUBGROUP_BROADCAST ||
|
|
112
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE ||
|
|
113
|
+
method === SubgroupFunctionNode.QUAD_BROADCAST
|
|
114
|
+
) {
|
|
115
|
+
|
|
116
|
+
const bType = b.getNodeType( builder );
|
|
117
|
+
|
|
118
|
+
params.push(
|
|
119
|
+
a.build( builder, type ),
|
|
120
|
+
b.build( builder, bType === 'float' ? 'int' : type )
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
} else if (
|
|
124
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ||
|
|
125
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ||
|
|
126
|
+
method === SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP
|
|
127
|
+
) {
|
|
128
|
+
|
|
129
|
+
params.push(
|
|
130
|
+
a.build( builder, type ),
|
|
131
|
+
b.build( builder, 'uint' )
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
} else {
|
|
135
|
+
|
|
136
|
+
if ( a !== null ) params.push( a.build( builder, inputType ) );
|
|
137
|
+
if ( b !== null ) params.push( b.build( builder, inputType ) );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const paramsString = params.length === 0 ? '()' : `( ${params.join( ', ' )} )`;
|
|
142
|
+
|
|
143
|
+
return builder.format( `${ builder.getMethod( method, type ) }${paramsString}`, type, output );
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
serialize( data ) {
|
|
150
|
+
|
|
151
|
+
super.serialize( data );
|
|
152
|
+
|
|
153
|
+
data.method = this.method;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
deserialize( data ) {
|
|
158
|
+
|
|
159
|
+
super.deserialize( data );
|
|
160
|
+
|
|
161
|
+
this.method = data.method;
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 0 inputs
|
|
168
|
+
SubgroupFunctionNode.SUBGROUP_ELECT = 'subgroupElect';
|
|
169
|
+
|
|
170
|
+
// 1 input
|
|
171
|
+
SubgroupFunctionNode.SUBGROUP_BALLOT = 'subgroupBallot';
|
|
172
|
+
SubgroupFunctionNode.SUBGROUP_ADD = 'subgroupAdd';
|
|
173
|
+
SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD = 'subgroupInclusiveAdd';
|
|
174
|
+
SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND = 'subgroupExclusiveAdd';
|
|
175
|
+
SubgroupFunctionNode.SUBGROUP_MUL = 'subgroupMul';
|
|
176
|
+
SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL = 'subgroupInclusiveMul';
|
|
177
|
+
SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL = 'subgroupExclusiveMul';
|
|
178
|
+
SubgroupFunctionNode.SUBGROUP_AND = 'subgroupAnd';
|
|
179
|
+
SubgroupFunctionNode.SUBGROUP_OR = 'subgroupOr';
|
|
180
|
+
SubgroupFunctionNode.SUBGROUP_XOR = 'subgroupXor';
|
|
181
|
+
SubgroupFunctionNode.SUBGROUP_MIN = 'subgroupMin';
|
|
182
|
+
SubgroupFunctionNode.SUBGROUP_MAX = 'subgroupMax';
|
|
183
|
+
SubgroupFunctionNode.SUBGROUP_ALL = 'subgroupAll';
|
|
184
|
+
SubgroupFunctionNode.SUBGROUP_ANY = 'subgroupAny';
|
|
185
|
+
SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST = 'subgroupBroadcastFirst';
|
|
186
|
+
SubgroupFunctionNode.QUAD_SWAP_X = 'quadSwapX';
|
|
187
|
+
SubgroupFunctionNode.QUAD_SWAP_Y = 'quadSwapY';
|
|
188
|
+
SubgroupFunctionNode.QUAD_SWAP_DIAGONAL = 'quadSwapDiagonal';
|
|
189
|
+
|
|
190
|
+
// 2 inputs
|
|
191
|
+
SubgroupFunctionNode.SUBGROUP_BROADCAST = 'subgroupBroadcast';
|
|
192
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE = 'subgroupShuffle';
|
|
193
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR = 'subgroupShuffleXor';
|
|
194
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP = 'subgroupShuffleUp';
|
|
195
|
+
SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN = 'subgroupShuffleDown';
|
|
196
|
+
SubgroupFunctionNode.QUAD_BROADCAST = 'quadBroadcast';
|
|
197
|
+
|
|
198
|
+
export default SubgroupFunctionNode;
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Returns true if this invocation has the lowest subgroup_invocation_id
|
|
204
|
+
* among active invocations in the subgroup.
|
|
205
|
+
*
|
|
206
|
+
* @tsl
|
|
207
|
+
* @method
|
|
208
|
+
* @return {bool} The result of the computation.
|
|
209
|
+
*/
|
|
210
|
+
export const subgroupElect = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ELECT ).setParameterLength( 0 );
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Returns a set of bitfields where the bit corresponding to subgroup_invocation_id
|
|
214
|
+
* is 1 if pred is true for that active invocation and 0 otherwise.
|
|
215
|
+
*
|
|
216
|
+
* @tsl
|
|
217
|
+
* @method
|
|
218
|
+
* @param {bool} pred - A boolean that sets the bit corresponding to the invocations subgroup invocation id.
|
|
219
|
+
* @return {vec4<u32>}- A bitfield corresponding to the pred value of each subgroup invocation.
|
|
220
|
+
*/
|
|
221
|
+
export const subgroupBallot = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BALLOT ).setParameterLength( 1 );
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* A reduction that adds e among all active invocations and returns that result.
|
|
225
|
+
*
|
|
226
|
+
* @tsl
|
|
227
|
+
* @method
|
|
228
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
229
|
+
* @return {number} The accumulated result of the reduction operation.
|
|
230
|
+
*/
|
|
231
|
+
export const subgroupAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ADD ).setParameterLength( 1 );
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* An inclusive scan returning the sum of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
|
|
235
|
+
*
|
|
236
|
+
* @tsl
|
|
237
|
+
* @method
|
|
238
|
+
* @param {number} e - The value provided to the inclusive scan by the current invocation.
|
|
239
|
+
* @return {number} The accumulated result of the inclusive scan operation.
|
|
240
|
+
*/
|
|
241
|
+
export const subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD ).setParameterLength( 1 );
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* An exclusive scan that returns the sum of e for all active invocations with subgroup_invocation_id less than this invocation.
|
|
245
|
+
*
|
|
246
|
+
* @tsl
|
|
247
|
+
* @method
|
|
248
|
+
* @param {number} e - The value provided to the exclusive scan by the current invocation.
|
|
249
|
+
* @return {number} The accumulated result of the exclusive scan operation.
|
|
250
|
+
*/
|
|
251
|
+
export const subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND ).setParameterLength( 1 );
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* A reduction that multiplies e among all active invocations and returns that result.
|
|
255
|
+
*
|
|
256
|
+
* @tsl
|
|
257
|
+
* @method
|
|
258
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
259
|
+
* @return {number} The accumulated result of the reduction operation.
|
|
260
|
+
*/
|
|
261
|
+
export const subgroupMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MUL ).setParameterLength( 1 );
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* An inclusive scan returning the product of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.
|
|
265
|
+
*
|
|
266
|
+
* @tsl
|
|
267
|
+
* @method
|
|
268
|
+
* @param {number} e - The value provided to the inclusive scan by the current invocation.
|
|
269
|
+
* @return {number} The accumulated result of the inclusive scan operation.
|
|
270
|
+
*/
|
|
271
|
+
export const subgroupInclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL ).setParameterLength( 1 );
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* An exclusive scan that returns the product of e for all active invocations with subgroup_invocation_id less than this invocation.
|
|
275
|
+
*
|
|
276
|
+
* @tsl
|
|
277
|
+
* @method
|
|
278
|
+
* @param {number} e - The value provided to the exclusive scan by the current invocation.
|
|
279
|
+
* @return {number} The accumulated result of the exclusive scan operation.
|
|
280
|
+
*/
|
|
281
|
+
export const subgroupExclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL ).setParameterLength( 1 );
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* A reduction that performs a bitwise and of e among all active invocations and returns that result.
|
|
285
|
+
*
|
|
286
|
+
* @tsl
|
|
287
|
+
* @method
|
|
288
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
289
|
+
* @return {number} The result of the reduction operation.
|
|
290
|
+
*/
|
|
291
|
+
export const subgroupAnd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_AND ).setParameterLength( 1 );
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* A reduction that performs a bitwise or of e among all active invocations and returns that result.
|
|
295
|
+
*
|
|
296
|
+
* @tsl
|
|
297
|
+
* @method
|
|
298
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
299
|
+
* @return {number} The result of the reduction operation.
|
|
300
|
+
*/
|
|
301
|
+
export const subgroupOr = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_OR ).setParameterLength( 1 );
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* A reduction that performs a bitwise xor of e among all active invocations and returns that result.
|
|
305
|
+
*
|
|
306
|
+
* @tsl
|
|
307
|
+
* @method
|
|
308
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
309
|
+
* @return {number} The result of the reduction operation.
|
|
310
|
+
*/
|
|
311
|
+
export const subgroupXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_XOR ).setParameterLength( 1 );
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* A reduction that performs a min of e among all active invocations and returns that result.
|
|
315
|
+
*
|
|
316
|
+
* @tsl
|
|
317
|
+
* @method
|
|
318
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
319
|
+
* @return {number} The result of the reduction operation.
|
|
320
|
+
*/
|
|
321
|
+
export const subgroupMin = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MIN ).setParameterLength( 1 );
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* A reduction that performs a max of e among all active invocations and returns that result.
|
|
325
|
+
*
|
|
326
|
+
* @tsl
|
|
327
|
+
* @method
|
|
328
|
+
* @param {number} e - The value provided to the reduction by the current invocation.
|
|
329
|
+
* @return {number} The result of the reduction operation.
|
|
330
|
+
*/
|
|
331
|
+
export const subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MAX ).setParameterLength( 1 );
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Returns true if e is true for all active invocations in the subgroup.
|
|
335
|
+
*
|
|
336
|
+
* @tsl
|
|
337
|
+
* @method
|
|
338
|
+
* @return {bool} The result of the computation.
|
|
339
|
+
*/
|
|
340
|
+
export const subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 0 );
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Returns true if e is true for any active invocation in the subgroup
|
|
344
|
+
*
|
|
345
|
+
* @tsl
|
|
346
|
+
* @method
|
|
347
|
+
* @return {bool} The result of the computation.
|
|
348
|
+
*/
|
|
349
|
+
export const subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 0 );
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Broadcasts e from the active invocation with the lowest subgroup_invocation_id in the subgroup to all other active invocations.
|
|
353
|
+
*
|
|
354
|
+
* @tsl
|
|
355
|
+
* @method
|
|
356
|
+
* @param {number} e - The value to broadcast from the lowest subgroup invocation.
|
|
357
|
+
* @param {number} id - The subgroup invocation to broadcast from.
|
|
358
|
+
* @return {number} The broadcast value.
|
|
359
|
+
*/
|
|
360
|
+
export const subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 2 );
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Swaps e between invocations in the quad in the X direction.
|
|
364
|
+
*
|
|
365
|
+
* @tsl
|
|
366
|
+
* @method
|
|
367
|
+
* @param {number} e - The value to swap from the current invocation.
|
|
368
|
+
* @return {number} The value received from the swap operation.
|
|
369
|
+
*/
|
|
370
|
+
export const quadSwapX = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_X ).setParameterLength( 1 );
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Swaps e between invocations in the quad in the Y direction.
|
|
374
|
+
*
|
|
375
|
+
* @tsl
|
|
376
|
+
* @method
|
|
377
|
+
* @param {number} e - The value to swap from the current invocation.
|
|
378
|
+
* @return {number} The value received from the swap operation.
|
|
379
|
+
*/
|
|
380
|
+
export const quadSwapY = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_Y ).setParameterLength( 1 );
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Swaps e between invocations in the quad diagonally.
|
|
384
|
+
*
|
|
385
|
+
* @tsl
|
|
386
|
+
* @method
|
|
387
|
+
* @param {number} e - The value to swap from the current invocation.
|
|
388
|
+
* @return {number} The value received from the swap operation.
|
|
389
|
+
*/
|
|
390
|
+
export const quadSwapDiagonal = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_DIAGONAL ).setParameterLength( 1 );
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Broadcasts e from the invocation whose subgroup_invocation_id matches id, to all active invocations.
|
|
394
|
+
*
|
|
395
|
+
* @tsl
|
|
396
|
+
* @method
|
|
397
|
+
* @param {number} e - The value to broadcast from subgroup invocation 'id'.
|
|
398
|
+
* @param {number} id - The subgroup invocation to broadcast from.
|
|
399
|
+
* @return {number} The broadcast value.
|
|
400
|
+
*/
|
|
401
|
+
export const subgroupBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST ).setParameterLength( 2 );
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches id
|
|
405
|
+
*
|
|
406
|
+
* @tsl
|
|
407
|
+
* @method
|
|
408
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
409
|
+
* @param {number} id - The subgroup invocation which returns the value v.
|
|
410
|
+
* @return {number} The broadcast value.
|
|
411
|
+
*/
|
|
412
|
+
export const subgroupShuffle = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE ).setParameterLength( 2 );
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id ^ mask.
|
|
416
|
+
*
|
|
417
|
+
* @tsl
|
|
418
|
+
* @method
|
|
419
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
420
|
+
* @param {number} mask - A bitmask that determines the target invocation via a XOR operation.
|
|
421
|
+
* @return {number} The broadcast value.
|
|
422
|
+
*/
|
|
423
|
+
export const subgroupShuffleXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ).setParameterLength( 2 );
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id - delta
|
|
427
|
+
*
|
|
428
|
+
* @tsl
|
|
429
|
+
* @method
|
|
430
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
431
|
+
* @param {number} delta - A value that offsets the current in.
|
|
432
|
+
* @return {number} The broadcast value.
|
|
433
|
+
*/
|
|
434
|
+
export const subgroupShuffleUp = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP ).setParameterLength( 2 );
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id + delta
|
|
438
|
+
*
|
|
439
|
+
* @tsl
|
|
440
|
+
* @method
|
|
441
|
+
* @param {number} v - The value to return from subgroup invocation id^mask.
|
|
442
|
+
* @param {number} delta - A value that offsets the current subgroup invocation.
|
|
443
|
+
* @return {number} The broadcast value.
|
|
444
|
+
*/
|
|
445
|
+
export const subgroupShuffleDown = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ).setParameterLength( 2 );
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Broadcasts e from the quad invocation with id equal to id.
|
|
449
|
+
*
|
|
450
|
+
* @tsl
|
|
451
|
+
* @method
|
|
452
|
+
* @param {number} e - The value to broadcast.
|
|
453
|
+
* @return {number} The broadcast value.
|
|
454
|
+
*/
|
|
455
|
+
export const quadBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_BROADCAST ).setParameterLength( 1 );
|