@babylonjs/core 5.0.0-alpha.63 → 5.0.0-alpha.64
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/Animations/animation.js +42 -2
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.d.ts +1 -1
- package/Animations/animationGroup.js +1 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Audio/sound.js +14 -0
- package/Audio/sound.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +1 -1
- package/Cameras/VR/vrExperienceHelper.js +1 -1
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/DeviceInput/Implementations/{nativeDeviceInputWrapper.d.ts → nativeDeviceInputSystem.d.ts} +5 -21
- package/DeviceInput/Implementations/{nativeDeviceInputWrapper.js → nativeDeviceInputSystem.js} +19 -20
- package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +7 -20
- package/DeviceInput/Implementations/webDeviceInputSystem.js +70 -62
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -2
- package/DeviceInput/InputDevices/deviceSourceManager.js +5 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/Interfaces/inputInterfaces.d.ts +6 -13
- package/DeviceInput/Interfaces/inputInterfaces.js.map +1 -1
- package/DeviceInput/deviceInputSystem.d.ts +49 -5
- package/DeviceInput/deviceInputSystem.js +62 -10
- package/DeviceInput/deviceInputSystem.js.map +1 -1
- package/DeviceInput/index.d.ts +1 -1
- package/DeviceInput/index.js +1 -1
- package/DeviceInput/index.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +1 -1
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/iShaderProcessor.d.ts +1 -1
- package/Engines/Processors/iShaderProcessor.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +5 -0
- package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +8 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +3 -3
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +17 -8
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +2 -2
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +2 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +10 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -0
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +2 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +23 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +17 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -2
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +10 -29
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +4 -3
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.d.ts +63 -6
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +3 -7
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +5 -13
- package/Engines/webgpuEngine.js +18 -55
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gizmos/positionGizmo.js +1 -1
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Inputs/scene.inputManager.js +1 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -0
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +3 -3
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +8 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +1 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/PBR/index.d.ts +4 -0
- package/Materials/PBR/index.js +4 -0
- package/Materials/PBR/index.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +28 -96
- package/Materials/PBR/pbrAnisotropicConfiguration.js +50 -111
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -37
- package/Materials/PBR/pbrBRDFConfiguration.js +39 -52
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +15 -74
- package/Materials/PBR/pbrBaseMaterial.js +66 -181
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +23 -98
- package/Materials/PBR/pbrClearCoatConfiguration.js +91 -143
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +25 -93
- package/Materials/PBR/pbrSheenConfiguration.js +71 -126
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +28 -114
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +150 -211
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +1 -1
- package/Materials/Textures/videoTexture.js +1 -1
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/effect.d.ts +6 -1
- package/Materials/effect.js +4 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +1 -1
- package/Materials/fresnelParameters.js +1 -1
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/index.d.ts +4 -0
- package/Materials/index.js +4 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.d.ts +43 -2
- package/Materials/material.detailMapConfiguration.d.ts +29 -87
- package/Materials/material.detailMapConfiguration.js +50 -106
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +99 -8
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +16 -0
- package/Materials/materialDefines.js +17 -5
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialPluginBase.d.ts +182 -0
- package/Materials/materialPluginBase.js +209 -0
- package/Materials/materialPluginBase.js.map +1 -0
- package/Materials/materialPluginEvent.d.ts +98 -0
- package/Materials/materialPluginEvent.js +21 -0
- package/Materials/materialPluginEvent.js.map +1 -0
- package/Materials/materialPluginFactoryExport.d.ts +40 -0
- package/Materials/materialPluginFactoryExport.js +75 -0
- package/Materials/materialPluginFactoryExport.js.map +1 -0
- package/Materials/materialPluginManager.d.ts +90 -0
- package/Materials/materialPluginManager.js +323 -0
- package/Materials/materialPluginManager.js.map +1 -0
- package/Materials/shaderMaterial.d.ts +1 -1
- package/Materials/shaderMaterial.js +1 -1
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +13 -10
- package/Materials/standardMaterial.js +44 -50
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.d.ts +1 -1
- package/Meshes/Builders/capsuleBuilder.js +1 -1
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +1 -1
- package/Meshes/abstractMesh.js +1 -1
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/linesMesh.d.ts +1 -1
- package/Meshes/linesMesh.js +3 -2
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.lts.d.ts +8 -8
- package/Meshes/mesh.lts.js.map +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +25 -25
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.d.ts +11 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +30 -8
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/coroutine.d.ts +2 -6
- package/Misc/coroutine.js.map +1 -1
- package/Misc/sceneSerializer.js +1 -0
- package/Misc/sceneSerializer.js.map +1 -1
- package/Particles/particleSystem.js +3 -0
- package/Particles/particleSystem.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +4 -1
- package/Rendering/depthPeelingRenderer.js +34 -9
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +5 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/anaglyph.fragment.js +1 -1
- package/Shaders/anaglyph.fragment.js.map +1 -1
- package/Shaders/background.fragment.js +1 -1
- package/Shaders/background.fragment.js.map +1 -1
- package/Shaders/background.vertex.js +1 -1
- package/Shaders/background.vertex.js.map +1 -1
- package/Shaders/blackAndWhite.fragment.js +1 -1
- package/Shaders/blackAndWhite.fragment.js.map +1 -1
- package/Shaders/bloomMerge.fragment.js +1 -1
- package/Shaders/bloomMerge.fragment.js.map +1 -1
- package/Shaders/blur.fragment.js +1 -1
- package/Shaders/blur.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
- package/Shaders/chromaticAberration.fragment.js +1 -1
- package/Shaders/chromaticAberration.fragment.js.map +1 -1
- package/Shaders/circleOfConfusion.fragment.js +1 -1
- package/Shaders/circleOfConfusion.fragment.js.map +1 -1
- package/Shaders/clearQuad.vertex.js +1 -1
- package/Shaders/clearQuad.vertex.js.map +1 -1
- package/Shaders/color.fragment.js +1 -1
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.js +1 -1
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/colorCorrection.fragment.js +1 -1
- package/Shaders/colorCorrection.fragment.js.map +1 -1
- package/Shaders/convolution.fragment.js +1 -1
- package/Shaders/convolution.fragment.js.map +1 -1
- package/Shaders/default.fragment.js +1 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depth.fragment.js +1 -1
- package/Shaders/depth.fragment.js.map +1 -1
- package/Shaders/depth.vertex.js +1 -1
- package/Shaders/depth.vertex.js.map +1 -1
- package/Shaders/depthBoxBlur.fragment.js +1 -1
- package/Shaders/depthBoxBlur.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +1 -1
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
- package/Shaders/displayPass.fragment.js +1 -1
- package/Shaders/displayPass.fragment.js.map +1 -1
- package/Shaders/extractHighlights.fragment.js +1 -1
- package/Shaders/extractHighlights.fragment.js.map +1 -1
- package/Shaders/filter.fragment.js +1 -1
- package/Shaders/filter.fragment.js.map +1 -1
- package/Shaders/fxaa.vertex.js +1 -1
- package/Shaders/fxaa.vertex.js.map +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.fragment.js +1 -1
- package/Shaders/glowMapGeneration.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.vertex.js +1 -1
- package/Shaders/glowMapGeneration.vertex.js.map +1 -1
- package/Shaders/glowMapMerge.fragment.js +1 -1
- package/Shaders/glowMapMerge.fragment.js.map +1 -1
- package/Shaders/glowMapMerge.vertex.js +1 -1
- package/Shaders/glowMapMerge.vertex.js.map +1 -1
- package/Shaders/grain.fragment.js +1 -1
- package/Shaders/grain.fragment.js.map +1 -1
- package/Shaders/hdrFiltering.vertex.js +1 -1
- package/Shaders/hdrFiltering.vertex.js.map +1 -1
- package/Shaders/highlights.fragment.js +1 -1
- package/Shaders/highlights.fragment.js.map +1 -1
- package/Shaders/imageProcessing.fragment.js +1 -1
- package/Shaders/imageProcessing.fragment.js.map +1 -1
- package/Shaders/kernelBlur.fragment.js +1 -1
- package/Shaders/kernelBlur.fragment.js.map +1 -1
- package/Shaders/kernelBlur.vertex.js +1 -1
- package/Shaders/kernelBlur.vertex.js.map +1 -1
- package/Shaders/layer.fragment.js +1 -1
- package/Shaders/layer.fragment.js.map +1 -1
- package/Shaders/layer.vertex.js +1 -1
- package/Shaders/layer.vertex.js.map +1 -1
- package/Shaders/lensFlare.fragment.js +1 -1
- package/Shaders/lensFlare.fragment.js.map +1 -1
- package/Shaders/lensFlare.vertex.js +1 -1
- package/Shaders/lensFlare.vertex.js.map +1 -1
- package/Shaders/lensHighlights.fragment.js +1 -1
- package/Shaders/lensHighlights.fragment.js.map +1 -1
- package/Shaders/line.fragment.js +1 -1
- package/Shaders/line.fragment.js.map +1 -1
- package/Shaders/line.vertex.js +1 -1
- package/Shaders/line.vertex.js.map +1 -1
- package/Shaders/minmaxRedux.fragment.js +1 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/motionBlur.fragment.js +1 -1
- package/Shaders/motionBlur.fragment.js.map +1 -1
- package/Shaders/noise.fragment.js +1 -1
- package/Shaders/noise.fragment.js.map +1 -1
- package/Shaders/outline.fragment.js +1 -1
- package/Shaders/outline.fragment.js.map +1 -1
- package/Shaders/outline.vertex.js +1 -1
- package/Shaders/outline.vertex.js.map +1 -1
- package/Shaders/particles.fragment.js +1 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +1 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/pass.fragment.js +1 -1
- package/Shaders/pass.fragment.js.map +1 -1
- package/Shaders/passCube.fragment.js +1 -1
- package/Shaders/passCube.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.js +1 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/postprocess.vertex.js +1 -1
- package/Shaders/postprocess.vertex.js.map +1 -1
- package/Shaders/procedural.vertex.js +1 -1
- package/Shaders/procedural.vertex.js.map +1 -1
- package/Shaders/rgbdDecode.fragment.js +1 -1
- package/Shaders/rgbdDecode.fragment.js.map +1 -1
- package/Shaders/rgbdEncode.fragment.js +1 -1
- package/Shaders/rgbdEncode.fragment.js.map +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
- package/Shaders/shadowMap.fragment.js +1 -1
- package/Shaders/shadowMap.fragment.js.map +1 -1
- package/Shaders/shadowMap.vertex.js +1 -1
- package/Shaders/shadowMap.vertex.js.map +1 -1
- package/Shaders/sharpen.fragment.js +1 -1
- package/Shaders/sharpen.fragment.js.map +1 -1
- package/Shaders/sprites.fragment.js +1 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +1 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/Shaders/ssaoCombine.fragment.js +1 -1
- package/Shaders/ssaoCombine.fragment.js.map +1 -1
- package/Shaders/standard.fragment.js +1 -1
- package/Shaders/standard.fragment.js.map +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
- package/Shaders/subSurfaceScattering.fragment.js +1 -1
- package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
- package/Shaders/tonemap.fragment.js +1 -1
- package/Shaders/tonemap.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +2 -0
- package/XR/features/WebXRHandTracking.js +34 -14
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLayers.d.ts +78 -0
- package/XR/features/WebXRLayers.js +243 -0
- package/XR/features/WebXRLayers.js.map +1 -0
- package/XR/features/WebXRPlaneDetector.js +8 -12
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/index.d.ts +1 -0
- package/XR/features/index.js +1 -0
- package/XR/features/index.js.map +1 -1
- package/XR/native/index.d.ts +1 -0
- package/XR/native/index.js +2 -0
- package/XR/native/index.js.map +1 -0
- package/XR/native/nativeXRRenderTarget.d.ts +44 -0
- package/XR/native/nativeXRRenderTarget.js +81 -0
- package/XR/native/nativeXRRenderTarget.js.map +1 -0
- package/XR/webXRCamera.js +2 -10
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.js +15 -13
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +4 -0
- package/XR/webXRFeaturesManager.js +4 -0
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +48 -0
- package/XR/webXRLayerWrapper.js +60 -0
- package/XR/webXRLayerWrapper.js.map +1 -0
- package/XR/webXRManagedOutputCanvas.d.ts +2 -1
- package/XR/webXRManagedOutputCanvas.js +36 -29
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +55 -0
- package/XR/webXRRenderTargetTextureProvider.js +63 -0
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -0
- package/XR/webXRSessionManager.d.ts +30 -7
- package/XR/webXRSessionManager.js +62 -64
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRTypes.d.ts +1 -1
- package/XR/webXRTypes.js.map +1 -1
- package/XR/webXRWebGLLayer.d.ts +36 -0
- package/XR/webXRWebGLLayer.js +69 -0
- package/XR/webXRWebGLLayer.js.map +1 -0
- package/abstractScene.d.ts +1 -1
- package/abstractScene.js +1 -1
- package/abstractScene.js.map +1 -1
- package/package.json +35 -5
- package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUEngine } from \"../webgpuEngine\";\r\nimport { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport { 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/** @hidden */\r\nexport class WebGPUCacheBindGroups {\r\n\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 */\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(`Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\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(`Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\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(`Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (this._engine.dbgSanityChecks && (!hardwareTexture || !hardwareTexture.view)) {\r\n Logger.Error(`Trying to bind a null gpu texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = hardwareTexture.view!;\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\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(`Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\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(`Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\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(`Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${drawContext.uniqueId}`, 50);\r\n }\r\n }\r\n }\r\n\r\n let 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":["../../../../sourceES6/core/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUEngine } from \"../webgpuEngine\";\r\nimport { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport { 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/** @hidden */\r\nexport class WebGPUCacheBindGroups {\r\n\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 */\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(`Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\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(`Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\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(`Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (this._engine.dbgSanityChecks && (!hardwareTexture || entry.texture && !hardwareTexture.view || entry.storageTexture && !hardwareTexture.viewForWriting)) {\r\n Logger.Error(`Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\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(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\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(`Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\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(`Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\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(`Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${drawContext.uniqueId}`, 50);\r\n }\r\n }\r\n }\r\n\r\n let 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"]}
|
|
@@ -25,11 +25,11 @@ var WebGPUClearQuad = /** @class */ (function () {
|
|
|
25
25
|
this._cacheRenderPipeline.setMRTAttachments(attachments, textureArray);
|
|
26
26
|
};
|
|
27
27
|
WebGPUClearQuad.prototype.clear = function (renderPass, clearColor, clearDepth, clearStencil, sampleCount) {
|
|
28
|
-
var _a, _b;
|
|
29
28
|
if (sampleCount === void 0) { sampleCount = 1; }
|
|
30
29
|
var renderPass2;
|
|
31
30
|
var bundle = null;
|
|
32
31
|
var bundleKey = 0;
|
|
32
|
+
var isRTTPass = !!this._engine._currentRenderTarget;
|
|
33
33
|
if (renderPass) {
|
|
34
34
|
renderPass2 = renderPass;
|
|
35
35
|
}
|
|
@@ -38,7 +38,8 @@ var WebGPUClearQuad = /** @class */ (function () {
|
|
|
38
38
|
(clearDepth ? Math.pow(2, 32) : 0) +
|
|
39
39
|
(clearStencil ? Math.pow(2, 33) : 0) +
|
|
40
40
|
(this._engine.useReverseDepthBuffer ? Math.pow(2, 34) : 0) +
|
|
41
|
-
|
|
41
|
+
(isRTTPass ? Math.pow(2, 35) : 0) +
|
|
42
|
+
sampleCount * (Math.pow(2, 36));
|
|
42
43
|
bundle = this._bundleCache[bundleKey];
|
|
43
44
|
if (bundle) {
|
|
44
45
|
return bundle;
|
|
@@ -61,12 +62,14 @@ var WebGPUClearQuad = /** @class */ (function () {
|
|
|
61
62
|
this._effect.setDirectColor4("color", clearColor);
|
|
62
63
|
}
|
|
63
64
|
this._effect.setFloat("depthValue", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);
|
|
64
|
-
|
|
65
|
-
var
|
|
66
|
-
var
|
|
65
|
+
webgpuPipelineContext.uniformBuffer.update();
|
|
66
|
+
var bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;
|
|
67
|
+
var bufferLeftOver = webgpuPipelineContext.uniformBuffer.getBuffer();
|
|
68
|
+
var key = bufferLeftOver.uniqueId + "-" + bufferInternals.uniqueId;
|
|
69
|
+
var bindGroups = this._bindGroups[key];
|
|
67
70
|
if (!bindGroups) {
|
|
68
71
|
var bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;
|
|
69
|
-
bindGroups = this._bindGroups[
|
|
72
|
+
bindGroups = this._bindGroups[key] = [];
|
|
70
73
|
bindGroups.push(this._device.createBindGroup({
|
|
71
74
|
layout: bindGroupLayouts[0],
|
|
72
75
|
entries: []
|
|
@@ -82,8 +85,14 @@ var WebGPUClearQuad = /** @class */ (function () {
|
|
|
82
85
|
entries: [{
|
|
83
86
|
binding: 0,
|
|
84
87
|
resource: {
|
|
85
|
-
buffer:
|
|
86
|
-
size:
|
|
88
|
+
buffer: bufferInternals.underlyingResource,
|
|
89
|
+
size: bufferInternals.capacity
|
|
90
|
+
},
|
|
91
|
+
}, {
|
|
92
|
+
binding: 1,
|
|
93
|
+
resource: {
|
|
94
|
+
buffer: bufferLeftOver.underlyingResource,
|
|
95
|
+
size: bufferLeftOver.capacity
|
|
87
96
|
},
|
|
88
97
|
}],
|
|
89
98
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"../../Materials/effect\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { IColor4Like } from \"../../Maths/math.like\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport { Nullable } from \"../../types\";\r\n\r\nimport { WebGPUEngine } from \"../webgpuEngine\";\r\nimport { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @hidden */\r\nexport class WebGPUClearQuad {\r\n\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: number]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: number]: GPURenderBundle } = {};\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): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[]): void {\r\n this._cacheRenderPipeline.setMRTAttachments(attachments, textureArray);\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(renderPass: Nullable<GPURenderPassEncoder>, clearColor?: Nullable<IColor4Like>, clearDepth?: boolean, clearStencil?: boolean, sampleCount = 1): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey = 0;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n bundleKey = (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 sampleCount * (2 ** 35);\r\n\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);\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xFF : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? 519 : 512);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? 7681 : 7680);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xF : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(7, 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 buffer = webgpuPipelineContext.uniformBuffer?.getBuffer() as WebGPUDataBuffer;\r\n let bindGroups = this._bindGroups[buffer.uniqueId];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n bindGroups = this._bindGroups[buffer.uniqueId] = [];\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 binding: 0,\r\n resource: {\r\n buffer: buffer.underlyingResource,\r\n size: buffer.capacity\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":["../../../../sourceES6/core/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,gCAAgC,CAAC;AACxC,OAAO,kCAAkC,CAAC;AAE1C,cAAc;AACd;IAuBI,yBAAY,MAAiB,EAAE,MAAoB,EAAE,iBAA+B;QAjB5E,gBAAW,GAAqC,EAAE,CAAC;QAEnD,iBAAY,GAAuC,EAAE,CAAC;QAgB1D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1I,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACjF,CAAC;IAtBM,+CAAqB,GAA5B,UAA6B,MAAoC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;QAClC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEM,wCAAc,GAArB,UAAsB,MAAwB;QAC1C,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAEM,2CAAiB,GAAxB,UAAyB,WAAqB,EAAE,YAA+B;QAC3E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAaM,+BAAK,GAAZ,UAAa,UAA0C,EAAE,UAAkC,EAAE,UAAoB,EAAE,YAAsB,EAAE,WAAe;QAAf,4BAAA,EAAA,eAAe;QACtJ,IAAI,WAA0D,CAAC;QAC/D,IAAI,MAAM,GAA8B,IAAI,CAAC;QAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;QAEtD,IAAI,UAAU,EAAE;YACZ,WAAW,GAAG,UAAU,CAAC;SAC5B;aAAM;YACH,SAAS,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxH,CAAC,UAAU,CAAC,CAAC,CAAC,SAAA,CAAC,EAAI,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,CAAC,YAAY,CAAC,CAAC,CAAC,SAAA,CAAC,EAAI,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAA,CAAC,EAAI,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,CAAC,SAAS,CAAC,CAAC,CAAC,SAAA,CAAC,EAAI,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,WAAW,GAAG,CAAC,SAAA,CAAC,EAAI,EAAE,CAAA,CAAC,CAAC;YAE5B,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAEtC,IAAI,MAAM,EAAE;gBACR,OAAO,MAAM,CAAC;aACjB;YAED,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;gBACjD,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,YAAY;gBACpD,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;gBAC5C,WAAW,aAAA;aACd,CAAC,CAAC;SACN;QAED,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE3F,IAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAyC,CAAC;QAErF,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SACrD;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAE/I,qBAAqB,CAAC,aAAc,CAAC,MAAM,EAAE,CAAC;QAE9C,IAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1F,IAAM,cAAc,GAAG,qBAAqB,CAAC,aAAc,CAAC,SAAS,EAAsB,CAAC;QAE5F,IAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,GAAG,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC;QAErE,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,UAAU,EAAE;YACb,IAAM,gBAAgB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;YAChE,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,CACX,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBACzB,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBAC3B,OAAO,EAAE,EAAE;aACd,CAAC,CACL,CAAC;YACF,IAAI,CAAC,6BAA6B,CAAC,wBAAwB,EAAE;gBACzD,UAAU,CAAC,IAAI,CACX,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;oBACzB,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAE,EAAE;iBACd,CAAC,CACL,CAAC;aACL;YACD,UAAU,CAAC,IAAI,CACX,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBACzB,MAAM,EAAE,gBAAgB,CAAC,6BAA6B,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,OAAO,EAAE,CAAC;wBACN,OAAO,EAAE,CAAC;wBACV,QAAQ,EAAE;4BACN,MAAM,EAAE,eAAe,CAAC,kBAAkB;4BAC1C,IAAI,EAAE,eAAe,CAAC,QAAQ;yBACjC;qBACJ,EAAE;wBACC,OAAO,EAAE,CAAC;wBACV,QAAQ,EAAE;4BACN,MAAM,EAAE,cAAc,CAAC,kBAAkB;4BACzC,IAAI,EAAE,cAAc,CAAC,QAAQ;yBAChC;qBACJ,CAAC;aACL,CAAC,CACL,CAAC;SACL;QAED,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACxC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9C;QACD,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,GAAI,WAAsC,CAAC,MAAM,EAAE,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;SACzC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IACL,sBAAC;AAAD,CAAC,AA5ID,IA4IC","sourcesContent":["import { Effect } from \"../../Materials/effect\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { IColor4Like } from \"../../Maths/math.like\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport { Nullable } from \"../../types\";\r\n\r\nimport { WebGPUEngine } from \"../webgpuEngine\";\r\nimport { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @hidden */\r\nexport class WebGPUClearQuad {\r\n\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: number]: GPURenderBundle } = {};\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): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[]): void {\r\n this._cacheRenderPipeline.setMRTAttachments(attachments, textureArray);\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(renderPass: Nullable<GPURenderPassEncoder>, clearColor?: Nullable<IColor4Like>, clearDepth?: boolean, clearStencil?: boolean, sampleCount = 1): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey = 0;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n bundleKey = (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 * (2 ** 36);\r\n\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);\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xFF : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? 519 : 512);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? 7681 : 7680);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xF : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(7, 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 binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity\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 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"]}
|
|
@@ -70,13 +70,13 @@ var WebGPUComputeContext = /** @class */ (function () {
|
|
|
70
70
|
Logger.Error("computeDispatch: The texture (name=" + texture.name + ", uniqueId=" + texture.uniqueId + ") is not a storage texture!", 50);
|
|
71
71
|
}
|
|
72
72
|
if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {
|
|
73
|
-
entries[indexInGroupEntries].resource = hardwareTexture.
|
|
73
|
+
entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting;
|
|
74
74
|
}
|
|
75
75
|
else {
|
|
76
76
|
binding.indexInGroupEntries = entries.length;
|
|
77
77
|
entries.push({
|
|
78
78
|
binding: index,
|
|
79
|
-
resource: hardwareTexture.
|
|
79
|
+
resource: hardwareTexture.viewForWriting,
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuComputeContext.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuComputeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { StorageBuffer } from \"../../Buffers/storageBuffer\";\r\nimport { IComputeContext } from \"../../Compute/IComputeContext\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { ComputeBindingList, ComputeBindingMapping, ComputeBindingType } from \"../Extensions/engine.computeShader\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\n\r\n/** @hidden */\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.view!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\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.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}"]}
|
|
1
|
+
{"version":3,"file":"webgpuComputeContext.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuComputeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { StorageBuffer } from \"../../Buffers/storageBuffer\";\r\nimport { IComputeContext } from \"../../Compute/IComputeContext\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { ComputeBindingList, ComputeBindingMapping, ComputeBindingType } from \"../Extensions/engine.computeShader\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\n\r\n/** @hidden */\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}"]}
|
|
@@ -36,6 +36,7 @@ export declare class WebGPUHardwareTexture implements HardwareTextureWrapper {
|
|
|
36
36
|
get msaaTexture(): Nullable<GPUTexture>;
|
|
37
37
|
set msaaTexture(texture: Nullable<GPUTexture>);
|
|
38
38
|
view: Nullable<GPUTextureView>;
|
|
39
|
+
viewForWriting: Nullable<GPUTextureView>;
|
|
39
40
|
format: GPUTextureFormat;
|
|
40
41
|
textureUsages: number;
|
|
41
42
|
textureAdditionalUsages: number;
|
|
@@ -43,7 +44,7 @@ export declare class WebGPUHardwareTexture implements HardwareTextureWrapper {
|
|
|
43
44
|
set(hardwareTexture: GPUTexture): void;
|
|
44
45
|
setMSAATexture(hardwareTexture: GPUTexture): void;
|
|
45
46
|
setUsage(textureSource: number, generateMipMaps: boolean, isCube: boolean, width: number, height: number): void;
|
|
46
|
-
createView(descriptor?: GPUTextureViewDescriptor): void;
|
|
47
|
+
createView(descriptor?: GPUTextureViewDescriptor, createViewForWriting?: boolean): void;
|
|
47
48
|
reset(): void;
|
|
48
49
|
release(): void;
|
|
49
50
|
}
|
|
@@ -11,6 +11,7 @@ var WebGPUHardwareTexture = /** @class */ (function () {
|
|
|
11
11
|
this._webgpuTexture = existingTexture;
|
|
12
12
|
this._webgpuMSAATexture = null;
|
|
13
13
|
this.view = null;
|
|
14
|
+
this.viewForWriting = null;
|
|
14
15
|
}
|
|
15
16
|
Object.defineProperty(WebGPUHardwareTexture.prototype, "underlyingResource", {
|
|
16
17
|
get: function () {
|
|
@@ -47,13 +48,21 @@ var WebGPUHardwareTexture = /** @class */ (function () {
|
|
|
47
48
|
aspect: WebGPUConstants.TextureAspect.All
|
|
48
49
|
});
|
|
49
50
|
};
|
|
50
|
-
WebGPUHardwareTexture.prototype.createView = function (descriptor) {
|
|
51
|
+
WebGPUHardwareTexture.prototype.createView = function (descriptor, createViewForWriting) {
|
|
52
|
+
if (createViewForWriting === void 0) { createViewForWriting = false; }
|
|
51
53
|
this.view = this._webgpuTexture.createView(descriptor);
|
|
54
|
+
if (createViewForWriting && descriptor) {
|
|
55
|
+
var saveNumMipMaps = descriptor.mipLevelCount;
|
|
56
|
+
descriptor.mipLevelCount = 1;
|
|
57
|
+
this.viewForWriting = this._webgpuTexture.createView(descriptor);
|
|
58
|
+
descriptor.mipLevelCount = saveNumMipMaps;
|
|
59
|
+
}
|
|
52
60
|
};
|
|
53
61
|
WebGPUHardwareTexture.prototype.reset = function () {
|
|
54
62
|
this._webgpuTexture = null;
|
|
55
63
|
this._webgpuMSAATexture = null;
|
|
56
64
|
this.view = null;
|
|
65
|
+
this.viewForWriting = null;
|
|
57
66
|
};
|
|
58
67
|
WebGPUHardwareTexture.prototype.release = function () {
|
|
59
68
|
var _a, _b, _c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/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,cAAc;AACd;
|
|
1
|
+
{"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { HardwareTextureWrapper } from '../../Materials/Textures/hardwareTextureWrapper';\r\nimport { InternalTextureSource } from '../../Materials/Textures/internalTexture';\r\nimport { Scalar } from '../../Maths/math.scalar';\r\nimport { Nullable } from '../../types';\r\nimport * as WebGPUConstants from './webgpuConstants';\r\n\r\ndeclare type WebGPUBundleList = import(\"./webgpuBundleList\").WebGPUBundleList;\r\n\r\n/** @hidden */\r\nexport class WebGPUHardwareTexture implements HardwareTextureWrapper {\r\n\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 * @hidden\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 * @hidden\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 * @hidden\r\n */\r\n public _mipmapGenRenderPassDescr: GPURenderPassDescriptor[][];\r\n /** @hidden */\r\n public _mipmapGenBindGroup: GPUBindGroup[][];\r\n\r\n /**\r\n * Cache for the invertYPreMultiplyAlpha function (see WebGPUTextureHelper)\r\n * @hidden\r\n */\r\n public _copyInvertYTempTexture?: GPUTexture;\r\n /** @hidden */\r\n public _copyInvertYRenderPassDescr: GPURenderPassDescriptor;\r\n /** @hidden */\r\n public _copyInvertYBindGroupd: 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 setMSAATexture(hardwareTexture: GPUTexture): void {\r\n this._webgpuMSAATexture = 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"]}
|
|
@@ -138,6 +138,7 @@ var WebGPUShaderProcessingContext = /** @class */ (function () {
|
|
|
138
138
|
"Light31": { binding: { groupIndex: -1, bindingIndex: -1 } },
|
|
139
139
|
"Material": { binding: { groupIndex: -1, bindingIndex: -1 } },
|
|
140
140
|
"Mesh": { binding: { groupIndex: -1, bindingIndex: -1 } },
|
|
141
|
+
"Internals": { binding: { groupIndex: -1, bindingIndex: -1 } },
|
|
141
142
|
};
|
|
142
143
|
WebGPUShaderProcessingContext._KnownUBOs = {
|
|
143
144
|
"Scene": { binding: { groupIndex: 0, bindingIndex: 0 } },
|
|
@@ -175,6 +176,7 @@ var WebGPUShaderProcessingContext = /** @class */ (function () {
|
|
|
175
176
|
"Light31": { binding: { groupIndex: 1, bindingIndex: 31 } },
|
|
176
177
|
"Material": { binding: { groupIndex: 2, bindingIndex: 0 } },
|
|
177
178
|
"Mesh": { binding: { groupIndex: 2, bindingIndex: 1 } },
|
|
179
|
+
"Internals": { binding: { groupIndex: 2, bindingIndex: 2 } },
|
|
178
180
|
};
|
|
179
181
|
return WebGPUShaderProcessingContext;
|
|
180
182
|
}());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuShaderProcessingContext.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuShaderProcessingContext.ts"],"names":[],"mappings":"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AAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7D,MAAM,EAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;KAChE,CAAC;IAEe,wCAAU,GAA+C;QACtE,OAAO,EAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAE1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAE3D,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,EAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;KAC9D,CAAC;IA4HN,oCAAC;CAAA,AA9MD,IA8MC;SA9MY,6BAA6B","sourcesContent":["import { ShaderLanguage } from \"../../Materials/shaderLanguage\";\nimport { ShaderProcessingContext } from \"../Processors/shaderProcessingOptions\";\n\nconst _maxGroups = 4;\nconst _maxBindingsPerGroup = 1 << 16;\n\n// all types not listed are assumed to consume 1 location\nconst _typeToLocationSize: { [key: string]: number } = {\n // GLSL types\n \"mat2\": 2,\n \"mat3\": 3,\n \"mat4\": 4,\n\n // WGSL types\n \"mat2x2\": 2,\n \"mat3x3\": 3,\n \"mat4x4\": 4,\n};\n\n/** @hidden */\nexport interface WebGPUBindingInfo {\n groupIndex: number;\n bindingIndex: number;\n}\n\n/** @hidden */\nexport interface WebGPUTextureDescription {\n autoBindSampler?: boolean;\n isTextureArray: boolean;\n isStorageTexture: boolean;\n textures: Array<WebGPUBindingInfo>;\n sampleType?: GPUTextureSampleType; // not used if the texture is a storage texture\n}\n\n/** @hidden */\nexport interface WebGPUSamplerDescription {\n binding: WebGPUBindingInfo;\n type: GPUSamplerBindingType;\n}\n\n/** @hidden */\nexport interface WebGPUBufferDescription {\n binding: WebGPUBindingInfo;\n}\n\n/** @hidden */\nexport interface WebGPUBindGroupLayoutEntryInfo {\n name: string;\n index: number; // index of the entry (GPUBindGroupLayoutEntry) in the bindGroupLayoutEntries[group] array\n nameInArrayOfTexture?: string; // something like texture0, texture1, ... if texture is an array, else same thing as \"name\"\n}\n\n/**\n * @hidden\n */\nexport class WebGPUShaderProcessingContext implements ShaderProcessingContext {\n\n /** @hidden */\n public static _SimplifiedKnownBindings = true; // if true, use only group=0,binding=0 as a known group/binding for the Scene ubo and use group=1,binding=X for all other bindings\n // if false, see _KnownUBOs for the known groups/bindings used\n\n protected static _SimplifiedKnownUBOs: { [key: string]: WebGPUBufferDescription } = {\n \"Scene\": { binding: { groupIndex: 0, bindingIndex: 0 } },\n \"Light0\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light1\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light2\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light3\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light4\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light5\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light6\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light7\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light8\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light9\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light10\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light11\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light12\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light13\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light14\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light15\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light16\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light17\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light18\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light19\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light20\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light21\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light22\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light23\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light24\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light25\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light26\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light27\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light28\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light29\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light30\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light31\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Material\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Mesh\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n };\n\n protected static _KnownUBOs: { [key: string]: WebGPUBufferDescription } = {\n \"Scene\": { binding: { groupIndex: 0, bindingIndex: 0 } },\n\n \"Light0\": { binding: { groupIndex: 1, bindingIndex: 0 } },\n \"Light1\": { binding: { groupIndex: 1, bindingIndex: 1 } },\n \"Light2\": { binding: { groupIndex: 1, bindingIndex: 2 } },\n \"Light3\": { binding: { groupIndex: 1, bindingIndex: 3 } },\n \"Light4\": { binding: { groupIndex: 1, bindingIndex: 4 } },\n \"Light5\": { binding: { groupIndex: 1, bindingIndex: 5 } },\n \"Light6\": { binding: { groupIndex: 1, bindingIndex: 6 } },\n \"Light7\": { binding: { groupIndex: 1, bindingIndex: 7 } },\n \"Light8\": { binding: { groupIndex: 1, bindingIndex: 8 } },\n \"Light9\": { binding: { groupIndex: 1, bindingIndex: 9 } },\n \"Light10\": { binding: { groupIndex: 1, bindingIndex: 10 } },\n \"Light11\": { binding: { groupIndex: 1, bindingIndex: 11 } },\n \"Light12\": { binding: { groupIndex: 1, bindingIndex: 12 } },\n \"Light13\": { binding: { groupIndex: 1, bindingIndex: 13 } },\n \"Light14\": { binding: { groupIndex: 1, bindingIndex: 14 } },\n \"Light15\": { binding: { groupIndex: 1, bindingIndex: 15 } },\n \"Light16\": { binding: { groupIndex: 1, bindingIndex: 16 } },\n \"Light17\": { binding: { groupIndex: 1, bindingIndex: 17 } },\n \"Light18\": { binding: { groupIndex: 1, bindingIndex: 18 } },\n \"Light19\": { binding: { groupIndex: 1, bindingIndex: 19 } },\n \"Light20\": { binding: { groupIndex: 1, bindingIndex: 20 } },\n \"Light21\": { binding: { groupIndex: 1, bindingIndex: 21 } },\n \"Light22\": { binding: { groupIndex: 1, bindingIndex: 22 } },\n \"Light23\": { binding: { groupIndex: 1, bindingIndex: 23 } },\n \"Light24\": { binding: { groupIndex: 1, bindingIndex: 24 } },\n \"Light25\": { binding: { groupIndex: 1, bindingIndex: 25 } },\n \"Light26\": { binding: { groupIndex: 1, bindingIndex: 26 } },\n \"Light27\": { binding: { groupIndex: 1, bindingIndex: 27 } },\n \"Light28\": { binding: { groupIndex: 1, bindingIndex: 28 } },\n \"Light29\": { binding: { groupIndex: 1, bindingIndex: 29 } },\n \"Light30\": { binding: { groupIndex: 1, bindingIndex: 30 } },\n \"Light31\": { binding: { groupIndex: 1, bindingIndex: 31 } },\n\n \"Material\": { binding: { groupIndex: 2, bindingIndex: 0 } },\n \"Mesh\": { binding: { groupIndex: 2, bindingIndex: 1 } },\n };\n\n public static get KnownUBOs() {\n return WebGPUShaderProcessingContext._SimplifiedKnownBindings ? WebGPUShaderProcessingContext._SimplifiedKnownUBOs : WebGPUShaderProcessingContext._KnownUBOs;\n }\n\n public shaderLanguage: ShaderLanguage;\n\n public uboNextBindingIndex: number;\n public freeGroupIndex: number;\n public freeBindingIndex: number;\n\n public availableVaryings: { [key: string]: number };\n public availableAttributes: { [key: string]: number };\n public availableBuffers: { [key: string]: WebGPUBufferDescription };\n public availableTextures: { [key: string]: WebGPUTextureDescription };\n public availableSamplers: { [key: string]: WebGPUSamplerDescription };\n\n public leftOverUniforms: { name: string, type: string, length: number }[];\n\n public orderedAttributes: string[];\n public bindGroupLayoutEntries: GPUBindGroupLayoutEntry[][];\n public bindGroupLayoutEntryInfo: WebGPUBindGroupLayoutEntryInfo[][];\n public bindGroupEntries: GPUBindGroupEntry[][];\n public bufferNames: string[]; // list of all uniform/storage buffer names used in the shader\n public textureNames: string[]; // list of all texture names used in the shader\n public samplerNames: string[]; // list of all sampler names used in the shader\n public attributeNamesFromEffect: string[];\n public attributeLocationsFromEffect: number[];\n\n private _attributeNextLocation: number;\n private _varyingNextLocation: number;\n\n constructor(shaderLanguage: ShaderLanguage) {\n this.shaderLanguage = shaderLanguage;\n\n this._attributeNextLocation = 0;\n this._varyingNextLocation = 0;\n this.freeGroupIndex = 0;\n this.freeBindingIndex = 0;\n\n this.availableVaryings = {};\n this.availableAttributes = {};\n this.availableBuffers = {};\n this.availableTextures = {};\n this.availableSamplers = {};\n\n this.orderedAttributes = [];\n this.bindGroupLayoutEntries = [];\n this.bindGroupLayoutEntryInfo = [];\n this.bindGroupEntries = [];\n this.bufferNames = [];\n this.textureNames = [];\n this.samplerNames = [];\n\n this.leftOverUniforms = [];\n\n this._findStartingGroupBinding();\n }\n\n private _findStartingGroupBinding(): void {\n const knownUBOs = WebGPUShaderProcessingContext.KnownUBOs;\n\n const groups: number[] = [];\n for (const name in knownUBOs) {\n const binding = knownUBOs[name].binding;\n if (binding.groupIndex === -1) {\n continue;\n }\n if (groups[binding.groupIndex] === undefined) {\n groups[binding.groupIndex] = binding.bindingIndex;\n } else {\n groups[binding.groupIndex] = Math.max(groups[binding.groupIndex], binding.bindingIndex);\n }\n }\n\n this.freeGroupIndex = groups.length - 1;\n if (this.freeGroupIndex === 0) {\n this.freeGroupIndex++;\n this.freeBindingIndex = 0;\n } else {\n this.freeBindingIndex = groups[groups.length - 1] + 1;\n }\n }\n\n public getAttributeNextLocation(dataType: string, arrayLength: number = 0): number {\n const index = this._attributeNextLocation;\n\n this._attributeNextLocation += (_typeToLocationSize[dataType] ?? 1) * (arrayLength || 1);\n\n return index;\n }\n\n public getVaryingNextLocation(dataType: string, arrayLength: number = 0): number {\n const index = this._varyingNextLocation;\n\n this._varyingNextLocation += (_typeToLocationSize[dataType] ?? 1) * (arrayLength || 1);\n\n return index;\n }\n\n public getNextFreeUBOBinding() {\n return this._getNextFreeBinding(1);\n }\n\n private _getNextFreeBinding(bindingCount: number) {\n if (this.freeBindingIndex > _maxBindingsPerGroup - bindingCount) {\n this.freeGroupIndex++;\n this.freeBindingIndex = 0;\n }\n\n if (this.freeGroupIndex === _maxGroups) {\n throw \"Too many textures or UBOs have been declared and it is not supported in WebGPU.\";\n }\n\n const returnValue = {\n groupIndex: this.freeGroupIndex,\n bindingIndex: this.freeBindingIndex\n };\n\n this.freeBindingIndex += bindingCount;\n\n return returnValue;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"webgpuShaderProcessingContext.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuShaderProcessingContext.ts"],"names":[],"mappings":"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AAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5D,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7D,MAAM,EAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7D,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;KACjE,CAAC;IAEe,wCAAU,GAA+C;QACtE,OAAO,EAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAE1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,QAAQ,EAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC1D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAC3D,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE;QAE3D,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,EAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC3D,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;KAC/D,CAAC;IA4HN,oCAAC;CAAA,AAhND,IAgNC;SAhNY,6BAA6B","sourcesContent":["import { ShaderLanguage } from \"../../Materials/shaderLanguage\";\nimport { ShaderProcessingContext } from \"../Processors/shaderProcessingOptions\";\n\nconst _maxGroups = 4;\nconst _maxBindingsPerGroup = 1 << 16;\n\n// all types not listed are assumed to consume 1 location\nconst _typeToLocationSize: { [key: string]: number } = {\n // GLSL types\n \"mat2\": 2,\n \"mat3\": 3,\n \"mat4\": 4,\n\n // WGSL types\n \"mat2x2\": 2,\n \"mat3x3\": 3,\n \"mat4x4\": 4,\n};\n\n/** @hidden */\nexport interface WebGPUBindingInfo {\n groupIndex: number;\n bindingIndex: number;\n}\n\n/** @hidden */\nexport interface WebGPUTextureDescription {\n autoBindSampler?: boolean;\n isTextureArray: boolean;\n isStorageTexture: boolean;\n textures: Array<WebGPUBindingInfo>;\n sampleType?: GPUTextureSampleType; // not used if the texture is a storage texture\n}\n\n/** @hidden */\nexport interface WebGPUSamplerDescription {\n binding: WebGPUBindingInfo;\n type: GPUSamplerBindingType;\n}\n\n/** @hidden */\nexport interface WebGPUBufferDescription {\n binding: WebGPUBindingInfo;\n}\n\n/** @hidden */\nexport interface WebGPUBindGroupLayoutEntryInfo {\n name: string;\n index: number; // index of the entry (GPUBindGroupLayoutEntry) in the bindGroupLayoutEntries[group] array\n nameInArrayOfTexture?: string; // something like texture0, texture1, ... if texture is an array, else same thing as \"name\"\n}\n\n/**\n * @hidden\n */\nexport class WebGPUShaderProcessingContext implements ShaderProcessingContext {\n\n /** @hidden */\n public static _SimplifiedKnownBindings = true; // if true, use only group=0,binding=0 as a known group/binding for the Scene ubo and use group=1,binding=X for all other bindings\n // if false, see _KnownUBOs for the known groups/bindings used\n\n protected static _SimplifiedKnownUBOs: { [key: string]: WebGPUBufferDescription } = {\n \"Scene\": { binding: { groupIndex: 0, bindingIndex: 0 } },\n \"Light0\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light1\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light2\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light3\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light4\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light5\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light6\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light7\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light8\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light9\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light10\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light11\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light12\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light13\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light14\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light15\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light16\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light17\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light18\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light19\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light20\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light21\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light22\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light23\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light24\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light25\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light26\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light27\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light28\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light29\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light30\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Light31\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Material\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Mesh\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n \"Internals\": { binding: { groupIndex: -1, bindingIndex: -1 } },\n };\n\n protected static _KnownUBOs: { [key: string]: WebGPUBufferDescription } = {\n \"Scene\": { binding: { groupIndex: 0, bindingIndex: 0 } },\n\n \"Light0\": { binding: { groupIndex: 1, bindingIndex: 0 } },\n \"Light1\": { binding: { groupIndex: 1, bindingIndex: 1 } },\n \"Light2\": { binding: { groupIndex: 1, bindingIndex: 2 } },\n \"Light3\": { binding: { groupIndex: 1, bindingIndex: 3 } },\n \"Light4\": { binding: { groupIndex: 1, bindingIndex: 4 } },\n \"Light5\": { binding: { groupIndex: 1, bindingIndex: 5 } },\n \"Light6\": { binding: { groupIndex: 1, bindingIndex: 6 } },\n \"Light7\": { binding: { groupIndex: 1, bindingIndex: 7 } },\n \"Light8\": { binding: { groupIndex: 1, bindingIndex: 8 } },\n \"Light9\": { binding: { groupIndex: 1, bindingIndex: 9 } },\n \"Light10\": { binding: { groupIndex: 1, bindingIndex: 10 } },\n \"Light11\": { binding: { groupIndex: 1, bindingIndex: 11 } },\n \"Light12\": { binding: { groupIndex: 1, bindingIndex: 12 } },\n \"Light13\": { binding: { groupIndex: 1, bindingIndex: 13 } },\n \"Light14\": { binding: { groupIndex: 1, bindingIndex: 14 } },\n \"Light15\": { binding: { groupIndex: 1, bindingIndex: 15 } },\n \"Light16\": { binding: { groupIndex: 1, bindingIndex: 16 } },\n \"Light17\": { binding: { groupIndex: 1, bindingIndex: 17 } },\n \"Light18\": { binding: { groupIndex: 1, bindingIndex: 18 } },\n \"Light19\": { binding: { groupIndex: 1, bindingIndex: 19 } },\n \"Light20\": { binding: { groupIndex: 1, bindingIndex: 20 } },\n \"Light21\": { binding: { groupIndex: 1, bindingIndex: 21 } },\n \"Light22\": { binding: { groupIndex: 1, bindingIndex: 22 } },\n \"Light23\": { binding: { groupIndex: 1, bindingIndex: 23 } },\n \"Light24\": { binding: { groupIndex: 1, bindingIndex: 24 } },\n \"Light25\": { binding: { groupIndex: 1, bindingIndex: 25 } },\n \"Light26\": { binding: { groupIndex: 1, bindingIndex: 26 } },\n \"Light27\": { binding: { groupIndex: 1, bindingIndex: 27 } },\n \"Light28\": { binding: { groupIndex: 1, bindingIndex: 28 } },\n \"Light29\": { binding: { groupIndex: 1, bindingIndex: 29 } },\n \"Light30\": { binding: { groupIndex: 1, bindingIndex: 30 } },\n \"Light31\": { binding: { groupIndex: 1, bindingIndex: 31 } },\n\n \"Material\": { binding: { groupIndex: 2, bindingIndex: 0 } },\n \"Mesh\": { binding: { groupIndex: 2, bindingIndex: 1 } },\n \"Internals\": { binding: { groupIndex: 2, bindingIndex: 2 } },\n };\n\n public static get KnownUBOs() {\n return WebGPUShaderProcessingContext._SimplifiedKnownBindings ? WebGPUShaderProcessingContext._SimplifiedKnownUBOs : WebGPUShaderProcessingContext._KnownUBOs;\n }\n\n public shaderLanguage: ShaderLanguage;\n\n public uboNextBindingIndex: number;\n public freeGroupIndex: number;\n public freeBindingIndex: number;\n\n public availableVaryings: { [key: string]: number };\n public availableAttributes: { [key: string]: number };\n public availableBuffers: { [key: string]: WebGPUBufferDescription };\n public availableTextures: { [key: string]: WebGPUTextureDescription };\n public availableSamplers: { [key: string]: WebGPUSamplerDescription };\n\n public leftOverUniforms: { name: string, type: string, length: number }[];\n\n public orderedAttributes: string[];\n public bindGroupLayoutEntries: GPUBindGroupLayoutEntry[][];\n public bindGroupLayoutEntryInfo: WebGPUBindGroupLayoutEntryInfo[][];\n public bindGroupEntries: GPUBindGroupEntry[][];\n public bufferNames: string[]; // list of all uniform/storage buffer names used in the shader\n public textureNames: string[]; // list of all texture names used in the shader\n public samplerNames: string[]; // list of all sampler names used in the shader\n public attributeNamesFromEffect: string[];\n public attributeLocationsFromEffect: number[];\n\n private _attributeNextLocation: number;\n private _varyingNextLocation: number;\n\n constructor(shaderLanguage: ShaderLanguage) {\n this.shaderLanguage = shaderLanguage;\n\n this._attributeNextLocation = 0;\n this._varyingNextLocation = 0;\n this.freeGroupIndex = 0;\n this.freeBindingIndex = 0;\n\n this.availableVaryings = {};\n this.availableAttributes = {};\n this.availableBuffers = {};\n this.availableTextures = {};\n this.availableSamplers = {};\n\n this.orderedAttributes = [];\n this.bindGroupLayoutEntries = [];\n this.bindGroupLayoutEntryInfo = [];\n this.bindGroupEntries = [];\n this.bufferNames = [];\n this.textureNames = [];\n this.samplerNames = [];\n\n this.leftOverUniforms = [];\n\n this._findStartingGroupBinding();\n }\n\n private _findStartingGroupBinding(): void {\n const knownUBOs = WebGPUShaderProcessingContext.KnownUBOs;\n\n const groups: number[] = [];\n for (const name in knownUBOs) {\n const binding = knownUBOs[name].binding;\n if (binding.groupIndex === -1) {\n continue;\n }\n if (groups[binding.groupIndex] === undefined) {\n groups[binding.groupIndex] = binding.bindingIndex;\n } else {\n groups[binding.groupIndex] = Math.max(groups[binding.groupIndex], binding.bindingIndex);\n }\n }\n\n this.freeGroupIndex = groups.length - 1;\n if (this.freeGroupIndex === 0) {\n this.freeGroupIndex++;\n this.freeBindingIndex = 0;\n } else {\n this.freeBindingIndex = groups[groups.length - 1] + 1;\n }\n }\n\n public getAttributeNextLocation(dataType: string, arrayLength: number = 0): number {\n const index = this._attributeNextLocation;\n\n this._attributeNextLocation += (_typeToLocationSize[dataType] ?? 1) * (arrayLength || 1);\n\n return index;\n }\n\n public getVaryingNextLocation(dataType: string, arrayLength: number = 0): number {\n const index = this._varyingNextLocation;\n\n this._varyingNextLocation += (_typeToLocationSize[dataType] ?? 1) * (arrayLength || 1);\n\n return index;\n }\n\n public getNextFreeUBOBinding() {\n return this._getNextFreeBinding(1);\n }\n\n private _getNextFreeBinding(bindingCount: number) {\n if (this.freeBindingIndex > _maxBindingsPerGroup - bindingCount) {\n this.freeGroupIndex++;\n this.freeBindingIndex = 0;\n }\n\n if (this.freeGroupIndex === _maxGroups) {\n throw \"Too many textures or UBOs have been declared and it is not supported in WebGPU.\";\n }\n\n const returnValue = {\n groupIndex: this.freeGroupIndex,\n bindingIndex: this.freeBindingIndex\n };\n\n this.freeBindingIndex += bindingCount;\n\n return returnValue;\n }\n}"]}
|
|
@@ -6,6 +6,7 @@ import { WebGPUSamplerDescription, WebGPUShaderProcessingContext, WebGPUTextureD
|
|
|
6
6
|
export declare abstract class WebGPUShaderProcessor implements IShaderProcessor {
|
|
7
7
|
static readonly AutoSamplerSuffix = "Sampler";
|
|
8
8
|
static readonly LeftOvertUBOName = "LeftOver";
|
|
9
|
+
static readonly InternalsUBOName = "Internals";
|
|
9
10
|
static UniformSizes: {
|
|
10
11
|
[type: string]: number;
|
|
11
12
|
};
|
|
@@ -39,4 +40,5 @@ export declare abstract class WebGPUShaderProcessor implements IShaderProcessor
|
|
|
39
40
|
protected _addTextureBindingDescription(name: string, textureInfo: WebGPUTextureDescription, textureIndex: number, dimension: Nullable<GPUTextureViewDimension>, format: Nullable<GPUTextureFormat>, isVertex: boolean): void;
|
|
40
41
|
protected _addSamplerBindingDescription(name: string, samplerInfo: WebGPUSamplerDescription, isVertex: boolean): void;
|
|
41
42
|
protected _addBufferBindingDescription(name: string, uniformBufferInfo: WebGPUBufferDescription, bufferType: GPUBufferBindingType, isVertex: boolean): void;
|
|
43
|
+
protected _injectStartingAndEndingCode(code: string, mainFuncDecl: string, startingCode?: string, endingCode?: string): string;
|
|
42
44
|
}
|
|
@@ -185,8 +185,31 @@ var WebGPUShaderProcessor = /** @class */ (function () {
|
|
|
185
185
|
this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;
|
|
186
186
|
}
|
|
187
187
|
};
|
|
188
|
+
WebGPUShaderProcessor.prototype._injectStartingAndEndingCode = function (code, mainFuncDecl, startingCode, endingCode) {
|
|
189
|
+
if (startingCode) {
|
|
190
|
+
var idx = code.indexOf(mainFuncDecl);
|
|
191
|
+
if (idx >= 0) {
|
|
192
|
+
while (idx++ < code.length && code.charAt(idx) != '{') { }
|
|
193
|
+
if (idx < code.length) {
|
|
194
|
+
while (idx++ < code.length && code.charAt(idx) != '\n') { }
|
|
195
|
+
if (idx < code.length) {
|
|
196
|
+
var part1 = code.substring(0, idx + 1);
|
|
197
|
+
var part2 = code.substring(idx + 1);
|
|
198
|
+
code = part1 + startingCode + part2;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (endingCode) {
|
|
204
|
+
var lastClosingCurly = code.lastIndexOf("}");
|
|
205
|
+
code = code.substring(0, lastClosingCurly);
|
|
206
|
+
code += endingCode + "\n}";
|
|
207
|
+
}
|
|
208
|
+
return code;
|
|
209
|
+
};
|
|
188
210
|
WebGPUShaderProcessor.AutoSamplerSuffix = "Sampler";
|
|
189
211
|
WebGPUShaderProcessor.LeftOvertUBOName = "LeftOver";
|
|
212
|
+
WebGPUShaderProcessor.InternalsUBOName = "Internals";
|
|
190
213
|
WebGPUShaderProcessor.UniformSizes = {
|
|
191
214
|
// GLSL types
|
|
192
215
|
"bool": 1,
|