@babylonjs/core 5.45.2 → 5.46.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/Actions/condition.js +23 -23
- package/Actions/condition.js.map +1 -1
- package/Animations/animatable.js +48 -48
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +53 -53
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +53 -53
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +36 -36
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +14 -14
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +14 -14
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +47 -47
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +11 -11
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +34 -34
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.js +15 -15
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.js +9 -9
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.js +50 -50
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.js +35 -35
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.js +14 -14
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/dataBuffer.js +6 -6
- package/Buffers/dataBuffer.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +42 -42
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +18 -18
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +178 -178
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js +176 -176
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +90 -90
- package/Cameras/camera.js.map +1 -1
- package/Cameras/flyCamera.js +82 -82
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/freeCamera.js +54 -54
- package/Cameras/freeCamera.js.map +1 -1
- package/Compute/computeShader.js +12 -12
- package/Compute/computeShader.js.map +1 -1
- package/Culling/ray.d.ts +1 -1
- package/Debug/axesViewer.js +12 -12
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/debugLayer.js +21 -21
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +20 -20
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.js +10 -10
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +81 -81
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +31 -31
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +2 -2
- package/Engines/Extensions/engine.computeShader.d.ts +3 -3
- package/Engines/Extensions/engine.multiRender.js +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Native/nativeDataStream.d.ts +1 -1
- package/Engines/Native/nativeHardwareTexture.js +3 -3
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +5 -5
- package/Engines/Native/nativePipelineContext.js +7 -7
- package/Engines/Native/nativePipelineContext.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.js +6 -6
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +4 -4
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +3 -3
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +3 -3
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -6
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +5 -5
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +11 -11
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +7 -7
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +4 -4
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +7 -7
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +9 -9
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +5 -5
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +10 -10
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +6 -6
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +3 -3
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +3 -3
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +3 -3
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/engine.js +134 -134
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +6 -6
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +25 -25
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +25 -25
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +243 -243
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +132 -132
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.js +10 -10
- package/Events/keyboardEvents.js.map +1 -1
- package/Events/pointerEvents.js +9 -9
- package/Events/pointerEvents.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.js +9 -9
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/webVRController.js +13 -13
- package/Gamepads/Controllers/webVRController.js.map +1 -1
- package/Gamepads/gamepad.js +20 -20
- package/Gamepads/gamepad.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +45 -45
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +12 -12
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +74 -74
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +34 -34
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +40 -40
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +23 -23
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +12 -12
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.js +40 -40
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +47 -47
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.js +41 -41
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +18 -18
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/textureDome.js +96 -96
- package/Helpers/textureDome.js.map +1 -1
- package/IAccessibilityTag.d.ts +2 -2
- package/Instrumentation/engineInstrumentation.js +21 -21
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +90 -90
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.js +48 -48
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +32 -32
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +26 -26
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +40 -40
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlare.js +15 -15
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +4 -4
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +18 -18
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +115 -115
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.js +31 -31
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/light.js +72 -72
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js +18 -18
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +30 -30
- package/Lights/spotLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.js +124 -124
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +8 -8
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +14 -14
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +9 -9
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +26 -26
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +34 -34
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +14 -14
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +16 -16
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +7 -7
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js +13 -13
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +30 -30
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +60 -60
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +35 -35
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +50 -50
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +5 -5
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +4 -4
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +52 -52
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js +17 -17
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +5 -5
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +209 -209
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +5 -5
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js +6 -6
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +51 -51
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.js +99 -99
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +61 -61
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/externalTexture.js +16 -16
- package/Materials/Textures/externalTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +44 -44
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +31 -31
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +73 -73
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +47 -47
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.js +6 -6
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +142 -142
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +1 -1
- package/Materials/Textures/texture.js +26 -26
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +1 -1
- package/Materials/Textures/textureSampler.js +20 -20
- package/Materials/Textures/textureSampler.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +6 -6
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +39 -39
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +40 -40
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.js +6 -6
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +9 -9
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +2 -2
- package/Materials/fresnelParameters.js +13 -13
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +5 -5
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +223 -223
- package/Materials/material.js.map +1 -1
- package/Materials/materialPluginBase.js +5 -5
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +14 -14
- package/Materials/materialPluginManager.d.ts +1 -1
- package/Materials/multiMaterial.js +16 -16
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +14 -14
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +100 -100
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js +3 -3
- package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
- package/Maths/math.functions.js +2 -0
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.path.js +11 -11
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +6 -7
- package/Maths/math.vector.js +48 -48
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +2 -2
- package/Meshes/Compression/dracoCompression.js +23 -23
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +9 -9
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/abstractMesh.js +179 -179
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +32 -32
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/goldbergMesh.d.ts +1 -1
- package/Meshes/linesMesh.js +3 -3
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +165 -165
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/polygonMesh.js +5 -5
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/subMesh.js +59 -59
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/transformNode.js +52 -52
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +12 -12
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +3 -3
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/coroutine.d.ts +5 -5
- package/Misc/deferred.js +9 -9
- package/Misc/deferred.js.map +1 -1
- package/Misc/depthReducer.js +7 -7
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +1 -1
- package/Misc/error.d.ts +1 -1
- package/Misc/fileTools.d.ts +5 -5
- package/Misc/filesInput.js +6 -6
- package/Misc/filesInput.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +9 -9
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/observable.js +12 -12
- package/Misc/observable.js.map +1 -1
- package/Misc/perfCounter.js +16 -16
- package/Misc/perfCounter.js.map +1 -1
- package/Misc/sceneOptimizer.js +76 -76
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/stringDictionary.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +67 -67
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +15 -15
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +12 -12
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +28 -28
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.js +18 -18
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/database.js +12 -12
- package/Offline/database.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +25 -25
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +20 -20
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.js +232 -232
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/cloudPoint.js +9 -9
- package/Particles/cloudPoint.js.map +1 -1
- package/Particles/gpuParticleSystem.js +123 -123
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +102 -102
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +18 -18
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.js +23 -23
- package/Particles/solidParticle.js.map +1 -1
- package/Physics/v1/physicsEngine.js +14 -14
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v1/physicsImpostor.js +149 -149
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/physicsEngine.js +14 -14
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +129 -129
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +68 -68
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +6 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +226 -225
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +10 -10
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.js +7 -7
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js +7 -7
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomEffect.js +28 -28
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +7 -7
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js +32 -32
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.js +7 -7
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js +7 -7
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +7 -7
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js +7 -7
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +7 -7
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.js +36 -36
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +7 -7
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +7 -7
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.js +7 -7
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js +7 -7
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +42 -42
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js +41 -41
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.js +15 -15
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +2 -2
- package/PostProcesses/postProcess.js +123 -123
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/refractionPostProcess.js +21 -21
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +7 -7
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +19 -19
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js +7 -7
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.js +14 -14
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.js +7 -7
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +11 -11
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +7 -7
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +36 -36
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +8 -8
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +34 -34
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +8 -8
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +19 -19
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +12 -12
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +18 -18
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +68 -68
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +29 -29
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +44 -44
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +51 -51
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +25 -25
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.js +21 -21
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js +18 -18
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +76 -76
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Sprites/sprite.js +16 -16
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.js +81 -81
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteMap.js +32 -32
- package/Sprites/spriteMap.js.map +1 -1
- package/Sprites/spriteRenderer.js +6 -6
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.js +22 -22
- package/Sprites/thinSprite.js.map +1 -1
- package/States/stencilStateComposer.js +10 -10
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +7 -7
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.d.ts +3 -3
- package/XR/features/WebXRControllerMovement.js +97 -97
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +24 -24
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js +26 -26
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.d.ts +1 -1
- package/XR/features/WebXRFeaturePointSystem.js +6 -6
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -1
- package/XR/features/WebXRHandTracking.js +95 -95
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +21 -21
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +3 -3
- package/XR/motionController/webXRMotionControllerManager.d.ts +1 -1
- package/XR/native/nativeXRFrame.js +3 -3
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +1 -1
- package/XR/webXRLayerWrapper.d.ts +2 -2
- package/XR/webXRLayerWrapper.js +17 -17
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/abstractScene.d.ts +2 -2
- package/node.d.ts +1 -1
- package/node.js +71 -71
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +777 -777
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +12 -12
- package/types.d.ts +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport type { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { WebGPUDrawContext } from \"./webgpuDrawContext\";\r\n\r\nclass WebGPUBindGroupCacheNode {\r\n public values: { [id: number]: WebGPUBindGroupCacheNode };\r\n public bindGroups: GPUBindGroup[];\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheBindGroups {\r\n public static NumBindGroupsCreatedTotal = 0;\r\n public static NumBindGroupsCreatedLastFrame = 0;\r\n public static NumBindGroupsLookupLastFrame = 0;\r\n public static NumBindGroupsNoLookupLastFrame = 0;\r\n\r\n private static _Cache: WebGPUBindGroupCacheNode = new WebGPUBindGroupCacheNode();\r\n\r\n private static _NumBindGroupsCreatedCurrentFrame = 0;\r\n private static _NumBindGroupsLookupCurrentFrame = 0;\r\n private static _NumBindGroupsNoLookupCurrentFrame = 0;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _engine: WebGPUEngine;\r\n\r\n public disabled = false;\r\n\r\n public static get Statistics() {\r\n return {\r\n totalCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedTotal,\r\n lastFrameCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame,\r\n lookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame,\r\n noLookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame,\r\n };\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler, engine: WebGPUEngine) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this._engine = engine;\r\n }\r\n\r\n public endFrame(): void {\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n /**\r\n * Cache is currently based on the uniform/storage buffers, samplers and textures used by the binding groups.\r\n * Note that all uniform buffers have an offset of 0 in Babylon and we don't have a use case where we would have the same buffer used with different capacity values:\r\n * that means we don't need to factor in the offset/size of the buffer in the cache, only the id\r\n * @param webgpuPipelineContext\r\n * @param drawContext\r\n * @param materialContext\r\n */\r\n public getBindGroups(webgpuPipelineContext: WebGPUPipelineContext, drawContext: WebGPUDrawContext, materialContext: WebGPUMaterialContext): GPUBindGroup[] {\r\n let bindGroups: GPUBindGroup[] | undefined = undefined;\r\n let node = WebGPUCacheBindGroups._Cache;\r\n\r\n const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;\r\n if (!cacheIsDisabled) {\r\n if (!drawContext.isDirty(materialContext.updateId) && !materialContext.isDirty) {\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame++;\r\n return drawContext.bindGroups!;\r\n }\r\n\r\n for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {\r\n const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;\r\n let nextNode = node.values[uboId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[uboId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {\r\n const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;\r\n let nextNode = node.values[samplerHashCode];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[samplerHashCode] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {\r\n const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;\r\n let nextNode = node.values[textureId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[textureId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n bindGroups = node.bindGroups;\r\n }\r\n\r\n drawContext.resetIsDirty(materialContext.updateId);\r\n materialContext.isDirty = false;\r\n\r\n if (bindGroups) {\r\n drawContext.bindGroups = bindGroups;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame++;\r\n return bindGroups;\r\n }\r\n\r\n bindGroups = [];\r\n drawContext.bindGroups = bindGroups;\r\n\r\n if (!cacheIsDisabled) {\r\n node.bindGroups = bindGroups;\r\n }\r\n\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal++;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame++;\r\n\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n for (let i = 0; i < webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries = webgpuPipelineContext.shaderProcessingContext.bindGroupEntries[i];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];\r\n const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];\r\n const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;\r\n\r\n if (entry.sampler) {\r\n const bindingInfo = materialContext.samplers[name];\r\n if (bindingInfo) {\r\n const sampler = bindingInfo.sampler;\r\n if (!sampler) {\r\n if (this._engine.dbgSanityChecks) {\r\n Logger.Error(\r\n `Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n }\r\n continue;\r\n }\r\n entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode);\r\n } else {\r\n Logger.Error(\r\n `Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.texture || entry.storageTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) =>\r\n key === \"texture\" ? \"<no dump>\" : value\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (\r\n this._engine.dbgSanityChecks &&\r\n (!hardwareTexture || (entry.texture && !hardwareTexture.view) || (entry.storageTexture && !hardwareTexture.viewForWriting))\r\n ) {\r\n Logger.Error(\r\n `Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting! : hardwareTexture.view!;\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.externalTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const externalTexture = (bindingInfo.texture as ExternalTexture).underlyingResource;\r\n\r\n if (this._engine.dbgSanityChecks && !externalTexture) {\r\n Logger.Error(\r\n `Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.buffer) {\r\n const dataBuffer = drawContext.buffers[name];\r\n if (dataBuffer) {\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n (entries[j].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[j].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n Logger.Error(\r\n `Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${\r\n drawContext.uniqueId\r\n }`,\r\n 50\r\n );\r\n }\r\n }\r\n }\r\n\r\n const groupLayout = bindGroupLayouts[i];\r\n bindGroups[i] = this._device.createBindGroup({\r\n layout: groupLayout,\r\n entries,\r\n });\r\n }\r\n\r\n return bindGroups;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport type { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { WebGPUDrawContext } from \"./webgpuDrawContext\";\r\n\r\nclass WebGPUBindGroupCacheNode {\r\n public values: { [id: number]: WebGPUBindGroupCacheNode };\r\n public bindGroups: GPUBindGroup[];\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheBindGroups {\r\n public static NumBindGroupsCreatedTotal = 0;\r\n public static NumBindGroupsCreatedLastFrame = 0;\r\n public static NumBindGroupsLookupLastFrame = 0;\r\n public static NumBindGroupsNoLookupLastFrame = 0;\r\n\r\n private static _Cache: WebGPUBindGroupCacheNode = new WebGPUBindGroupCacheNode();\r\n\r\n private static _NumBindGroupsCreatedCurrentFrame = 0;\r\n private static _NumBindGroupsLookupCurrentFrame = 0;\r\n private static _NumBindGroupsNoLookupCurrentFrame = 0;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _engine: WebGPUEngine;\r\n\r\n public disabled = false;\r\n\r\n public static get Statistics() {\r\n return {\r\n totalCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedTotal,\r\n lastFrameCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame,\r\n lookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame,\r\n noLookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame,\r\n };\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler, engine: WebGPUEngine) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this._engine = engine;\r\n }\r\n\r\n public endFrame(): void {\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n /**\r\n * Cache is currently based on the uniform/storage buffers, samplers and textures used by the binding groups.\r\n * Note that all uniform buffers have an offset of 0 in Babylon and we don't have a use case where we would have the same buffer used with different capacity values:\r\n * that means we don't need to factor in the offset/size of the buffer in the cache, only the id\r\n * @param webgpuPipelineContext\r\n * @param drawContext\r\n * @param materialContext\r\n */\r\n public getBindGroups(webgpuPipelineContext: WebGPUPipelineContext, drawContext: WebGPUDrawContext, materialContext: WebGPUMaterialContext): GPUBindGroup[] {\r\n let bindGroups: GPUBindGroup[] | undefined = undefined;\r\n let node = WebGPUCacheBindGroups._Cache;\r\n\r\n const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;\r\n if (!cacheIsDisabled) {\r\n if (!drawContext.isDirty(materialContext.updateId) && !materialContext.isDirty) {\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame++;\r\n return drawContext.bindGroups!;\r\n }\r\n\r\n for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {\r\n const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;\r\n let nextNode = node.values[uboId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[uboId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {\r\n const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;\r\n let nextNode = node.values[samplerHashCode];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[samplerHashCode] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {\r\n const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;\r\n let nextNode = node.values[textureId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[textureId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n bindGroups = node.bindGroups;\r\n }\r\n\r\n drawContext.resetIsDirty(materialContext.updateId);\r\n materialContext.isDirty = false;\r\n\r\n if (bindGroups) {\r\n drawContext.bindGroups = bindGroups;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame++;\r\n return bindGroups;\r\n }\r\n\r\n bindGroups = [];\r\n drawContext.bindGroups = bindGroups;\r\n\r\n if (!cacheIsDisabled) {\r\n node.bindGroups = bindGroups;\r\n }\r\n\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal++;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame++;\r\n\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n for (let i = 0; i < webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries = webgpuPipelineContext.shaderProcessingContext.bindGroupEntries[i];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];\r\n const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];\r\n const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;\r\n\r\n if (entry.sampler) {\r\n const bindingInfo = materialContext.samplers[name];\r\n if (bindingInfo) {\r\n const sampler = bindingInfo.sampler;\r\n if (!sampler) {\r\n if (this._engine.dbgSanityChecks) {\r\n Logger.Error(\r\n `Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n }\r\n continue;\r\n }\r\n entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode);\r\n } else {\r\n Logger.Error(\r\n `Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.texture || entry.storageTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) =>\r\n key === \"texture\" ? \"<no dump>\" : value\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (\r\n this._engine.dbgSanityChecks &&\r\n (!hardwareTexture || (entry.texture && !hardwareTexture.view) || (entry.storageTexture && !hardwareTexture.viewForWriting))\r\n ) {\r\n Logger.Error(\r\n `Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting! : hardwareTexture.view!;\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.externalTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const externalTexture = (bindingInfo.texture as ExternalTexture).underlyingResource;\r\n\r\n if (this._engine.dbgSanityChecks && !externalTexture) {\r\n Logger.Error(\r\n `Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.buffer) {\r\n const dataBuffer = drawContext.buffers[name];\r\n if (dataBuffer) {\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n (entries[j].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[j].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n Logger.Error(\r\n `Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${\r\n drawContext.uniqueId\r\n }`,\r\n 50\r\n );\r\n }\r\n }\r\n }\r\n\r\n const groupLayout = bindGroupLayouts[i];\r\n bindGroups[i] = this._device.createBindGroup({\r\n layout: groupLayout,\r\n entries,\r\n });\r\n }\r\n\r\n return bindGroups;\r\n }\r\n}\r\n"]}
|
|
@@ -18,11 +18,6 @@ class NodeState {
|
|
|
18
18
|
}
|
|
19
19
|
/** @internal */
|
|
20
20
|
export class WebGPUCacheRenderPipelineTree extends WebGPUCacheRenderPipeline {
|
|
21
|
-
constructor(device, emptyVertexBuffer, useTextureStage) {
|
|
22
|
-
super(device, emptyVertexBuffer, useTextureStage);
|
|
23
|
-
this._nodeStack = [];
|
|
24
|
-
this._nodeStack[0] = WebGPUCacheRenderPipelineTree._Cache;
|
|
25
|
-
}
|
|
26
21
|
static GetNodeCounts() {
|
|
27
22
|
const counts = WebGPUCacheRenderPipelineTree._Cache.count();
|
|
28
23
|
return { nodeCount: counts[0], pipelineCount: counts[1] };
|
|
@@ -44,6 +39,11 @@ export class WebGPUCacheRenderPipelineTree extends WebGPUCacheRenderPipeline {
|
|
|
44
39
|
WebGPUCacheRenderPipelineTree._GetPipelines(WebGPUCacheRenderPipelineTree._Cache, pipelines, [], 0);
|
|
45
40
|
return pipelines;
|
|
46
41
|
}
|
|
42
|
+
constructor(device, emptyVertexBuffer, useTextureStage) {
|
|
43
|
+
super(device, emptyVertexBuffer, useTextureStage);
|
|
44
|
+
this._nodeStack = [];
|
|
45
|
+
this._nodeStack[0] = WebGPUCacheRenderPipelineTree._Cache;
|
|
46
|
+
}
|
|
47
47
|
_getRenderPipeline(param) {
|
|
48
48
|
let node = this._nodeStack[this._stateDirtyLowestIndex];
|
|
49
49
|
for (let i = this._stateDirtyLowestIndex; i < this._statesLength; ++i) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuCacheRenderPipelineTree.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuCacheRenderPipelineTree.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,gBAAgB;AAChB,MAAM,SAAS;IAIX;QACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAEM,KAAK;QACR,IAAI,SAAS,GAAG,CAAC,EACb,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAK,CAAC,KAAK,EAAE,CAAC;YAC5D,SAAS,IAAI,eAAe,CAAC;YAC7B,aAAa,IAAI,kBAAkB,CAAC;YACpC,SAAS,EAAE,CAAC;SACf;QACD,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACtC,CAAC;CACJ;AAED,gBAAgB;AAChB,MAAM,OAAO,6BAA8B,SAAQ,yBAAyB;
|
|
1
|
+
{"version":3,"file":"webgpuCacheRenderPipelineTree.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuCacheRenderPipelineTree.ts"],"names":[],"mappings":"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","sourcesContent":["import type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\n\r\n/** @internal */\r\nclass NodeState {\r\n public values: { [id: number]: NodeState };\r\n public pipeline: GPURenderPipeline;\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n\r\n public count(): [number, number] {\r\n let countNode = 0,\r\n countPipeline = this.pipeline ? 1 : 0;\r\n for (const value in this.values) {\r\n const node = this.values[value];\r\n const [childCountNodes, childCoundPipeline] = node!.count();\r\n countNode += childCountNodes;\r\n countPipeline += childCoundPipeline;\r\n countNode++;\r\n }\r\n return [countNode, countPipeline];\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheRenderPipelineTree extends WebGPUCacheRenderPipeline {\r\n private static _Cache: NodeState = new NodeState();\r\n\r\n private _nodeStack: NodeState[];\r\n\r\n public static GetNodeCounts(): { nodeCount: number; pipelineCount: number } {\r\n const counts = WebGPUCacheRenderPipelineTree._Cache.count();\r\n\r\n return { nodeCount: counts[0], pipelineCount: counts[1] };\r\n }\r\n\r\n public static _GetPipelines(node: NodeState, pipelines: Array<Array<number>>, curPath: Array<number>, curPathLen: number): void {\r\n if (node.pipeline) {\r\n const path = curPath.slice();\r\n path.length = curPathLen;\r\n pipelines.push(path);\r\n }\r\n for (const value in node.values) {\r\n const nnode = node.values[value];\r\n curPath[curPathLen] = parseInt(value);\r\n WebGPUCacheRenderPipelineTree._GetPipelines(nnode, pipelines, curPath, curPathLen + 1);\r\n }\r\n }\r\n\r\n public static GetPipelines(): Array<Array<number>> {\r\n const pipelines: Array<Array<number>> = [];\r\n WebGPUCacheRenderPipelineTree._GetPipelines(WebGPUCacheRenderPipelineTree._Cache, pipelines, [], 0);\r\n return pipelines;\r\n }\r\n\r\n constructor(device: GPUDevice, emptyVertexBuffer: VertexBuffer, useTextureStage: boolean) {\r\n super(device, emptyVertexBuffer, useTextureStage);\r\n this._nodeStack = [];\r\n this._nodeStack[0] = WebGPUCacheRenderPipelineTree._Cache;\r\n }\r\n\r\n protected _getRenderPipeline(param: { token: any; pipeline: Nullable<GPURenderPipeline> }): void {\r\n let node = this._nodeStack[this._stateDirtyLowestIndex];\r\n for (let i = this._stateDirtyLowestIndex; i < this._statesLength; ++i) {\r\n let nn: NodeState | undefined = node!.values[this._states[i]];\r\n if (!nn) {\r\n nn = new NodeState();\r\n node!.values[this._states[i]] = nn;\r\n }\r\n node = nn;\r\n this._nodeStack[i + 1] = node;\r\n }\r\n\r\n param.token = node;\r\n param.pipeline = node.pipeline;\r\n }\r\n\r\n protected _setRenderPipeline(param: { token: NodeState; pipeline: Nullable<GPURenderPipeline> }): void {\r\n param.token.pipeline = param.pipeline!;\r\n }\r\n}\r\n"]}
|
|
@@ -6,17 +6,6 @@ import "../../Shaders/clearQuad.vertex.js";
|
|
|
6
6
|
import "../../Shaders/clearQuad.fragment.js";
|
|
7
7
|
/** @internal */
|
|
8
8
|
export class WebGPUClearQuad {
|
|
9
|
-
constructor(device, engine, emptyVertexBuffer) {
|
|
10
|
-
this._bindGroups = {};
|
|
11
|
-
this._bundleCache = {};
|
|
12
|
-
this._keyTemp = [];
|
|
13
|
-
this._device = device;
|
|
14
|
-
this._engine = engine;
|
|
15
|
-
this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer, !engine._caps.textureFloatLinearFiltering);
|
|
16
|
-
this._cacheRenderPipeline.setDepthTestEnabled(false);
|
|
17
|
-
this._cacheRenderPipeline.setStencilReadMask(0xff);
|
|
18
|
-
this._effect = engine.createEffect("clearQuad", [], ["color", "depthValue"]);
|
|
19
|
-
}
|
|
20
9
|
setDepthStencilFormat(format) {
|
|
21
10
|
this._depthTextureFormat = format;
|
|
22
11
|
this._cacheRenderPipeline.setDepthStencilFormat(format);
|
|
@@ -28,6 +17,17 @@ export class WebGPUClearQuad {
|
|
|
28
17
|
this._cacheRenderPipeline.setMRT(textureArray, textureCount);
|
|
29
18
|
this._cacheRenderPipeline.setMRTAttachments(attachments);
|
|
30
19
|
}
|
|
20
|
+
constructor(device, engine, emptyVertexBuffer) {
|
|
21
|
+
this._bindGroups = {};
|
|
22
|
+
this._bundleCache = {};
|
|
23
|
+
this._keyTemp = [];
|
|
24
|
+
this._device = device;
|
|
25
|
+
this._engine = engine;
|
|
26
|
+
this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer, !engine._caps.textureFloatLinearFiltering);
|
|
27
|
+
this._cacheRenderPipeline.setDepthTestEnabled(false);
|
|
28
|
+
this._cacheRenderPipeline.setStencilReadMask(0xff);
|
|
29
|
+
this._effect = engine.createEffect("clearQuad", [], ["color", "depthValue"]);
|
|
30
|
+
}
|
|
31
31
|
clear(renderPass, clearColor, clearDepth, clearStencil, sampleCount = 1) {
|
|
32
32
|
var _a, _b;
|
|
33
33
|
let renderPass2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"../../Materials/effect\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IColor4Like } from \"../../Maths/math.like\";\r\nimport type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { renderableTextureFormatToIndex, WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @internal */\r\nexport class WebGPUClearQuad {\r\n private _device: GPUDevice;\r\n private _engine: WebGPUEngine;\r\n private _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n private _effect: Effect;\r\n private _bindGroups: { [id: string]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: string]: GPURenderBundle } = {};\r\n private _keyTemp: number[] = [];\r\n\r\n public setDepthStencilFormat(format: GPUTextureFormat | undefined): void {\r\n this._depthTextureFormat = format;\r\n this._cacheRenderPipeline.setDepthStencilFormat(format);\r\n }\r\n\r\n public setColorFormat(format: GPUTextureFormat | null): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[], textureCount: number): void {\r\n this._cacheRenderPipeline.setMRT(textureArray, textureCount);\r\n this._cacheRenderPipeline.setMRTAttachments(attachments);\r\n }\r\n\r\n constructor(device: GPUDevice, engine: WebGPUEngine, emptyVertexBuffer: VertexBuffer) {\r\n this._device = device;\r\n this._engine = engine;\r\n\r\n this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer, !engine._caps.textureFloatLinearFiltering);\r\n this._cacheRenderPipeline.setDepthTestEnabled(false);\r\n this._cacheRenderPipeline.setStencilReadMask(0xff);\r\n\r\n this._effect = engine.createEffect(\"clearQuad\", [], [\"color\", \"depthValue\"]);\r\n }\r\n\r\n public clear(\r\n renderPass: Nullable<GPURenderPassEncoder>,\r\n clearColor?: Nullable<IColor4Like>,\r\n clearDepth?: boolean,\r\n clearStencil?: boolean,\r\n sampleCount = 1\r\n ): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey: string;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n let idx = 0;\r\n this._keyTemp.length = 0;\r\n for (let i = 0; i < this._cacheRenderPipeline.colorFormats.length; ++i) {\r\n this._keyTemp[idx++] = renderableTextureFormatToIndex[this._cacheRenderPipeline.colorFormats[i] ?? \"\"];\r\n }\r\n\r\n const depthStencilFormatIndex = renderableTextureFormatToIndex[this._depthTextureFormat ?? 0];\r\n\r\n this._keyTemp[idx] =\r\n (clearColor ? clearColor.r + clearColor.g * 256 + clearColor.b * 256 * 256 + clearColor.a * 256 * 256 * 256 : 0) +\r\n (clearDepth ? 2 ** 32 : 0) +\r\n (clearStencil ? 2 ** 33 : 0) +\r\n (this._engine.useReverseDepthBuffer ? 2 ** 34 : 0) +\r\n (isRTTPass ? 2 ** 35 : 0) +\r\n (sampleCount > 1 ? 2 ** 36 : 0) +\r\n depthStencilFormatIndex * 2 ** 37;\r\n\r\n bundleKey = this._keyTemp.join(\"_\");\r\n bundle = this._bundleCache[bundleKey];\r\n\r\n if (bundle) {\r\n return bundle;\r\n }\r\n\r\n renderPass2 = this._device.createRenderBundleEncoder({\r\n colorFormats: this._cacheRenderPipeline.colorFormats,\r\n depthStencilFormat: this._depthTextureFormat,\r\n sampleCount,\r\n });\r\n }\r\n\r\n this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);\r\n this._cacheRenderPipeline.setStencilEnabled(!!clearStencil && !!this._depthTextureFormat && WebGPUTextureHelper.HasStencilAspect(this._depthTextureFormat));\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xff : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? Constants.ALWAYS : Constants.NEVER);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? Constants.REPLACE : Constants.KEEP);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xf : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(Constants.MATERIAL_TriangleStripDrawMode, this._effect, sampleCount);\r\n\r\n const webgpuPipelineContext = this._effect._pipelineContext as WebGPUPipelineContext;\r\n\r\n if (clearColor) {\r\n this._effect.setDirectColor4(\"color\", clearColor);\r\n }\r\n\r\n this._effect.setFloat(\"depthValue\", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);\r\n\r\n webgpuPipelineContext.uniformBuffer!.update();\r\n\r\n const bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;\r\n const bufferLeftOver = webgpuPipelineContext.uniformBuffer!.getBuffer() as WebGPUDataBuffer;\r\n\r\n const key = bufferLeftOver.uniqueId + \"-\" + bufferInternals.uniqueId;\r\n\r\n let bindGroups = this._bindGroups[key];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n bindGroups = this._bindGroups[key] = [];\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[0],\r\n entries: [],\r\n })\r\n );\r\n if (!WebGPUShaderProcessingContext._SimplifiedKnownBindings) {\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[1],\r\n entries: [],\r\n })\r\n );\r\n }\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[WebGPUShaderProcessingContext._SimplifiedKnownBindings ? 1 : 2],\r\n entries: [\r\n {\r\n binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity,\r\n },\r\n },\r\n {\r\n binding: 1,\r\n resource: {\r\n buffer: bufferLeftOver.underlyingResource,\r\n size: bufferLeftOver.capacity,\r\n },\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n\r\n renderPass2.setPipeline(pipeline);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n renderPass2.setBindGroup(i, bindGroups[i]);\r\n }\r\n renderPass2.draw(4, 1, 0, 0);\r\n\r\n if (!renderPass) {\r\n bundle = (renderPass2 as GPURenderBundleEncoder).finish();\r\n this._bundleCache[bundleKey!] = bundle;\r\n }\r\n\r\n return bundle;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"../../Materials/effect\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IColor4Like } from \"../../Maths/math.like\";\r\nimport type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { renderableTextureFormatToIndex, WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @internal */\r\nexport class WebGPUClearQuad {\r\n private _device: GPUDevice;\r\n private _engine: WebGPUEngine;\r\n private _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n private _effect: Effect;\r\n private _bindGroups: { [id: string]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: string]: GPURenderBundle } = {};\r\n private _keyTemp: number[] = [];\r\n\r\n public setDepthStencilFormat(format: GPUTextureFormat | undefined): void {\r\n this._depthTextureFormat = format;\r\n this._cacheRenderPipeline.setDepthStencilFormat(format);\r\n }\r\n\r\n public setColorFormat(format: GPUTextureFormat | null): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[], textureCount: number): void {\r\n this._cacheRenderPipeline.setMRT(textureArray, textureCount);\r\n this._cacheRenderPipeline.setMRTAttachments(attachments);\r\n }\r\n\r\n constructor(device: GPUDevice, engine: WebGPUEngine, emptyVertexBuffer: VertexBuffer) {\r\n this._device = device;\r\n this._engine = engine;\r\n\r\n this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer, !engine._caps.textureFloatLinearFiltering);\r\n this._cacheRenderPipeline.setDepthTestEnabled(false);\r\n this._cacheRenderPipeline.setStencilReadMask(0xff);\r\n\r\n this._effect = engine.createEffect(\"clearQuad\", [], [\"color\", \"depthValue\"]);\r\n }\r\n\r\n public clear(\r\n renderPass: Nullable<GPURenderPassEncoder>,\r\n clearColor?: Nullable<IColor4Like>,\r\n clearDepth?: boolean,\r\n clearStencil?: boolean,\r\n sampleCount = 1\r\n ): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey: string;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n let idx = 0;\r\n this._keyTemp.length = 0;\r\n for (let i = 0; i < this._cacheRenderPipeline.colorFormats.length; ++i) {\r\n this._keyTemp[idx++] = renderableTextureFormatToIndex[this._cacheRenderPipeline.colorFormats[i] ?? \"\"];\r\n }\r\n\r\n const depthStencilFormatIndex = renderableTextureFormatToIndex[this._depthTextureFormat ?? 0];\r\n\r\n this._keyTemp[idx] =\r\n (clearColor ? clearColor.r + clearColor.g * 256 + clearColor.b * 256 * 256 + clearColor.a * 256 * 256 * 256 : 0) +\r\n (clearDepth ? 2 ** 32 : 0) +\r\n (clearStencil ? 2 ** 33 : 0) +\r\n (this._engine.useReverseDepthBuffer ? 2 ** 34 : 0) +\r\n (isRTTPass ? 2 ** 35 : 0) +\r\n (sampleCount > 1 ? 2 ** 36 : 0) +\r\n depthStencilFormatIndex * 2 ** 37;\r\n\r\n bundleKey = this._keyTemp.join(\"_\");\r\n bundle = this._bundleCache[bundleKey];\r\n\r\n if (bundle) {\r\n return bundle;\r\n }\r\n\r\n renderPass2 = this._device.createRenderBundleEncoder({\r\n colorFormats: this._cacheRenderPipeline.colorFormats,\r\n depthStencilFormat: this._depthTextureFormat,\r\n sampleCount,\r\n });\r\n }\r\n\r\n this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);\r\n this._cacheRenderPipeline.setStencilEnabled(!!clearStencil && !!this._depthTextureFormat && WebGPUTextureHelper.HasStencilAspect(this._depthTextureFormat));\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xff : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? Constants.ALWAYS : Constants.NEVER);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? Constants.REPLACE : Constants.KEEP);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xf : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(Constants.MATERIAL_TriangleStripDrawMode, this._effect, sampleCount);\r\n\r\n const webgpuPipelineContext = this._effect._pipelineContext as WebGPUPipelineContext;\r\n\r\n if (clearColor) {\r\n this._effect.setDirectColor4(\"color\", clearColor);\r\n }\r\n\r\n this._effect.setFloat(\"depthValue\", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);\r\n\r\n webgpuPipelineContext.uniformBuffer!.update();\r\n\r\n const bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;\r\n const bufferLeftOver = webgpuPipelineContext.uniformBuffer!.getBuffer() as WebGPUDataBuffer;\r\n\r\n const key = bufferLeftOver.uniqueId + \"-\" + bufferInternals.uniqueId;\r\n\r\n let bindGroups = this._bindGroups[key];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n bindGroups = this._bindGroups[key] = [];\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[0],\r\n entries: [],\r\n })\r\n );\r\n if (!WebGPUShaderProcessingContext._SimplifiedKnownBindings) {\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[1],\r\n entries: [],\r\n })\r\n );\r\n }\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[WebGPUShaderProcessingContext._SimplifiedKnownBindings ? 1 : 2],\r\n entries: [\r\n {\r\n binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity,\r\n },\r\n },\r\n {\r\n binding: 1,\r\n resource: {\r\n buffer: bufferLeftOver.underlyingResource,\r\n size: bufferLeftOver.capacity,\r\n },\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n\r\n renderPass2.setPipeline(pipeline);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n renderPass2.setBindGroup(i, bindGroups[i]);\r\n }\r\n renderPass2.draw(4, 1, 0, 0);\r\n\r\n if (!renderPass) {\r\n bundle = (renderPass2 as GPURenderBundleEncoder).finish();\r\n this._bundleCache[bundleKey!] = bundle;\r\n }\r\n\r\n return bundle;\r\n }\r\n}\r\n"]}
|
|
@@ -3,13 +3,6 @@ import { ComputeBindingType } from "../Extensions/engine.computeShader.js";
|
|
|
3
3
|
import * as WebGPUConstants from "./webgpuConstants.js";
|
|
4
4
|
/** @internal */
|
|
5
5
|
export class WebGPUComputeContext {
|
|
6
|
-
constructor(device, cacheSampler) {
|
|
7
|
-
this._device = device;
|
|
8
|
-
this._cacheSampler = cacheSampler;
|
|
9
|
-
this.uniqueId = WebGPUComputeContext._Counter++;
|
|
10
|
-
this._bindGroupEntries = [];
|
|
11
|
-
this.clear();
|
|
12
|
-
}
|
|
13
6
|
getBindGroups(bindings, computePipeline, bindingsMapping) {
|
|
14
7
|
if (!bindingsMapping) {
|
|
15
8
|
throw new Error("WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!");
|
|
@@ -120,6 +113,13 @@ export class WebGPUComputeContext {
|
|
|
120
113
|
}
|
|
121
114
|
return this._bindGroups;
|
|
122
115
|
}
|
|
116
|
+
constructor(device, cacheSampler) {
|
|
117
|
+
this._device = device;
|
|
118
|
+
this._cacheSampler = cacheSampler;
|
|
119
|
+
this.uniqueId = WebGPUComputeContext._Counter++;
|
|
120
|
+
this._bindGroupEntries = [];
|
|
121
|
+
this.clear();
|
|
122
|
+
}
|
|
123
123
|
clear() {
|
|
124
124
|
this._bindGroups = [];
|
|
125
125
|
// Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuComputeContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuComputeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StorageBuffer } from \"../../Buffers/storageBuffer\";\r\nimport type { IComputeContext } from \"../../Compute/IComputeContext\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { ComputeBindingList, ComputeBindingMapping } from \"../Extensions/engine.computeShader\";\r\nimport { ComputeBindingType } from \"../Extensions/engine.computeShader\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\n\r\n/** @internal */\r\nexport class WebGPUComputeContext implements IComputeContext {\r\n private static _Counter = 0;\r\n\r\n public readonly uniqueId: number;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _bindGroups: GPUBindGroup[];\r\n private _bindGroupEntries: GPUBindGroupEntry[][];\r\n\r\n public getBindGroups(bindings: ComputeBindingList, computePipeline: GPUComputePipeline, bindingsMapping?: ComputeBindingMapping): GPUBindGroup[] {\r\n if (!bindingsMapping) {\r\n throw new Error(\"WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!\");\r\n }\r\n if (this._bindGroups.length === 0) {\r\n const bindGroupEntriesExist = this._bindGroupEntries.length > 0;\r\n for (const key in bindings) {\r\n const binding = bindings[key],\r\n location = bindingsMapping[key],\r\n group = location.group,\r\n index = location.binding,\r\n type = binding.type,\r\n object = binding.object;\r\n let indexInGroupEntries = binding.indexInGroupEntries;\r\n\r\n let entries = this._bindGroupEntries[group];\r\n if (!entries) {\r\n entries = this._bindGroupEntries[group] = [];\r\n }\r\n\r\n switch (type) {\r\n case ComputeBindingType.Sampler: {\r\n const sampler = object as TextureSampler;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = this._cacheSampler.getSampler(sampler);\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: this._cacheSampler.getSampler(sampler),\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.Texture:\r\n case ComputeBindingType.TextureWithoutSampler: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n if (type === ComputeBindingType.Texture) {\r\n entries[indexInGroupEntries++].resource = this._cacheSampler.getSampler(texture._texture!);\r\n }\r\n entries[indexInGroupEntries].resource = hardwareTexture.view!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n if (type === ComputeBindingType.Texture) {\r\n entries.push({\r\n binding: index - 1,\r\n resource: this._cacheSampler.getSampler(texture._texture!),\r\n });\r\n }\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.view!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.StorageTexture: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if ((hardwareTexture.textureAdditionalUsages & WebGPUConstants.TextureUsage.StorageBinding) === 0) {\r\n Logger.Error(`computeDispatch: The texture (name=${texture.name}, uniqueId=${texture.uniqueId}) is not a storage texture!`, 50);\r\n }\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.viewForWriting!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.UniformBuffer:\r\n case ComputeBindingType.StorageBuffer: {\r\n const buffer = type === ComputeBindingType.UniformBuffer ? (object as UniformBuffer) : (object as StorageBuffer);\r\n const dataBuffer = buffer.getBuffer()!;\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: {\r\n buffer: webgpuBuffer,\r\n offset: 0,\r\n size: dataBuffer.capacity,\r\n },\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._bindGroupEntries.length; ++i) {\r\n const entries = this._bindGroupEntries[i];\r\n if (!entries) {\r\n this._bindGroups[i] = undefined as any;\r\n continue;\r\n }\r\n this._bindGroups[i] = this._device.createBindGroup({\r\n layout: computePipeline.getBindGroupLayout(i),\r\n entries,\r\n });\r\n }\r\n\r\n this._bindGroups.length = this._bindGroupEntries.length;\r\n }\r\n\r\n return this._bindGroups;\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this.uniqueId = WebGPUComputeContext._Counter++;\r\n this._bindGroupEntries = [];\r\n this.clear();\r\n }\r\n\r\n public clear(): void {\r\n this._bindGroups = [];\r\n // Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webgpuComputeContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuComputeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StorageBuffer } from \"../../Buffers/storageBuffer\";\r\nimport type { IComputeContext } from \"../../Compute/IComputeContext\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { ComputeBindingList, ComputeBindingMapping } from \"../Extensions/engine.computeShader\";\r\nimport { ComputeBindingType } from \"../Extensions/engine.computeShader\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\n\r\n/** @internal */\r\nexport class WebGPUComputeContext implements IComputeContext {\r\n private static _Counter = 0;\r\n\r\n public readonly uniqueId: number;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _bindGroups: GPUBindGroup[];\r\n private _bindGroupEntries: GPUBindGroupEntry[][];\r\n\r\n public getBindGroups(bindings: ComputeBindingList, computePipeline: GPUComputePipeline, bindingsMapping?: ComputeBindingMapping): GPUBindGroup[] {\r\n if (!bindingsMapping) {\r\n throw new Error(\"WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!\");\r\n }\r\n if (this._bindGroups.length === 0) {\r\n const bindGroupEntriesExist = this._bindGroupEntries.length > 0;\r\n for (const key in bindings) {\r\n const binding = bindings[key],\r\n location = bindingsMapping[key],\r\n group = location.group,\r\n index = location.binding,\r\n type = binding.type,\r\n object = binding.object;\r\n let indexInGroupEntries = binding.indexInGroupEntries;\r\n\r\n let entries = this._bindGroupEntries[group];\r\n if (!entries) {\r\n entries = this._bindGroupEntries[group] = [];\r\n }\r\n\r\n switch (type) {\r\n case ComputeBindingType.Sampler: {\r\n const sampler = object as TextureSampler;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = this._cacheSampler.getSampler(sampler);\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: this._cacheSampler.getSampler(sampler),\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.Texture:\r\n case ComputeBindingType.TextureWithoutSampler: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n if (type === ComputeBindingType.Texture) {\r\n entries[indexInGroupEntries++].resource = this._cacheSampler.getSampler(texture._texture!);\r\n }\r\n entries[indexInGroupEntries].resource = hardwareTexture.view!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n if (type === ComputeBindingType.Texture) {\r\n entries.push({\r\n binding: index - 1,\r\n resource: this._cacheSampler.getSampler(texture._texture!),\r\n });\r\n }\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.view!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.StorageTexture: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if ((hardwareTexture.textureAdditionalUsages & WebGPUConstants.TextureUsage.StorageBinding) === 0) {\r\n Logger.Error(`computeDispatch: The texture (name=${texture.name}, uniqueId=${texture.uniqueId}) is not a storage texture!`, 50);\r\n }\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.viewForWriting!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.UniformBuffer:\r\n case ComputeBindingType.StorageBuffer: {\r\n const buffer = type === ComputeBindingType.UniformBuffer ? (object as UniformBuffer) : (object as StorageBuffer);\r\n const dataBuffer = buffer.getBuffer()!;\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: {\r\n buffer: webgpuBuffer,\r\n offset: 0,\r\n size: dataBuffer.capacity,\r\n },\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._bindGroupEntries.length; ++i) {\r\n const entries = this._bindGroupEntries[i];\r\n if (!entries) {\r\n this._bindGroups[i] = undefined as any;\r\n continue;\r\n }\r\n this._bindGroups[i] = this._device.createBindGroup({\r\n layout: computePipeline.getBindGroupLayout(i),\r\n entries,\r\n });\r\n }\r\n\r\n this._bindGroups.length = this._bindGroupEntries.length;\r\n }\r\n\r\n return this._bindGroups;\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this.uniqueId = WebGPUComputeContext._Counter++;\r\n this._bindGroupEntries = [];\r\n this.clear();\r\n }\r\n\r\n public clear(): void {\r\n this._bindGroups = [];\r\n // Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)\r\n }\r\n}\r\n"]}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
/** @internal */
|
|
2
2
|
export class WebGPUComputePipelineContext {
|
|
3
|
-
constructor(engine) {
|
|
4
|
-
this._name = "unnamed";
|
|
5
|
-
this.engine = engine;
|
|
6
|
-
}
|
|
7
3
|
get isAsync() {
|
|
8
4
|
return false;
|
|
9
5
|
}
|
|
@@ -13,6 +9,10 @@ export class WebGPUComputePipelineContext {
|
|
|
13
9
|
}
|
|
14
10
|
return false;
|
|
15
11
|
}
|
|
12
|
+
constructor(engine) {
|
|
13
|
+
this._name = "unnamed";
|
|
14
|
+
this.engine = engine;
|
|
15
|
+
}
|
|
16
16
|
_getComputeShaderCode() {
|
|
17
17
|
var _a;
|
|
18
18
|
return (_a = this.sources) === null || _a === void 0 ? void 0 : _a.compute;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuComputePipelineContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuComputePipelineContext.ts"],"names":[],"mappings":"AAIA,gBAAgB;AAChB,MAAM,OAAO,4BAA4B;
|
|
1
|
+
{"version":3,"file":"webgpuComputePipelineContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuComputePipelineContext.ts"],"names":[],"mappings":"AAIA,gBAAgB;AAChB,MAAM,OAAO,4BAA4B;IAYrC,IAAW,OAAO;QACd,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAKD,YAAY,MAAoB;QAC5B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,qBAAqB;;QACxB,OAAO,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,CAAC;IACjC,CAAC;IAEM,OAAO,KAAU,CAAC;CAC5B","sourcesContent":["import type { IComputePipelineContext } from \"../../Compute/IComputePipelineContext\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\n\r\n/** @internal */\r\nexport class WebGPUComputePipelineContext implements IComputePipelineContext {\r\n public engine: WebGPUEngine;\r\n\r\n public sources: {\r\n compute: string;\r\n rawCompute: string;\r\n };\r\n\r\n public stage: Nullable<GPUProgrammableStage>;\r\n\r\n public computePipeline: GPUComputePipeline;\r\n\r\n public get isAsync() {\r\n return false;\r\n }\r\n\r\n public get isReady(): boolean {\r\n if (this.stage) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _name: string;\r\n\r\n constructor(engine: WebGPUEngine) {\r\n this._name = \"unnamed\";\r\n this.engine = engine;\r\n }\r\n\r\n public _getComputeShaderCode(): string | null {\r\n return this.sources?.compute;\r\n }\r\n\r\n public dispose(): void {}\r\n}\r\n"]}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import * as WebGPUConstants from "./webgpuConstants.js";
|
|
2
2
|
/** @internal */
|
|
3
3
|
export class WebGPUDrawContext {
|
|
4
|
-
constructor(bufferManager) {
|
|
5
|
-
this._bufferManager = bufferManager;
|
|
6
|
-
this.uniqueId = WebGPUDrawContext._Counter++;
|
|
7
|
-
this._useInstancing = false;
|
|
8
|
-
this._currentInstanceCount = 0;
|
|
9
|
-
this.reset();
|
|
10
|
-
}
|
|
11
4
|
isDirty(materialContextUpdateId) {
|
|
12
5
|
return this._isDirty || this._materialContextUpdateId !== materialContextUpdateId;
|
|
13
6
|
}
|
|
@@ -38,6 +31,13 @@ export class WebGPUDrawContext {
|
|
|
38
31
|
this._useInstancing = use;
|
|
39
32
|
this._currentInstanceCount = -1;
|
|
40
33
|
}
|
|
34
|
+
constructor(bufferManager) {
|
|
35
|
+
this._bufferManager = bufferManager;
|
|
36
|
+
this.uniqueId = WebGPUDrawContext._Counter++;
|
|
37
|
+
this._useInstancing = false;
|
|
38
|
+
this._currentInstanceCount = 0;
|
|
39
|
+
this.reset();
|
|
40
|
+
}
|
|
41
41
|
reset() {
|
|
42
42
|
this.buffers = {};
|
|
43
43
|
this._isDirty = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuDrawContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuDrawContext.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAErD,gBAAgB;AAChB,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"webgpuDrawContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuDrawContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { IDrawContext } from \"../IDrawContext\";\r\nimport type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUDrawContext implements IDrawContext {\r\n private static _Counter = 0;\r\n\r\n public fastBundle?: GPURenderBundle; // used only when compatibilityMode==false (fast mode)\r\n public bindGroups?: GPUBindGroup[]; // cache of the bind groups. Will be reused for the next draw if isDirty==false (and materialContext.isDirty==false)\r\n\r\n public uniqueId: number;\r\n\r\n public buffers: { [name: string]: Nullable<WebGPUDataBuffer> };\r\n\r\n public indirectDrawBuffer?: GPUBuffer;\r\n\r\n private _materialContextUpdateId: number;\r\n private _bufferManager: WebGPUBufferManager;\r\n private _useInstancing: boolean;\r\n private _indirectDrawData?: Uint32Array;\r\n private _currentInstanceCount: number;\r\n private _isDirty: boolean;\r\n\r\n public isDirty(materialContextUpdateId: number): boolean {\r\n return this._isDirty || this._materialContextUpdateId !== materialContextUpdateId;\r\n }\r\n\r\n public resetIsDirty(materialContextUpdateId: number): void {\r\n this._isDirty = false;\r\n this._materialContextUpdateId = materialContextUpdateId;\r\n }\r\n\r\n public get useInstancing() {\r\n return this._useInstancing;\r\n }\r\n\r\n public set useInstancing(use: boolean) {\r\n if (this._useInstancing === use) {\r\n return;\r\n }\r\n\r\n if (!use) {\r\n if (this.indirectDrawBuffer) {\r\n this._bufferManager.releaseBuffer(this.indirectDrawBuffer);\r\n }\r\n this.indirectDrawBuffer = undefined;\r\n this._indirectDrawData = undefined;\r\n } else {\r\n this.indirectDrawBuffer = this._bufferManager.createRawBuffer(40, WebGPUConstants.BufferUsage.CopyDst | WebGPUConstants.BufferUsage.Indirect);\r\n this._indirectDrawData = new Uint32Array(5);\r\n this._indirectDrawData[3] = 0;\r\n this._indirectDrawData[4] = 0;\r\n }\r\n\r\n this._useInstancing = use;\r\n this._currentInstanceCount = -1;\r\n }\r\n\r\n constructor(bufferManager: WebGPUBufferManager) {\r\n this._bufferManager = bufferManager;\r\n this.uniqueId = WebGPUDrawContext._Counter++;\r\n this._useInstancing = false;\r\n this._currentInstanceCount = 0;\r\n this.reset();\r\n }\r\n\r\n public reset(): void {\r\n this.buffers = {};\r\n this._isDirty = true;\r\n this._materialContextUpdateId = 0;\r\n this.fastBundle = undefined;\r\n this.bindGroups = undefined;\r\n }\r\n\r\n public setBuffer(name: string, buffer: Nullable<WebGPUDataBuffer>): void {\r\n this._isDirty ||= buffer?.uniqueId !== this.buffers[name]?.uniqueId;\r\n\r\n this.buffers[name] = buffer;\r\n }\r\n\r\n public setIndirectData(indexOrVertexCount: number, instanceCount: number, firstIndexOrVertex: number): void {\r\n if (instanceCount === this._currentInstanceCount || !this.indirectDrawBuffer || !this._indirectDrawData) {\r\n // The current buffer is already up to date so do nothing\r\n // Note that we only check for instanceCount and not indexOrVertexCount nor firstIndexOrVertex because those values\r\n // are supposed to not change during the lifetime of a draw context\r\n return;\r\n }\r\n this._currentInstanceCount = instanceCount;\r\n\r\n this._indirectDrawData![0] = indexOrVertexCount;\r\n this._indirectDrawData![1] = instanceCount;\r\n this._indirectDrawData![2] = firstIndexOrVertex;\r\n\r\n this._bufferManager.setRawData(this.indirectDrawBuffer, 0, this._indirectDrawData, 0, 20);\r\n }\r\n\r\n public dispose(): void {\r\n if (this.indirectDrawBuffer) {\r\n this._bufferManager.releaseBuffer(this.indirectDrawBuffer);\r\n this.indirectDrawBuffer = undefined;\r\n this._indirectDrawData = undefined;\r\n }\r\n this.fastBundle = undefined;\r\n this.bindGroups = undefined;\r\n this.buffers = undefined as any;\r\n }\r\n}\r\n"]}
|
|
@@ -3,15 +3,6 @@ import { Scalar } from "../../Maths/math.scalar.js";
|
|
|
3
3
|
import * as WebGPUConstants from "./webgpuConstants.js";
|
|
4
4
|
/** @internal */
|
|
5
5
|
export class WebGPUHardwareTexture {
|
|
6
|
-
constructor(existingTexture = null) {
|
|
7
|
-
this.format = WebGPUConstants.TextureFormat.RGBA8Unorm;
|
|
8
|
-
this.textureUsages = 0;
|
|
9
|
-
this.textureAdditionalUsages = 0;
|
|
10
|
-
this._webgpuTexture = existingTexture;
|
|
11
|
-
this._webgpuMSAATexture = null;
|
|
12
|
-
this.view = null;
|
|
13
|
-
this.viewForWriting = null;
|
|
14
|
-
}
|
|
15
6
|
get underlyingResource() {
|
|
16
7
|
return this._webgpuTexture;
|
|
17
8
|
}
|
|
@@ -21,6 +12,15 @@ export class WebGPUHardwareTexture {
|
|
|
21
12
|
set msaaTexture(texture) {
|
|
22
13
|
this._webgpuMSAATexture = texture;
|
|
23
14
|
}
|
|
15
|
+
constructor(existingTexture = null) {
|
|
16
|
+
this.format = WebGPUConstants.TextureFormat.RGBA8Unorm;
|
|
17
|
+
this.textureUsages = 0;
|
|
18
|
+
this.textureAdditionalUsages = 0;
|
|
19
|
+
this._webgpuTexture = existingTexture;
|
|
20
|
+
this._webgpuMSAATexture = null;
|
|
21
|
+
this.view = null;
|
|
22
|
+
this.viewForWriting = null;
|
|
23
|
+
}
|
|
24
24
|
set(hardwareTexture) {
|
|
25
25
|
this._webgpuTexture = hardwareTexture;
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAIrD,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HardwareTextureWrapper } from \"../../Materials/Textures/hardwareTextureWrapper\";\r\nimport { InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport type { Nullable } from \"../../types\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\ndeclare type WebGPUBundleList = import(\"./webgpuBundleList\").WebGPUBundleList;\r\n\r\n/** @internal */\r\nexport class WebGPUHardwareTexture implements HardwareTextureWrapper {\r\n /**\r\n * List of bundles collected in the snapshot rendering mode when the texture is a render target texture\r\n * The index in this array is the current layer we are rendering into\r\n * @internal\r\n */\r\n public _bundleLists: WebGPUBundleList[];\r\n /**\r\n * Current layer we are rendering into when in snapshot rendering mode (if the texture is a render target texture)\r\n * @internal\r\n */\r\n public _currentLayer: number;\r\n\r\n /**\r\n * Cache of RenderPassDescriptor and BindGroup used when generating mipmaps (see WebGPUTextureHelper.generateMipmaps)\r\n * @internal\r\n */\r\n public _mipmapGenRenderPassDescr: GPURenderPassDescriptor[][];\r\n /** @internal */\r\n public _mipmapGenBindGroup: GPUBindGroup[][];\r\n\r\n /**\r\n * Cache for the invertYPreMultiplyAlpha function (see WebGPUTextureHelper)\r\n * @internal\r\n */\r\n public _copyInvertYTempTexture?: GPUTexture;\r\n /** @internal */\r\n public _copyInvertYRenderPassDescr: GPURenderPassDescriptor;\r\n /** @internal */\r\n public _copyInvertYBindGroup: GPUBindGroup;\r\n /** @internal */\r\n public _copyInvertYBindGroupWithOfst: GPUBindGroup;\r\n\r\n private _webgpuTexture: Nullable<GPUTexture>;\r\n private _webgpuMSAATexture: Nullable<GPUTexture>;\r\n\r\n public get underlyingResource(): Nullable<GPUTexture> {\r\n return this._webgpuTexture;\r\n }\r\n\r\n public get msaaTexture(): Nullable<GPUTexture> {\r\n return this._webgpuMSAATexture;\r\n }\r\n\r\n public set msaaTexture(texture: Nullable<GPUTexture>) {\r\n this._webgpuMSAATexture = texture;\r\n }\r\n\r\n public view: Nullable<GPUTextureView>;\r\n public viewForWriting: Nullable<GPUTextureView>;\r\n public format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n public textureUsages = 0;\r\n public textureAdditionalUsages = 0;\r\n\r\n constructor(existingTexture: Nullable<GPUTexture> = null) {\r\n this._webgpuTexture = existingTexture;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public set(hardwareTexture: GPUTexture): void {\r\n this._webgpuTexture = hardwareTexture;\r\n }\r\n\r\n public setUsage(textureSource: number, generateMipMaps: boolean, isCube: boolean, width: number, height: number): void {\r\n generateMipMaps = textureSource === InternalTextureSource.RenderTarget ? false : generateMipMaps;\r\n\r\n this.createView({\r\n format: this.format,\r\n dimension: isCube ? WebGPUConstants.TextureViewDimension.Cube : WebGPUConstants.TextureViewDimension.E2d,\r\n mipLevelCount: generateMipMaps ? Scalar.ILog2(Math.max(width, height)) + 1 : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount: isCube ? 6 : 1,\r\n aspect: WebGPUConstants.TextureAspect.All,\r\n });\r\n }\r\n\r\n public createView(descriptor?: GPUTextureViewDescriptor, createViewForWriting = false): void {\r\n this.view = this._webgpuTexture!.createView(descriptor);\r\n if (createViewForWriting && descriptor) {\r\n const saveNumMipMaps = descriptor.mipLevelCount;\r\n descriptor.mipLevelCount = 1;\r\n this.viewForWriting = this._webgpuTexture!.createView(descriptor);\r\n descriptor.mipLevelCount = saveNumMipMaps;\r\n }\r\n }\r\n\r\n public reset(): void {\r\n this._webgpuTexture = null;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public release(): void {\r\n this._webgpuTexture?.destroy();\r\n this._webgpuMSAATexture?.destroy();\r\n this._copyInvertYTempTexture?.destroy();\r\n this.reset();\r\n }\r\n}\r\n"]}
|
|
@@ -3,11 +3,6 @@ import { ExternalTexture } from "../../Materials/Textures/externalTexture.js";
|
|
|
3
3
|
import { WebGPUCacheSampler } from "./webgpuCacheSampler.js";
|
|
4
4
|
/** @internal */
|
|
5
5
|
export class WebGPUMaterialContext {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.uniqueId = WebGPUMaterialContext._Counter++;
|
|
8
|
-
this.updateId = 0;
|
|
9
|
-
this.reset();
|
|
10
|
-
}
|
|
11
6
|
get forceBindGroupCreation() {
|
|
12
7
|
// If there is at least one external texture to bind, we must recreate the bind groups each time
|
|
13
8
|
// because we need to retrieve a new texture each frame (by calling device.importExternalTexture)
|
|
@@ -16,6 +11,11 @@ export class WebGPUMaterialContext {
|
|
|
16
11
|
get hasFloatTextures() {
|
|
17
12
|
return this._numFloatTextures > 0;
|
|
18
13
|
}
|
|
14
|
+
constructor() {
|
|
15
|
+
this.uniqueId = WebGPUMaterialContext._Counter++;
|
|
16
|
+
this.updateId = 0;
|
|
17
|
+
this.reset();
|
|
18
|
+
}
|
|
19
19
|
reset() {
|
|
20
20
|
this.samplers = {};
|
|
21
21
|
this.textures = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuMaterialContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuMaterialContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAI3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAe1D,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"webgpuMaterialContext.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuMaterialContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { IMaterialContext } from \"../IMaterialContext\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\n\r\n/** @internal */\r\ninterface IWebGPUMaterialContextSamplerCache {\r\n sampler: Nullable<TextureSampler>;\r\n hashCode: number;\r\n}\r\n\r\n/** @internal */\r\ninterface IWebGPUMaterialContextTextureCache {\r\n texture: Nullable<InternalTexture | ExternalTexture>;\r\n isFloatTexture: boolean;\r\n isExternalTexture: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUMaterialContext implements IMaterialContext {\r\n private static _Counter = 0;\r\n\r\n public uniqueId: number;\r\n public updateId: number;\r\n public isDirty: boolean;\r\n public samplers: { [name: string]: Nullable<IWebGPUMaterialContextSamplerCache> };\r\n public textures: { [name: string]: Nullable<IWebGPUMaterialContextTextureCache> };\r\n\r\n public get forceBindGroupCreation() {\r\n // If there is at least one external texture to bind, we must recreate the bind groups each time\r\n // because we need to retrieve a new texture each frame (by calling device.importExternalTexture)\r\n return this._numExternalTextures > 0;\r\n }\r\n\r\n public get hasFloatTextures() {\r\n return this._numFloatTextures > 0;\r\n }\r\n\r\n protected _numFloatTextures: number;\r\n protected _numExternalTextures: number;\r\n\r\n constructor() {\r\n this.uniqueId = WebGPUMaterialContext._Counter++;\r\n this.updateId = 0;\r\n this.reset();\r\n }\r\n\r\n public reset(): void {\r\n this.samplers = {};\r\n this.textures = {};\r\n this.isDirty = true;\r\n this._numFloatTextures = 0;\r\n this._numExternalTextures = 0;\r\n }\r\n\r\n public setSampler(name: string, sampler: Nullable<TextureSampler>): void {\r\n let samplerCache = this.samplers[name];\r\n let currentHashCode = -1;\r\n if (!samplerCache) {\r\n this.samplers[name] = samplerCache = { sampler, hashCode: 0 };\r\n } else {\r\n currentHashCode = samplerCache.hashCode;\r\n }\r\n\r\n samplerCache.sampler = sampler;\r\n samplerCache.hashCode = sampler ? WebGPUCacheSampler.GetSamplerHashCode(sampler) : 0;\r\n\r\n const isDirty = currentHashCode !== samplerCache.hashCode;\r\n if (isDirty) {\r\n this.updateId++;\r\n }\r\n\r\n this.isDirty ||= isDirty;\r\n }\r\n\r\n public setTexture(name: string, texture: Nullable<InternalTexture | ExternalTexture>): void {\r\n let textureCache = this.textures[name];\r\n let currentTextureId = -1;\r\n if (!textureCache) {\r\n this.textures[name] = textureCache = { texture, isFloatTexture: false, isExternalTexture: false };\r\n } else {\r\n currentTextureId = textureCache.texture?.uniqueId ?? -1;\r\n }\r\n\r\n if (textureCache.isExternalTexture) {\r\n this._numExternalTextures--;\r\n }\r\n if (textureCache.isFloatTexture) {\r\n this._numFloatTextures--;\r\n }\r\n\r\n if (texture) {\r\n textureCache.isFloatTexture = texture.type === Constants.TEXTURETYPE_FLOAT;\r\n textureCache.isExternalTexture = ExternalTexture.IsExternalTexture(texture);\r\n if (textureCache.isFloatTexture) {\r\n this._numFloatTextures++;\r\n }\r\n if (textureCache.isExternalTexture) {\r\n this._numExternalTextures++;\r\n }\r\n } else {\r\n textureCache.isFloatTexture = false;\r\n textureCache.isExternalTexture = false;\r\n }\r\n\r\n textureCache.texture = texture;\r\n\r\n const isDirty = currentTextureId !== (texture?.uniqueId ?? -1);\r\n if (isDirty) {\r\n this.updateId++;\r\n }\r\n\r\n this.isDirty ||= isDirty;\r\n }\r\n}\r\n"]}
|