@babylonjs/core 6.29.0 → 6.29.2

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.
Files changed (300) hide show
  1. package/Actions/abstractActionManager.js +1 -1
  2. package/Actions/abstractActionManager.js.map +1 -1
  3. package/Actions/actionManager.js +3 -3
  4. package/Actions/actionManager.js.map +1 -1
  5. package/Animations/animatable.js +1 -1
  6. package/Animations/animatable.js.map +1 -1
  7. package/Animations/animation.js +2 -2
  8. package/Animations/animation.js.map +1 -1
  9. package/Animations/pathCursor.js +1 -1
  10. package/Animations/pathCursor.js.map +1 -1
  11. package/Audio/audioSceneComponent.js +2 -2
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/soundTrack.js +1 -1
  14. package/Audio/soundTrack.js.map +1 -1
  15. package/Behaviors/Meshes/fadeInOutBehavior.js +1 -2
  16. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  17. package/Bones/bone.js +2 -2
  18. package/Bones/bone.js.map +1 -1
  19. package/Bones/skeleton.js +2 -2
  20. package/Bones/skeleton.js.map +1 -1
  21. package/Cameras/arcRotateCamera.js +13 -37
  22. package/Cameras/arcRotateCamera.js.map +1 -1
  23. package/Cameras/camera.d.ts +0 -21
  24. package/Cameras/camera.js +1 -36
  25. package/Cameras/camera.js.map +1 -1
  26. package/Cameras/targetCamera.js +30 -51
  27. package/Cameras/targetCamera.js.map +1 -1
  28. package/Culling/Octrees/octree.js +1 -1
  29. package/Culling/Octrees/octree.js.map +1 -1
  30. package/Culling/Octrees/octreeBlock.js +1 -1
  31. package/Culling/Octrees/octreeBlock.js.map +1 -1
  32. package/Culling/ray.js +1 -1
  33. package/Culling/ray.js.map +1 -1
  34. package/Debug/axesViewer.d.ts +3 -1
  35. package/Debug/axesViewer.js +14 -11
  36. package/Debug/axesViewer.js.map +1 -1
  37. package/Engines/Extensions/engine.multiRender.js +8 -8
  38. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  39. package/Engines/Extensions/engine.textureSelector.js +1 -1
  40. package/Engines/Extensions/engine.textureSelector.js.map +1 -1
  41. package/Engines/Processors/shaderCodeInliner.js +1 -1
  42. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  43. package/Engines/WebGPU/Extensions/engine.computeShader.js +2 -10
  44. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  45. package/Engines/WebGPU/Extensions/engine.debugging.js +3 -6
  46. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -1
  48. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  49. package/Engines/WebGPU/Extensions/engine.multiRender.js +9 -14
  50. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  51. package/Engines/WebGPU/Extensions/engine.query.js +2 -6
  52. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  53. package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -10
  54. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  55. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  56. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  57. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -2
  58. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  59. package/Engines/WebGPU/webgpuBundleList.js +2 -1
  60. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  61. package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
  62. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  63. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  64. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +4 -7
  65. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  66. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
  68. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  69. package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
  70. package/Engines/WebGPU/webgpuCacheSampler.js +5 -5
  71. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  72. package/Engines/WebGPU/webgpuClearQuad.js +2 -2
  73. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  74. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -12
  75. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  76. package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
  77. package/Engines/WebGPU/webgpuMaterialContext.js +14 -10
  78. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  79. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -12
  80. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  81. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +5 -8
  82. package/Engines/WebGPU/webgpuSnapshotRendering.js +24 -33
  83. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  84. package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -1
  85. package/Engines/WebGPU/webgpuTextureHelper.js +11 -16
  86. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  87. package/Engines/constants.d.ts +2 -2
  88. package/Engines/constants.js +2 -2
  89. package/Engines/constants.js.map +1 -1
  90. package/Engines/engine.js +2 -2
  91. package/Engines/engine.js.map +1 -1
  92. package/Engines/engineCapabilities.d.ts +2 -0
  93. package/Engines/engineCapabilities.js.map +1 -1
  94. package/Engines/engineStore.js +1 -1
  95. package/Engines/engineStore.js.map +1 -1
  96. package/Engines/nativeEngine.js +1 -0
  97. package/Engines/nativeEngine.js.map +1 -1
  98. package/Engines/nullEngine.js +1 -0
  99. package/Engines/nullEngine.js.map +1 -1
  100. package/Engines/thinEngine.js +6 -2
  101. package/Engines/thinEngine.js.map +1 -1
  102. package/Engines/webgpuEngine.d.ts +27 -32
  103. package/Engines/webgpuEngine.js +237 -317
  104. package/Engines/webgpuEngine.js.map +1 -1
  105. package/Gizmos/boundingBoxGizmo.js +1 -1
  106. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  107. package/Gizmos/cameraGizmo.d.ts +3 -1
  108. package/Gizmos/cameraGizmo.js +11 -8
  109. package/Gizmos/cameraGizmo.js.map +1 -1
  110. package/Layers/effectLayerSceneComponent.js +2 -2
  111. package/Layers/effectLayerSceneComponent.js.map +1 -1
  112. package/Layers/layerSceneComponent.js +1 -1
  113. package/Layers/layerSceneComponent.js.map +1 -1
  114. package/LensFlares/lensFlareSystem.js +1 -1
  115. package/LensFlares/lensFlareSystem.js.map +1 -1
  116. package/LensFlares/lensFlareSystemSceneComponent.js +2 -2
  117. package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
  118. package/Lights/Shadows/shadowGenerator.js +1 -1
  119. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  120. package/Lights/light.js +2 -2
  121. package/Lights/light.js.map +1 -1
  122. package/Loading/Plugins/babylonFileLoader.js +1 -1
  123. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  124. package/Loading/sceneLoader.js +3 -3
  125. package/Loading/sceneLoader.js.map +1 -1
  126. package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +2 -2
  127. package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
  128. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +4 -1
  129. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
  131. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
  133. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  134. package/Materials/Node/nodeMaterial.js +1 -1
  135. package/Materials/Node/nodeMaterial.js.map +1 -1
  136. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +2 -2
  137. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  138. package/Materials/Node/nodeMaterialBuildState.js +4 -4
  139. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  140. package/Materials/Node/nodeMaterialBuildStateSharedData.js +12 -12
  141. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  142. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
  143. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
  144. package/Materials/Textures/baseTexture.js +1 -1
  145. package/Materials/Textures/baseTexture.js.map +1 -1
  146. package/Materials/Textures/dynamicTexture.d.ts +4 -3
  147. package/Materials/Textures/dynamicTexture.js +10 -6
  148. package/Materials/Textures/dynamicTexture.js.map +1 -1
  149. package/Materials/Textures/externalTexture.d.ts +4 -0
  150. package/Materials/Textures/externalTexture.js +4 -0
  151. package/Materials/Textures/externalTexture.js.map +1 -1
  152. package/Materials/Textures/internalTexture.d.ts +0 -4
  153. package/Materials/Textures/internalTexture.js.map +1 -1
  154. package/Materials/Textures/renderTargetTexture.js +1 -1
  155. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  156. package/Materials/Textures/textureSampler.d.ts +4 -0
  157. package/Materials/Textures/textureSampler.js.map +1 -1
  158. package/Materials/material.js +1 -1
  159. package/Materials/material.js.map +1 -1
  160. package/Materials/multiMaterial.js +1 -1
  161. package/Materials/multiMaterial.js.map +1 -1
  162. package/Materials/shaderMaterial.js +1 -1
  163. package/Materials/shaderMaterial.js.map +1 -1
  164. package/Maths/math.path.d.ts +9 -1
  165. package/Maths/math.path.js +23 -7
  166. package/Maths/math.path.js.map +1 -1
  167. package/Maths/math.vector.d.ts +93 -0
  168. package/Maths/math.vector.js +157 -26
  169. package/Maths/math.vector.js.map +1 -1
  170. package/Meshes/Builders/cylinderBuilder.js +5 -5
  171. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  172. package/Meshes/Builders/decalBuilder.js +1 -1
  173. package/Meshes/Builders/decalBuilder.js.map +1 -1
  174. package/Meshes/Builders/discBuilder.js +4 -4
  175. package/Meshes/Builders/discBuilder.js.map +1 -1
  176. package/Meshes/Builders/goldbergBuilder.js +4 -4
  177. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  178. package/Meshes/Builders/groundBuilder.js +4 -4
  179. package/Meshes/Builders/groundBuilder.js.map +1 -1
  180. package/Meshes/Builders/icoSphereBuilder.js +4 -4
  181. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  182. package/Meshes/Builders/latheBuilder.js +1 -1
  183. package/Meshes/Builders/latheBuilder.js.map +1 -1
  184. package/Meshes/Builders/linesBuilder.js +2 -2
  185. package/Meshes/Builders/linesBuilder.js.map +1 -1
  186. package/Meshes/Builders/polyhedronBuilder.js +6 -6
  187. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  188. package/Meshes/Builders/shapeBuilder.js +1 -1
  189. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  190. package/Meshes/Builders/textBuilder.js +13 -5
  191. package/Meshes/Builders/textBuilder.js.map +1 -1
  192. package/Meshes/Builders/torusKnotBuilder.js +4 -4
  193. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  194. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -1
  195. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  196. package/Meshes/Node/Blocks/Sources/boxBlock.js +1 -0
  197. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  198. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +1 -0
  199. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  200. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +1 -0
  201. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  202. package/Meshes/Node/Blocks/Sources/discBlock.js +1 -0
  203. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  204. package/Meshes/Node/Blocks/Sources/gridBlock.js +1 -0
  205. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  206. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +1 -0
  207. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  208. package/Meshes/Node/Blocks/Sources/planeBlock.js +1 -0
  209. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  210. package/Meshes/Node/Blocks/Sources/sphereBlock.js +1 -0
  211. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  212. package/Meshes/Node/Blocks/Sources/torusBlock.js +1 -0
  213. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  214. package/Meshes/Node/nodeGeometry.js +1 -1
  215. package/Meshes/Node/nodeGeometry.js.map +1 -1
  216. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  217. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  218. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +14 -0
  219. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +32 -5
  220. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  221. package/Meshes/abstractMesh.js +5 -5
  222. package/Meshes/abstractMesh.js.map +1 -1
  223. package/Meshes/csg.js +5 -5
  224. package/Meshes/csg.js.map +1 -1
  225. package/Meshes/geodesicMesh.js +1 -1
  226. package/Meshes/geodesicMesh.js.map +1 -1
  227. package/Meshes/mesh.js +14 -10
  228. package/Meshes/mesh.js.map +1 -1
  229. package/Meshes/mesh.vertexData.js +1 -1
  230. package/Meshes/mesh.vertexData.js.map +1 -1
  231. package/Meshes/meshSimplification.js +2 -2
  232. package/Meshes/meshSimplification.js.map +1 -1
  233. package/Meshes/polygonMesh.js +7 -7
  234. package/Meshes/polygonMesh.js.map +1 -1
  235. package/Meshes/thinInstanceMesh.js +1 -1
  236. package/Meshes/thinInstanceMesh.js.map +1 -1
  237. package/Misc/codeStringParsingTools.d.ts +2 -1
  238. package/Misc/codeStringParsingTools.js +3 -2
  239. package/Misc/codeStringParsingTools.js.map +1 -1
  240. package/Misc/dds.js +1 -1
  241. package/Misc/dds.js.map +1 -1
  242. package/Misc/filesInput.js +1 -1
  243. package/Misc/filesInput.js.map +1 -1
  244. package/Misc/greasedLineTools.d.ts +2 -1
  245. package/Misc/greasedLineTools.js +2 -0
  246. package/Misc/greasedLineTools.js.map +1 -1
  247. package/Misc/precisionDate.js +4 -2
  248. package/Misc/precisionDate.js.map +1 -1
  249. package/Misc/sceneOptimizer.js +2 -2
  250. package/Misc/sceneOptimizer.js.map +1 -1
  251. package/Morph/morphTarget.js +1 -1
  252. package/Morph/morphTarget.js.map +1 -1
  253. package/Particles/gpuParticleSystem.js +1 -1
  254. package/Particles/gpuParticleSystem.js.map +1 -1
  255. package/Particles/particleSystem.js +2 -2
  256. package/Particles/particleSystem.js.map +1 -1
  257. package/Particles/particleSystemComponent.js +2 -2
  258. package/Particles/particleSystemComponent.js.map +1 -1
  259. package/Particles/particleSystemSet.js +1 -1
  260. package/Particles/particleSystemSet.js.map +1 -1
  261. package/Physics/v1/Plugins/cannonJSPlugin.js +2 -2
  262. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
  263. package/Physics/v2/Plugins/havokPlugin.js +3 -1
  264. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  265. package/PostProcesses/postProcess.d.ts +1 -0
  266. package/PostProcesses/postProcess.js +30 -23
  267. package/PostProcesses/postProcess.js.map +1 -1
  268. package/PostProcesses/volumetricLightScatteringPostProcess.js +2 -2
  269. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  270. package/Probes/reflectionProbe.js +1 -1
  271. package/Probes/reflectionProbe.js.map +1 -1
  272. package/Rendering/edgesRenderer.js +3 -3
  273. package/Rendering/edgesRenderer.js.map +1 -1
  274. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +2 -1
  275. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  276. package/Rendering/prePassRenderer.js +8 -4
  277. package/Rendering/prePassRenderer.js.map +1 -1
  278. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +2 -1
  279. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  280. package/Sprites/spriteManager.js +1 -1
  281. package/Sprites/spriteManager.js.map +1 -1
  282. package/Sprites/spriteMap.js +4 -4
  283. package/Sprites/spriteMap.js.map +1 -1
  284. package/Sprites/spriteSceneComponent.js +2 -2
  285. package/Sprites/spriteSceneComponent.js.map +1 -1
  286. package/XR/features/WebXRFeaturePointSystem.js +2 -2
  287. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  288. package/abstractScene.js +16 -16
  289. package/abstractScene.js.map +1 -1
  290. package/assetContainer.js +2 -2
  291. package/assetContainer.js.map +1 -1
  292. package/node.js +2 -2
  293. package/node.js.map +1 -1
  294. package/package.json +1 -1
  295. package/scene.d.ts +0 -4
  296. package/scene.js +6 -12
  297. package/scene.js.map +1 -1
  298. package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +0 -13
  299. package/Engines/WebGPU/webgpuRenderPassWrapper.js +0 -18
  300. package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuCacheSampler.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheSampler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,MAAM,YAAY,GAAG;IACjB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,yBAAyB;CACrD,CAAC;AAEF,iFAAiF;AACjF,MAAM,wBAAwB,GAAG;IAC7B,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS;CACvD,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACtB,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC;IACN,CAAC,IAAI,CAAC,EAAE,yBAAyB;CACpC,CAAC;AAEF,gBAAgB;AAChB,MAAM,OAAO,kBAAkB;IAM3B,YAAY,MAAiB;QALrB,cAAS,GAAmC,EAAE,CAAC;QAMnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,OAAuB;;QACpD,sEAAsE;QACtE,MAAM,UAAU,GAAG,OAAO,CAAC,gCAAgC,IAAI,OAAO,CAAC,gCAAgC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpH,MAAM,IAAI,GACN,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC;YAClC,wBAAwB,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YAC9E,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,oFAAoF;YAC9H,CAAC,CAAC,MAAA,OAAO,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,MAAA,OAAO,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,MAAA,OAAO,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,qGAAqG;YAC5I,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,2BAA2B,CACtC,OAAuB,EACvB,UAAkB;QASlB,IAAI,SAAwB,EAAE,SAAwB,EAAE,YAA2B,EAAE,WAA+B,EAAE,WAA+B,CAAC;QACtJ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,QAAQ,OAAO,CAAC,YAAY,EAAE;YAC1B,KAAK,SAAS,CAAC,gCAAgC;gBAC3C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,IAAI,CAAC,UAAU,EAAE;oBACb,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,+BAA+B,CAAC;YAC/C,KAAK,SAAS,CAAC,8BAA8B;gBACzC,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,IAAI,CAAC,UAAU,EAAE;oBACb,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;oBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;qBAAM;oBACH,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;iBACpD;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,iCAAiC;gBAC5C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,IAAI,CAAC,UAAU,EAAE;oBACb,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;oBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;qBAAM;oBACH,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;iBACpD;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,kCAAkC;gBAC7C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,IAAI,CAAC,UAAU,EAAE;oBACb,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,iCAAiC;gBAC5C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,IAAI,CAAC,UAAU,EAAE;oBACb,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,gCAAgC;gBAC3C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,IAAI,CAAC,UAAU,EAAE;oBACb,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;oBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;qBAAM;oBACH,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;iBACpD;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,sBAAsB;gBACjC,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;gBAC9B,MAAM;YACV,KAAK,SAAS,CAAC,uBAAuB,CAAC;YACvC,KAAK,SAAS,CAAC,4BAA4B;gBACvC,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;gBAC9B,MAAM;YACV,KAAK,SAAS,CAAC,iCAAiC;gBAC5C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,IAAI,CAAC,UAAU,EAAE;oBACb,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,gCAAgC;gBAC3C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,IAAI,CAAC,UAAU,EAAE;oBACb,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;oBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;qBAAM;oBACH,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;iBACpD;gBACD,MAAM;YACV,KAAK,SAAS,CAAC,qBAAqB,CAAC;YACrC,KAAK,SAAS,CAAC,6BAA6B;gBACxC,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;gBAC9B,MAAM;YACV,KAAK,SAAS,CAAC,sBAAsB;gBACjC,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;gBAC9B,MAAM;YACV;gBACI,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;gBAClD,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;gBAC9B,MAAM;SACb;QAED,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE;YACnH,OAAO;gBACH,SAAS,EAAE,eAAe,CAAC,UAAU,CAAC,MAAM;gBAC5C,SAAS,EAAE,eAAe,CAAC,UAAU,CAAC,MAAM;gBAC5C,YAAY,EAAE,eAAe,CAAC,UAAU,CAAC,MAAM;gBAC/C,iBAAiB,EAAE,IAAI;aAC1B,CAAC;SACL;QAED,OAAO;YACH,SAAS;YACT,SAAS;YACT,YAAY;YACZ,WAAW;YACX,WAAW;SACd,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,IAAY;QACxC,QAAQ,IAAI,EAAE;YACV,KAAK,SAAS,CAAC,wBAAwB;gBACnC,OAAO,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;YAC9C,KAAK,SAAS,CAAC,yBAAyB;gBACpC,OAAO,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC;YACnD,KAAK,SAAS,CAAC,0BAA0B;gBACrC,OAAO,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC;SACvD;QACD,OAAO,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;IAC9C,CAAC;IAEO,MAAM,CAAC,6BAA6B,CAAC,OAAuB;QAKhE,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAa,CAAC;YAC1D,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAa,CAAC;YAC1D,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAa,CAAC;SAC7D,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,OAAuB;QACxD,sEAAsE;QACtE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,gCAAgC,IAAI,OAAO,CAAC,gCAAgC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1I,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC/E,qDACO,gBAAgB,GAChB,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,KAC9C,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,EACrH,aAAa,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IACpE;IACN,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,eAAiC;QAC9D,QAAQ,eAAe,EAAE;YACrB,KAAK,SAAS,CAAC,MAAM;gBACjB,OAAO,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC;YAClD,KAAK,SAAS,CAAC,KAAK;gBAChB,OAAO,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC;YACjD,KAAK,SAAS,CAAC,OAAO;gBAClB,OAAO,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC;YACnD,KAAK,SAAS,CAAC,MAAM;gBACjB,OAAO,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC;YACxD,KAAK,SAAS,CAAC,IAAI;gBACf,OAAO,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC;YAChD,KAAK,SAAS,CAAC,MAAM;gBACjB,OAAO,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC;YACrD,KAAK,SAAS,CAAC,KAAK;gBAChB,OAAO,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC;YACjD,KAAK,SAAS,CAAC,QAAQ;gBACnB,OAAO,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC;YACpD;gBACI,OAAO,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC;SACnD;IACL,CAAC;IAEM,UAAU,CAAC,OAAuB,EAAE,WAAW,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC;QACpE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;SACxF;QAED,IAAI,WAAW,EAAE;YACb,IAAI,GAAG,CAAC,CAAC;SACZ;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACnB,IAAI,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;SACzD;QAED,IAAI,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,EAAE;YACb,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3F,IAAI,CAAC,WAAW,EAAE;gBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;aACrC;SACJ;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ","sourcesContent":["import * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { Constants } from \"../constants\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\nconst filterToBits = [\r\n 0 | (0 << 1) | (0 << 2), // not used\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 1 | (1 << 1) | (1 << 2), // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 | (1 << 1) | (1 << 2), // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR\r\n 0 | (0 << 1) | (1 << 2), // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 1 | (0 << 1) | (1 << 2), // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n// subtract 0x01FF from the comparison function value before indexing this array!\r\nconst comparisonFunctionToBits = [\r\n (0 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // undefined\r\n (0 << 3) | (0 << 4) | (0 << 5) | (1 << 6), // NEVER\r\n (0 << 3) | (0 << 4) | (1 << 5) | (0 << 6), // LESS\r\n (0 << 3) | (0 << 4) | (1 << 5) | (1 << 6), // EQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (0 << 6), // LEQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (1 << 6), // GREATER\r\n (0 << 3) | (1 << 4) | (1 << 5) | (0 << 6), // NOTEQUAL\r\n (0 << 3) | (1 << 4) | (1 << 5) | (1 << 6), // GEQUAL\r\n (1 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // ALWAYS\r\n];\r\n\r\nconst filterNoMipToBits = [\r\n 0 << 7, // not used\r\n 1 << 7, // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 << 7, // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 0 << 7, // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 1 << 7, // TEXTURE_NEAREST_LINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 << 7, // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n/** @internal */\r\nexport class WebGPUCacheSampler {\r\n private _samplers: { [hash: number]: GPUSampler } = {};\r\n private _device: GPUDevice;\r\n\r\n public disabled: boolean;\r\n\r\n constructor(device: GPUDevice) {\r\n this._device = device;\r\n this.disabled = false;\r\n }\r\n\r\n public static GetSamplerHashCode(sampler: TextureSampler): number {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const code =\r\n filterToBits[sampler.samplingMode] +\r\n comparisonFunctionToBits[(sampler._comparisonFunction || 0x0202) - 0x0200 + 1] +\r\n filterNoMipToBits[sampler.samplingMode] + // handle the lodMinClamp = lodMaxClamp = 0 case when no filter used for mip mapping\r\n ((sampler._cachedWrapU ?? 1) << 8) +\r\n ((sampler._cachedWrapV ?? 1) << 10) +\r\n ((sampler._cachedWrapR ?? 1) << 12) +\r\n ((sampler.useMipMaps ? 1 : 0) << 14) + // need to factor this in because _getSamplerFilterDescriptor depends on samplingMode AND useMipMaps!\r\n (anisotropy << 15);\r\n\r\n return code;\r\n }\r\n\r\n private static _GetSamplerFilterDescriptor(\r\n sampler: TextureSampler,\r\n anisotropy: number\r\n ): {\r\n magFilter: GPUFilterMode;\r\n minFilter: GPUFilterMode;\r\n mipmapFilter: GPUFilterMode;\r\n lodMinClamp?: number;\r\n lodMaxClamp?: number;\r\n anisotropyEnabled?: boolean;\r\n } {\r\n let magFilter: GPUFilterMode, minFilter: GPUFilterMode, mipmapFilter: GPUFilterMode, lodMinClamp: number | undefined, lodMaxClamp: number | undefined;\r\n const useMipMaps = sampler.useMipMaps;\r\n switch (sampler.samplingMode) {\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR:\r\n case Constants.TEXTURE_TRILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST:\r\n case Constants.TEXTURE_NEAREST_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR:\r\n case Constants.TEXTURE_BILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n default:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n }\r\n\r\n if (anisotropy > 1 && (lodMinClamp !== 0 || lodMaxClamp !== 0) && mipmapFilter !== WebGPUConstants.FilterMode.Nearest) {\r\n return {\r\n magFilter: WebGPUConstants.FilterMode.Linear,\r\n minFilter: WebGPUConstants.FilterMode.Linear,\r\n mipmapFilter: WebGPUConstants.FilterMode.Linear,\r\n anisotropyEnabled: true,\r\n };\r\n }\r\n\r\n return {\r\n magFilter,\r\n minFilter,\r\n mipmapFilter,\r\n lodMinClamp,\r\n lodMaxClamp,\r\n };\r\n }\r\n\r\n private static _GetWrappingMode(mode: number): GPUAddressMode {\r\n switch (mode) {\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.Repeat;\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.ClampToEdge;\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.MirrorRepeat;\r\n }\r\n return WebGPUConstants.AddressMode.Repeat;\r\n }\r\n\r\n private static _GetSamplerWrappingDescriptor(sampler: TextureSampler): {\r\n addressModeU: GPUAddressMode;\r\n addressModeV: GPUAddressMode;\r\n addressModeW: GPUAddressMode;\r\n } {\r\n return {\r\n addressModeU: this._GetWrappingMode(sampler._cachedWrapU!),\r\n addressModeV: this._GetWrappingMode(sampler._cachedWrapV!),\r\n addressModeW: this._GetWrappingMode(sampler._cachedWrapR!),\r\n };\r\n }\r\n\r\n private static _GetSamplerDescriptor(sampler: TextureSampler): GPUSamplerDescriptor {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler.useMipMaps && sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const filterDescriptor = this._GetSamplerFilterDescriptor(sampler, anisotropy);\r\n return {\r\n ...filterDescriptor,\r\n ...this._GetSamplerWrappingDescriptor(sampler),\r\n compare: sampler._comparisonFunction ? WebGPUCacheSampler.GetCompareFunction(sampler._comparisonFunction) : undefined,\r\n maxAnisotropy: filterDescriptor.anisotropyEnabled ? anisotropy : 1,\r\n };\r\n }\r\n\r\n public static GetCompareFunction(compareFunction: Nullable<number>): GPUCompareFunction {\r\n switch (compareFunction) {\r\n case Constants.ALWAYS:\r\n return WebGPUConstants.CompareFunction.Always;\r\n case Constants.EQUAL:\r\n return WebGPUConstants.CompareFunction.Equal;\r\n case Constants.GREATER:\r\n return WebGPUConstants.CompareFunction.Greater;\r\n case Constants.GEQUAL:\r\n return WebGPUConstants.CompareFunction.GreaterEqual;\r\n case Constants.LESS:\r\n return WebGPUConstants.CompareFunction.Less;\r\n case Constants.LEQUAL:\r\n return WebGPUConstants.CompareFunction.LessEqual;\r\n case Constants.NEVER:\r\n return WebGPUConstants.CompareFunction.Never;\r\n case Constants.NOTEQUAL:\r\n return WebGPUConstants.CompareFunction.NotEqual;\r\n default:\r\n return WebGPUConstants.CompareFunction.Less;\r\n }\r\n }\r\n\r\n public getSampler(sampler: TextureSampler, bypassCache = false, hash = 0): GPUSampler {\r\n if (this.disabled) {\r\n return this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler));\r\n }\r\n\r\n if (bypassCache) {\r\n hash = 0;\r\n } else if (hash === 0) {\r\n hash = WebGPUCacheSampler.GetSamplerHashCode(sampler);\r\n }\r\n\r\n let gpuSampler = bypassCache ? undefined : this._samplers[hash];\r\n if (!gpuSampler) {\r\n gpuSampler = this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler));\r\n if (!bypassCache) {\r\n this._samplers[hash] = gpuSampler;\r\n }\r\n }\r\n\r\n return gpuSampler;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuCacheSampler.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheSampler.ts"],"names":[],"mappings":"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","sourcesContent":["import * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { Constants } from \"../constants\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\nconst filterToBits = [\r\n 0 | (0 << 1) | (0 << 2), // not used\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 1 | (1 << 1) | (1 << 2), // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 | (1 << 1) | (1 << 2), // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR\r\n 0 | (0 << 1) | (1 << 2), // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 1 | (0 << 1) | (1 << 2), // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n// subtract 0x01FF from the comparison function value before indexing this array!\r\nconst comparisonFunctionToBits = [\r\n (0 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // undefined\r\n (0 << 3) | (0 << 4) | (0 << 5) | (1 << 6), // NEVER\r\n (0 << 3) | (0 << 4) | (1 << 5) | (0 << 6), // LESS\r\n (0 << 3) | (0 << 4) | (1 << 5) | (1 << 6), // EQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (0 << 6), // LEQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (1 << 6), // GREATER\r\n (0 << 3) | (1 << 4) | (1 << 5) | (0 << 6), // NOTEQUAL\r\n (0 << 3) | (1 << 4) | (1 << 5) | (1 << 6), // GEQUAL\r\n (1 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // ALWAYS\r\n];\r\n\r\nconst filterNoMipToBits = [\r\n 0 << 7, // not used\r\n 1 << 7, // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 << 7, // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 0 << 7, // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 1 << 7, // TEXTURE_NEAREST_LINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 << 7, // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n/** @internal */\r\nexport class WebGPUCacheSampler {\r\n private _samplers: { [hash: number]: GPUSampler } = {};\r\n private _device: GPUDevice;\r\n\r\n public disabled: boolean;\r\n\r\n constructor(device: GPUDevice) {\r\n this._device = device;\r\n this.disabled = false;\r\n }\r\n\r\n public static GetSamplerHashCode(sampler: TextureSampler): number {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const code =\r\n filterToBits[sampler.samplingMode] +\r\n comparisonFunctionToBits[(sampler._comparisonFunction || 0x0202) - 0x0200 + 1] +\r\n filterNoMipToBits[sampler.samplingMode] + // handle the lodMinClamp = lodMaxClamp = 0 case when no filter used for mip mapping\r\n ((sampler._cachedWrapU ?? 1) << 8) +\r\n ((sampler._cachedWrapV ?? 1) << 10) +\r\n ((sampler._cachedWrapR ?? 1) << 12) +\r\n ((sampler.useMipMaps ? 1 : 0) << 14) + // need to factor this in because _getSamplerFilterDescriptor depends on samplingMode AND useMipMaps!\r\n (anisotropy << 15);\r\n\r\n return code;\r\n }\r\n\r\n private static _GetSamplerFilterDescriptor(\r\n sampler: TextureSampler,\r\n anisotropy: number\r\n ): {\r\n magFilter: GPUFilterMode;\r\n minFilter: GPUFilterMode;\r\n mipmapFilter: GPUFilterMode;\r\n lodMinClamp?: number;\r\n lodMaxClamp?: number;\r\n anisotropyEnabled?: boolean;\r\n } {\r\n let magFilter: GPUFilterMode, minFilter: GPUFilterMode, mipmapFilter: GPUFilterMode, lodMinClamp: number | undefined, lodMaxClamp: number | undefined;\r\n const useMipMaps = sampler.useMipMaps;\r\n switch (sampler.samplingMode) {\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR:\r\n case Constants.TEXTURE_TRILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST:\r\n case Constants.TEXTURE_NEAREST_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR:\r\n case Constants.TEXTURE_BILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n default:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n }\r\n\r\n if (anisotropy > 1 && (lodMinClamp !== 0 || lodMaxClamp !== 0) && mipmapFilter !== WebGPUConstants.FilterMode.Nearest) {\r\n return {\r\n magFilter: WebGPUConstants.FilterMode.Linear,\r\n minFilter: WebGPUConstants.FilterMode.Linear,\r\n mipmapFilter: WebGPUConstants.FilterMode.Linear,\r\n anisotropyEnabled: true,\r\n };\r\n }\r\n\r\n return {\r\n magFilter,\r\n minFilter,\r\n mipmapFilter,\r\n lodMinClamp,\r\n lodMaxClamp,\r\n };\r\n }\r\n\r\n private static _GetWrappingMode(mode: number): GPUAddressMode {\r\n switch (mode) {\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.Repeat;\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.ClampToEdge;\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.MirrorRepeat;\r\n }\r\n return WebGPUConstants.AddressMode.Repeat;\r\n }\r\n\r\n private static _GetSamplerWrappingDescriptor(sampler: TextureSampler): {\r\n addressModeU: GPUAddressMode;\r\n addressModeV: GPUAddressMode;\r\n addressModeW: GPUAddressMode;\r\n } {\r\n return {\r\n addressModeU: this._GetWrappingMode(sampler._cachedWrapU!),\r\n addressModeV: this._GetWrappingMode(sampler._cachedWrapV!),\r\n addressModeW: this._GetWrappingMode(sampler._cachedWrapR!),\r\n };\r\n }\r\n\r\n private static _GetSamplerDescriptor(sampler: TextureSampler, label?: string): GPUSamplerDescriptor {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler.useMipMaps && sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const filterDescriptor = this._GetSamplerFilterDescriptor(sampler, anisotropy);\r\n return {\r\n label,\r\n ...filterDescriptor,\r\n ...this._GetSamplerWrappingDescriptor(sampler),\r\n compare: sampler._comparisonFunction ? WebGPUCacheSampler.GetCompareFunction(sampler._comparisonFunction) : undefined,\r\n maxAnisotropy: filterDescriptor.anisotropyEnabled ? anisotropy : 1,\r\n };\r\n }\r\n\r\n public static GetCompareFunction(compareFunction: Nullable<number>): GPUCompareFunction {\r\n switch (compareFunction) {\r\n case Constants.ALWAYS:\r\n return WebGPUConstants.CompareFunction.Always;\r\n case Constants.EQUAL:\r\n return WebGPUConstants.CompareFunction.Equal;\r\n case Constants.GREATER:\r\n return WebGPUConstants.CompareFunction.Greater;\r\n case Constants.GEQUAL:\r\n return WebGPUConstants.CompareFunction.GreaterEqual;\r\n case Constants.LESS:\r\n return WebGPUConstants.CompareFunction.Less;\r\n case Constants.LEQUAL:\r\n return WebGPUConstants.CompareFunction.LessEqual;\r\n case Constants.NEVER:\r\n return WebGPUConstants.CompareFunction.Never;\r\n case Constants.NOTEQUAL:\r\n return WebGPUConstants.CompareFunction.NotEqual;\r\n default:\r\n return WebGPUConstants.CompareFunction.Less;\r\n }\r\n }\r\n\r\n public getSampler(sampler: TextureSampler, bypassCache = false, hash = 0, label?: string): GPUSampler {\r\n if (this.disabled) {\r\n return this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler, label));\r\n }\r\n\r\n if (bypassCache) {\r\n hash = 0;\r\n } else if (hash === 0) {\r\n hash = WebGPUCacheSampler.GetSamplerHashCode(sampler);\r\n }\r\n\r\n let gpuSampler = bypassCache ? undefined : this._samplers[hash];\r\n if (!gpuSampler) {\r\n gpuSampler = this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler, label));\r\n if (!bypassCache) {\r\n this._samplers[hash] = gpuSampler;\r\n }\r\n }\r\n\r\n return gpuSampler;\r\n }\r\n}\r\n"]}
@@ -23,7 +23,7 @@ export class WebGPUClearQuad {
23
23
  this._keyTemp = [];
24
24
  this._device = device;
25
25
  this._engine = engine;
26
- this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer, !engine._caps.textureFloatLinearFiltering);
26
+ this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer);
27
27
  this._cacheRenderPipeline.setDepthTestEnabled(false);
28
28
  this._cacheRenderPipeline.setStencilReadMask(0xff);
29
29
  this._effect = engine.createEffect("clearQuad", [], ["color", "depthValue"]);
@@ -60,7 +60,7 @@ export class WebGPUClearQuad {
60
60
  renderPass2 = this._device.createRenderBundleEncoder({
61
61
  colorFormats: this._cacheRenderPipeline.colorFormats,
62
62
  depthStencilFormat: this._depthTextureFormat,
63
- sampleCount,
63
+ sampleCount: WebGPUTextureHelper.GetSample(sampleCount),
64
64
  });
65
65
  }
66
66
  this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"../../Materials/effect\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IColor4Like } from \"../../Maths/math.like\";\r\nimport type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { renderableTextureFormatToIndex, WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @internal */\r\nexport class WebGPUClearQuad {\r\n private _device: GPUDevice;\r\n private _engine: WebGPUEngine;\r\n private _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n private _effect: Effect;\r\n private _bindGroups: { [id: string]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: string]: GPURenderBundle } = {};\r\n private _keyTemp: number[] = [];\r\n\r\n public setDepthStencilFormat(format: GPUTextureFormat | undefined): void {\r\n this._depthTextureFormat = format;\r\n this._cacheRenderPipeline.setDepthStencilFormat(format);\r\n }\r\n\r\n public setColorFormat(format: GPUTextureFormat | null): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[], textureCount: number): void {\r\n this._cacheRenderPipeline.setMRT(textureArray, textureCount);\r\n this._cacheRenderPipeline.setMRTAttachments(attachments);\r\n }\r\n\r\n constructor(device: GPUDevice, engine: WebGPUEngine, emptyVertexBuffer: VertexBuffer) {\r\n this._device = device;\r\n this._engine = engine;\r\n\r\n this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer, !engine._caps.textureFloatLinearFiltering);\r\n this._cacheRenderPipeline.setDepthTestEnabled(false);\r\n this._cacheRenderPipeline.setStencilReadMask(0xff);\r\n\r\n this._effect = engine.createEffect(\"clearQuad\", [], [\"color\", \"depthValue\"]);\r\n }\r\n\r\n public clear(\r\n renderPass: Nullable<GPURenderPassEncoder>,\r\n clearColor?: Nullable<IColor4Like>,\r\n clearDepth?: boolean,\r\n clearStencil?: boolean,\r\n sampleCount = 1\r\n ): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey: string;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n let idx = 0;\r\n this._keyTemp.length = 0;\r\n for (let i = 0; i < this._cacheRenderPipeline.colorFormats.length; ++i) {\r\n this._keyTemp[idx++] = renderableTextureFormatToIndex[this._cacheRenderPipeline.colorFormats[i] ?? \"\"];\r\n }\r\n\r\n const depthStencilFormatIndex = renderableTextureFormatToIndex[this._depthTextureFormat ?? 0];\r\n\r\n this._keyTemp[idx] =\r\n (clearColor ? clearColor.r + clearColor.g * 256 + clearColor.b * 256 * 256 + clearColor.a * 256 * 256 * 256 : 0) +\r\n (clearDepth ? 2 ** 32 : 0) +\r\n (clearStencil ? 2 ** 33 : 0) +\r\n (this._engine.useReverseDepthBuffer ? 2 ** 34 : 0) +\r\n (isRTTPass ? 2 ** 35 : 0) +\r\n (sampleCount > 1 ? 2 ** 36 : 0) +\r\n depthStencilFormatIndex * 2 ** 37;\r\n\r\n bundleKey = this._keyTemp.join(\"_\");\r\n bundle = this._bundleCache[bundleKey];\r\n\r\n if (bundle) {\r\n return bundle;\r\n }\r\n\r\n renderPass2 = this._device.createRenderBundleEncoder({\r\n colorFormats: this._cacheRenderPipeline.colorFormats,\r\n depthStencilFormat: this._depthTextureFormat,\r\n sampleCount,\r\n });\r\n }\r\n\r\n this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);\r\n this._cacheRenderPipeline.setStencilEnabled(!!clearStencil && !!this._depthTextureFormat && WebGPUTextureHelper.HasStencilAspect(this._depthTextureFormat));\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xff : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? Constants.ALWAYS : Constants.NEVER);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? Constants.REPLACE : Constants.KEEP);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xf : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(Constants.MATERIAL_TriangleStripDrawMode, this._effect, sampleCount);\r\n\r\n const webgpuPipelineContext = this._effect._pipelineContext as WebGPUPipelineContext;\r\n\r\n if (clearColor) {\r\n this._effect.setDirectColor4(\"color\", clearColor);\r\n }\r\n\r\n this._effect.setFloat(\"depthValue\", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);\r\n\r\n webgpuPipelineContext.uniformBuffer!.update();\r\n\r\n const bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;\r\n const bufferLeftOver = webgpuPipelineContext.uniformBuffer!.getBuffer() as WebGPUDataBuffer;\r\n\r\n const key = bufferLeftOver.uniqueId + \"-\" + bufferInternals.uniqueId;\r\n\r\n let bindGroups = this._bindGroups[key];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts[0];\r\n bindGroups = this._bindGroups[key] = [];\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[0],\r\n entries: [],\r\n })\r\n );\r\n if (!WebGPUShaderProcessingContext._SimplifiedKnownBindings) {\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[1],\r\n entries: [],\r\n })\r\n );\r\n }\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[WebGPUShaderProcessingContext._SimplifiedKnownBindings ? 1 : 2],\r\n entries: [\r\n {\r\n binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity,\r\n },\r\n },\r\n {\r\n binding: 1,\r\n resource: {\r\n buffer: bufferLeftOver.underlyingResource,\r\n size: bufferLeftOver.capacity,\r\n },\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n\r\n renderPass2.setPipeline(pipeline);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n renderPass2.setBindGroup(i, bindGroups[i]);\r\n }\r\n renderPass2.draw(4, 1, 0, 0);\r\n\r\n if (!renderPass) {\r\n bundle = (renderPass2 as GPURenderBundleEncoder).finish();\r\n this._bundleCache[bundleKey!] = bundle;\r\n }\r\n\r\n return bundle;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"../../Materials/effect\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IColor4Like } from \"../../Maths/math.like\";\r\nimport type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { renderableTextureFormatToIndex, WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @internal */\r\nexport class WebGPUClearQuad {\r\n private _device: GPUDevice;\r\n private _engine: WebGPUEngine;\r\n private _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n private _effect: Effect;\r\n private _bindGroups: { [id: string]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: string]: GPURenderBundle } = {};\r\n private _keyTemp: number[] = [];\r\n\r\n public setDepthStencilFormat(format: GPUTextureFormat | undefined): void {\r\n this._depthTextureFormat = format;\r\n this._cacheRenderPipeline.setDepthStencilFormat(format);\r\n }\r\n\r\n public setColorFormat(format: GPUTextureFormat | null): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[], textureCount: number): void {\r\n this._cacheRenderPipeline.setMRT(textureArray, textureCount);\r\n this._cacheRenderPipeline.setMRTAttachments(attachments);\r\n }\r\n\r\n constructor(device: GPUDevice, engine: WebGPUEngine, emptyVertexBuffer: VertexBuffer) {\r\n this._device = device;\r\n this._engine = engine;\r\n\r\n this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer);\r\n this._cacheRenderPipeline.setDepthTestEnabled(false);\r\n this._cacheRenderPipeline.setStencilReadMask(0xff);\r\n\r\n this._effect = engine.createEffect(\"clearQuad\", [], [\"color\", \"depthValue\"]);\r\n }\r\n\r\n public clear(\r\n renderPass: Nullable<GPURenderPassEncoder>,\r\n clearColor?: Nullable<IColor4Like>,\r\n clearDepth?: boolean,\r\n clearStencil?: boolean,\r\n sampleCount = 1\r\n ): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey: string;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n let idx = 0;\r\n this._keyTemp.length = 0;\r\n for (let i = 0; i < this._cacheRenderPipeline.colorFormats.length; ++i) {\r\n this._keyTemp[idx++] = renderableTextureFormatToIndex[this._cacheRenderPipeline.colorFormats[i] ?? \"\"];\r\n }\r\n\r\n const depthStencilFormatIndex = renderableTextureFormatToIndex[this._depthTextureFormat ?? 0];\r\n\r\n this._keyTemp[idx] =\r\n (clearColor ? clearColor.r + clearColor.g * 256 + clearColor.b * 256 * 256 + clearColor.a * 256 * 256 * 256 : 0) +\r\n (clearDepth ? 2 ** 32 : 0) +\r\n (clearStencil ? 2 ** 33 : 0) +\r\n (this._engine.useReverseDepthBuffer ? 2 ** 34 : 0) +\r\n (isRTTPass ? 2 ** 35 : 0) +\r\n (sampleCount > 1 ? 2 ** 36 : 0) +\r\n depthStencilFormatIndex * 2 ** 37;\r\n\r\n bundleKey = this._keyTemp.join(\"_\");\r\n bundle = this._bundleCache[bundleKey];\r\n\r\n if (bundle) {\r\n return bundle;\r\n }\r\n\r\n renderPass2 = this._device.createRenderBundleEncoder({\r\n colorFormats: this._cacheRenderPipeline.colorFormats,\r\n depthStencilFormat: this._depthTextureFormat,\r\n sampleCount: WebGPUTextureHelper.GetSample(sampleCount),\r\n });\r\n }\r\n\r\n this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);\r\n this._cacheRenderPipeline.setStencilEnabled(!!clearStencil && !!this._depthTextureFormat && WebGPUTextureHelper.HasStencilAspect(this._depthTextureFormat));\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xff : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? Constants.ALWAYS : Constants.NEVER);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? Constants.REPLACE : Constants.KEEP);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xf : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(Constants.MATERIAL_TriangleStripDrawMode, this._effect, sampleCount);\r\n\r\n const webgpuPipelineContext = this._effect._pipelineContext as WebGPUPipelineContext;\r\n\r\n if (clearColor) {\r\n this._effect.setDirectColor4(\"color\", clearColor);\r\n }\r\n\r\n this._effect.setFloat(\"depthValue\", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);\r\n\r\n webgpuPipelineContext.uniformBuffer!.update();\r\n\r\n const bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;\r\n const bufferLeftOver = webgpuPipelineContext.uniformBuffer!.getBuffer() as WebGPUDataBuffer;\r\n\r\n const key = bufferLeftOver.uniqueId + \"-\" + bufferInternals.uniqueId;\r\n\r\n let bindGroups = this._bindGroups[key];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts[0];\r\n bindGroups = this._bindGroups[key] = [];\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[0],\r\n entries: [],\r\n })\r\n );\r\n if (!WebGPUShaderProcessingContext._SimplifiedKnownBindings) {\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[1],\r\n entries: [],\r\n })\r\n );\r\n }\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[WebGPUShaderProcessingContext._SimplifiedKnownBindings ? 1 : 2],\r\n entries: [\r\n {\r\n binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity,\r\n },\r\n },\r\n {\r\n binding: 1,\r\n resource: {\r\n buffer: bufferLeftOver.underlyingResource,\r\n size: bufferLeftOver.capacity,\r\n },\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n\r\n renderPass2.setPipeline(pipeline);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n renderPass2.setBindGroup(i, bindGroups[i]);\r\n }\r\n renderPass2.draw(4, 1, 0, 0);\r\n\r\n if (!renderPass) {\r\n bundle = (renderPass2 as GPURenderBundleEncoder).finish();\r\n this._bundleCache[bundleKey!] = bundle;\r\n }\r\n\r\n return bundle;\r\n }\r\n}\r\n"]}
@@ -1,19 +1,7 @@
1
1
  import type { HardwareTextureWrapper } from "../../Materials/Textures/hardwareTextureWrapper";
2
2
  import type { Nullable } from "../../types";
3
- import type { WebGPUBundleList } from "./webgpuBundleList";
4
3
  /** @internal */
5
4
  export declare class WebGPUHardwareTexture implements HardwareTextureWrapper {
6
- /**
7
- * List of bundles collected in the snapshot rendering mode when the texture is a render target texture
8
- * The index in this array is the current layer we are rendering into
9
- * @internal
10
- */
11
- _bundleLists: WebGPUBundleList[];
12
- /**
13
- * Current layer we are rendering into when in snapshot rendering mode (if the texture is a render target texture)
14
- * @internal
15
- */
16
- _currentLayer: number;
17
5
  /**
18
6
  * Cache of RenderPassDescriptor and BindGroup used when generating mipmaps (see WebGPUTextureHelper.generateMipmaps)
19
7
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HardwareTextureWrapper } from \"../../Materials/Textures/hardwareTextureWrapper\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport type { Nullable } from \"../../types\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\nimport type { WebGPUBundleList } from \"./webgpuBundleList\";\r\n\r\n/** @internal */\r\nexport class WebGPUHardwareTexture implements HardwareTextureWrapper {\r\n /**\r\n * List of bundles collected in the snapshot rendering mode when the texture is a render target texture\r\n * The index in this array is the current layer we are rendering into\r\n * @internal\r\n */\r\n public _bundleLists: WebGPUBundleList[];\r\n /**\r\n * Current layer we are rendering into when in snapshot rendering mode (if the texture is a render target texture)\r\n * @internal\r\n */\r\n public _currentLayer: number;\r\n\r\n /**\r\n * Cache of RenderPassDescriptor and BindGroup used when generating mipmaps (see WebGPUTextureHelper.generateMipmaps)\r\n * @internal\r\n */\r\n public _mipmapGenRenderPassDescr: GPURenderPassDescriptor[][];\r\n /** @internal */\r\n public _mipmapGenBindGroup: GPUBindGroup[][];\r\n\r\n /**\r\n * Cache for the invertYPreMultiplyAlpha function (see WebGPUTextureHelper)\r\n * @internal\r\n */\r\n public _copyInvertYTempTexture?: GPUTexture;\r\n /** @internal */\r\n public _copyInvertYRenderPassDescr: GPURenderPassDescriptor;\r\n /** @internal */\r\n public _copyInvertYBindGroup: GPUBindGroup;\r\n /** @internal */\r\n public _copyInvertYBindGroupWithOfst: GPUBindGroup;\r\n\r\n private _webgpuTexture: Nullable<GPUTexture>;\r\n // There can be multiple MSAA textures for a single WebGPU texture because different layers of a 2DArrayTexture / 3DTexture\r\n // or different faces of a cube texture can be bound to different render targets at the same time (in a multi RenderTargetWrapper)\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 getMSAATexture(index = 0): Nullable<GPUTexture> {\r\n return this._webgpuMSAATexture?.[index] ?? null;\r\n }\r\n\r\n public setMSAATexture(texture: GPUTexture, index = -1) {\r\n if (!this._webgpuMSAATexture) {\r\n this._webgpuMSAATexture = [];\r\n }\r\n\r\n if (index === -1) {\r\n index = this._webgpuMSAATexture.length;\r\n }\r\n\r\n this._webgpuMSAATexture![index] = texture;\r\n }\r\n\r\n public releaseMSAATexture() {\r\n if (this._webgpuMSAATexture) {\r\n for (const texture of this._webgpuMSAATexture) {\r\n texture?.destroy();\r\n }\r\n this._webgpuMSAATexture = null;\r\n }\r\n }\r\n\r\n public view: Nullable<GPUTextureView>;\r\n public viewForWriting: Nullable<GPUTextureView>;\r\n public format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n public textureUsages = 0;\r\n public textureAdditionalUsages = 0;\r\n\r\n constructor(existingTexture: Nullable<GPUTexture> = null) {\r\n this._webgpuTexture = existingTexture;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public set(hardwareTexture: GPUTexture): void {\r\n this._webgpuTexture = hardwareTexture;\r\n }\r\n\r\n public setUsage(_textureSource: number, generateMipMaps: boolean, isCube: boolean, width: number, height: number): void {\r\n 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.releaseMSAATexture();\r\n this._copyInvertYTempTexture?.destroy();\r\n this.reset();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HardwareTextureWrapper } from \"../../Materials/Textures/hardwareTextureWrapper\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport type { Nullable } from \"../../types\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUHardwareTexture implements HardwareTextureWrapper {\r\n /**\r\n * Cache of RenderPassDescriptor and BindGroup used when generating mipmaps (see WebGPUTextureHelper.generateMipmaps)\r\n * @internal\r\n */\r\n public _mipmapGenRenderPassDescr: GPURenderPassDescriptor[][];\r\n /** @internal */\r\n public _mipmapGenBindGroup: GPUBindGroup[][];\r\n\r\n /**\r\n * Cache for the invertYPreMultiplyAlpha function (see WebGPUTextureHelper)\r\n * @internal\r\n */\r\n public _copyInvertYTempTexture?: GPUTexture;\r\n /** @internal */\r\n public _copyInvertYRenderPassDescr: GPURenderPassDescriptor;\r\n /** @internal */\r\n public _copyInvertYBindGroup: GPUBindGroup;\r\n /** @internal */\r\n public _copyInvertYBindGroupWithOfst: GPUBindGroup;\r\n\r\n private _webgpuTexture: Nullable<GPUTexture>;\r\n // There can be multiple MSAA textures for a single WebGPU texture because different layers of a 2DArrayTexture / 3DTexture\r\n // or different faces of a cube texture can be bound to different render targets at the same time (in a multi RenderTargetWrapper)\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 getMSAATexture(index = 0): Nullable<GPUTexture> {\r\n return this._webgpuMSAATexture?.[index] ?? null;\r\n }\r\n\r\n public setMSAATexture(texture: GPUTexture, index = -1) {\r\n if (!this._webgpuMSAATexture) {\r\n this._webgpuMSAATexture = [];\r\n }\r\n\r\n if (index === -1) {\r\n index = this._webgpuMSAATexture.length;\r\n }\r\n\r\n this._webgpuMSAATexture![index] = texture;\r\n }\r\n\r\n public releaseMSAATexture() {\r\n if (this._webgpuMSAATexture) {\r\n for (const texture of this._webgpuMSAATexture) {\r\n texture?.destroy();\r\n }\r\n this._webgpuMSAATexture = null;\r\n }\r\n }\r\n\r\n public view: Nullable<GPUTextureView>;\r\n public viewForWriting: Nullable<GPUTextureView>;\r\n public format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n public textureUsages = 0;\r\n public textureAdditionalUsages = 0;\r\n\r\n constructor(existingTexture: Nullable<GPUTexture> = null) {\r\n this._webgpuTexture = existingTexture;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public set(hardwareTexture: GPUTexture): void {\r\n this._webgpuTexture = hardwareTexture;\r\n }\r\n\r\n public setUsage(_textureSource: number, generateMipMaps: boolean, isCube: boolean, width: number, height: number): void {\r\n 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.releaseMSAATexture();\r\n this._copyInvertYTempTexture?.destroy();\r\n this.reset();\r\n }\r\n}\r\n"]}
@@ -11,7 +11,7 @@ interface IWebGPUMaterialContextSamplerCache {
11
11
  /** @internal */
12
12
  interface IWebGPUMaterialContextTextureCache {
13
13
  texture: Nullable<InternalTexture | ExternalTexture>;
14
- isFloatTexture: boolean;
14
+ isFloatOrDepthTexture: boolean;
15
15
  isExternalTexture: boolean;
16
16
  }
17
17
  /** @internal */
@@ -28,8 +28,8 @@ export declare class WebGPUMaterialContext implements IMaterialContext {
28
28
  };
29
29
  textureState: number;
30
30
  get forceBindGroupCreation(): boolean;
31
- get hasFloatTextures(): boolean;
32
- protected _numFloatTextures: number;
31
+ get hasFloatOrDepthTextures(): boolean;
32
+ protected _numFloatOrDepthTextures: number;
33
33
  protected _numExternalTextures: number;
34
34
  constructor();
35
35
  reset(): void;
@@ -1,3 +1,5 @@
1
+ /* eslint-disable babylonjs/available */
2
+ /* eslint-disable jsdoc/require-jsdoc */
1
3
  import { ExternalTexture } from "../../Materials/Textures/externalTexture.js";
2
4
 
3
5
  import { WebGPUCacheSampler } from "./webgpuCacheSampler.js";
@@ -8,8 +10,8 @@ export class WebGPUMaterialContext {
8
10
  // because we need to retrieve a new texture each frame (by calling device.importExternalTexture)
9
11
  return this._numExternalTextures > 0;
10
12
  }
11
- get hasFloatTextures() {
12
- return this._numFloatTextures > 0;
13
+ get hasFloatOrDepthTextures() {
14
+ return this._numFloatOrDepthTextures > 0;
13
15
  }
14
16
  constructor() {
15
17
  this.uniqueId = WebGPUMaterialContext._Counter++;
@@ -21,7 +23,7 @@ export class WebGPUMaterialContext {
21
23
  this.samplers = {};
22
24
  this.textures = {};
23
25
  this.isDirty = true;
24
- this._numFloatTextures = 0;
26
+ this._numFloatOrDepthTextures = 0;
25
27
  this._numExternalTextures = 0;
26
28
  }
27
29
  setSampler(name, sampler) {
@@ -46,7 +48,7 @@ export class WebGPUMaterialContext {
46
48
  let textureCache = this.textures[name];
47
49
  let currentTextureId = -1;
48
50
  if (!textureCache) {
49
- this.textures[name] = textureCache = { texture, isFloatTexture: false, isExternalTexture: false };
51
+ this.textures[name] = textureCache = { texture, isFloatOrDepthTexture: false, isExternalTexture: false };
50
52
  }
51
53
  else {
52
54
  currentTextureId = (_b = (_a = textureCache.texture) === null || _a === void 0 ? void 0 : _a.uniqueId) !== null && _b !== void 0 ? _b : -1;
@@ -54,21 +56,23 @@ export class WebGPUMaterialContext {
54
56
  if (textureCache.isExternalTexture) {
55
57
  this._numExternalTextures--;
56
58
  }
57
- if (textureCache.isFloatTexture) {
58
- this._numFloatTextures--;
59
+ if (textureCache.isFloatOrDepthTexture) {
60
+ this._numFloatOrDepthTextures--;
59
61
  }
60
62
  if (texture) {
61
- textureCache.isFloatTexture = texture.type === 1;
63
+ textureCache.isFloatOrDepthTexture =
64
+ texture.type === 1 ||
65
+ (texture.format >= 13 && texture.format <= 18);
62
66
  textureCache.isExternalTexture = ExternalTexture.IsExternalTexture(texture);
63
- if (textureCache.isFloatTexture) {
64
- this._numFloatTextures++;
67
+ if (textureCache.isFloatOrDepthTexture) {
68
+ this._numFloatOrDepthTextures++;
65
69
  }
66
70
  if (textureCache.isExternalTexture) {
67
71
  this._numExternalTextures++;
68
72
  }
69
73
  }
70
74
  else {
71
- textureCache.isFloatTexture = false;
75
+ textureCache.isFloatOrDepthTexture = false;
72
76
  textureCache.isExternalTexture = false;
73
77
  }
74
78
  textureCache.texture = texture;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuMaterialContext.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuMaterialContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { IMaterialContext } from \"../IMaterialContext\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\n\r\n/** @internal */\r\ninterface IWebGPUMaterialContextSamplerCache {\r\n sampler: Nullable<TextureSampler>;\r\n hashCode: number;\r\n}\r\n\r\n/** @internal */\r\ninterface IWebGPUMaterialContextTextureCache {\r\n texture: Nullable<InternalTexture | ExternalTexture>;\r\n isFloatTexture: boolean;\r\n isExternalTexture: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUMaterialContext implements IMaterialContext {\r\n private static _Counter = 0;\r\n\r\n public uniqueId: number;\r\n public updateId: number;\r\n public isDirty: boolean;\r\n public samplers: { [name: string]: Nullable<IWebGPUMaterialContextSamplerCache> };\r\n public textures: { [name: string]: Nullable<IWebGPUMaterialContextTextureCache> };\r\n\r\n // The texture state is a bitfield where each bit is set if the texture is a float32 texture (calculated in @WebGPUEngine._draw).\r\n // Float32 textures must be handled differently because float filtering may not be supported by the underlying browser implementation.\r\n // In this case, we must configure the sampler as \"non filtering\", as well as set the texture sample type to \"unfilterable-float\" when creating the bind group layout.\r\n // When that happens, we end up with different bind group layouts (depending on which type of textures have been set in the material), that we must all store\r\n // in the WebGPUPipelineContext (see @WebGPUPipelineContext.bindGroupLayouts) for later retrieval in the bind group cache implementation (see @WebGPUCacheBindGroups.getBindGroups), thanks to this property.\r\n public textureState: number;\r\n\r\n public get forceBindGroupCreation() {\r\n // If there is at least one external texture to bind, we must recreate the bind groups each time\r\n // because we need to retrieve a new texture each frame (by calling device.importExternalTexture)\r\n return this._numExternalTextures > 0;\r\n }\r\n\r\n public get hasFloatTextures() {\r\n return this._numFloatTextures > 0;\r\n }\r\n\r\n protected _numFloatTextures: number;\r\n protected _numExternalTextures: number;\r\n\r\n constructor() {\r\n this.uniqueId = WebGPUMaterialContext._Counter++;\r\n this.updateId = 0;\r\n this.textureState = 0;\r\n this.reset();\r\n }\r\n\r\n public reset(): void {\r\n this.samplers = {};\r\n this.textures = {};\r\n this.isDirty = true;\r\n this._numFloatTextures = 0;\r\n this._numExternalTextures = 0;\r\n }\r\n\r\n public setSampler(name: string, sampler: Nullable<TextureSampler>): void {\r\n let samplerCache = this.samplers[name];\r\n let currentHashCode = -1;\r\n if (!samplerCache) {\r\n this.samplers[name] = samplerCache = { sampler, hashCode: 0 };\r\n } else {\r\n currentHashCode = samplerCache.hashCode;\r\n }\r\n\r\n samplerCache.sampler = sampler;\r\n samplerCache.hashCode = sampler ? WebGPUCacheSampler.GetSamplerHashCode(sampler) : 0;\r\n\r\n const isDirty = currentHashCode !== samplerCache.hashCode;\r\n if (isDirty) {\r\n this.updateId++;\r\n }\r\n\r\n this.isDirty ||= isDirty;\r\n }\r\n\r\n public setTexture(name: string, texture: Nullable<InternalTexture | ExternalTexture>): void {\r\n let textureCache = this.textures[name];\r\n let currentTextureId = -1;\r\n if (!textureCache) {\r\n this.textures[name] = textureCache = { texture, isFloatTexture: false, isExternalTexture: false };\r\n } else {\r\n currentTextureId = textureCache.texture?.uniqueId ?? -1;\r\n }\r\n\r\n if (textureCache.isExternalTexture) {\r\n this._numExternalTextures--;\r\n }\r\n if (textureCache.isFloatTexture) {\r\n this._numFloatTextures--;\r\n }\r\n\r\n if (texture) {\r\n textureCache.isFloatTexture = texture.type === Constants.TEXTURETYPE_FLOAT;\r\n textureCache.isExternalTexture = ExternalTexture.IsExternalTexture(texture);\r\n if (textureCache.isFloatTexture) {\r\n this._numFloatTextures++;\r\n }\r\n if (textureCache.isExternalTexture) {\r\n this._numExternalTextures++;\r\n }\r\n } else {\r\n textureCache.isFloatTexture = false;\r\n textureCache.isExternalTexture = false;\r\n }\r\n\r\n textureCache.texture = texture;\r\n\r\n const isDirty = currentTextureId !== (texture?.uniqueId ?? -1);\r\n if (isDirty) {\r\n this.updateId++;\r\n }\r\n\r\n this.isDirty ||= isDirty;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuMaterialContext.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuMaterialContext.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\n/* eslint-disable jsdoc/require-jsdoc */\r\nimport { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { IMaterialContext } from \"../IMaterialContext\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\n\r\n/** @internal */\r\ninterface IWebGPUMaterialContextSamplerCache {\r\n sampler: Nullable<TextureSampler>;\r\n hashCode: number;\r\n}\r\n\r\n/** @internal */\r\ninterface IWebGPUMaterialContextTextureCache {\r\n texture: Nullable<InternalTexture | ExternalTexture>;\r\n isFloatOrDepthTexture: boolean;\r\n isExternalTexture: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUMaterialContext implements IMaterialContext {\r\n private static _Counter = 0;\r\n\r\n public uniqueId: number;\r\n public updateId: number;\r\n public isDirty: boolean;\r\n public samplers: { [name: string]: Nullable<IWebGPUMaterialContextSamplerCache> };\r\n public textures: { [name: string]: Nullable<IWebGPUMaterialContextTextureCache> };\r\n\r\n // The texture state is a bitfield where each bit is set if the texture is a float32 texture (calculated in @WebGPUEngine._draw).\r\n // Float32 textures must be handled differently because float filtering may not be supported by the underlying browser implementation.\r\n // In this case, we must configure the sampler as \"non filtering\", as well as set the texture sample type to \"unfilterable-float\" when creating the bind group layout.\r\n // When that happens, we end up with different bind group layouts (depending on which type of textures have been set in the material), that we must all store\r\n // in the WebGPUPipelineContext (see @WebGPUPipelineContext.bindGroupLayouts) for later retrieval in the bind group cache implementation (see @WebGPUCacheBindGroups.getBindGroups), thanks to this property.\r\n // There's the same problem with depth textures, where \"float\" filtering is not supported either.\r\n public textureState: number;\r\n\r\n public get forceBindGroupCreation() {\r\n // If there is at least one external texture to bind, we must recreate the bind groups each time\r\n // because we need to retrieve a new texture each frame (by calling device.importExternalTexture)\r\n return this._numExternalTextures > 0;\r\n }\r\n\r\n public get hasFloatOrDepthTextures() {\r\n return this._numFloatOrDepthTextures > 0;\r\n }\r\n\r\n protected _numFloatOrDepthTextures: number;\r\n protected _numExternalTextures: number;\r\n\r\n constructor() {\r\n this.uniqueId = WebGPUMaterialContext._Counter++;\r\n this.updateId = 0;\r\n this.textureState = 0;\r\n this.reset();\r\n }\r\n\r\n public reset(): void {\r\n this.samplers = {};\r\n this.textures = {};\r\n this.isDirty = true;\r\n this._numFloatOrDepthTextures = 0;\r\n this._numExternalTextures = 0;\r\n }\r\n\r\n public setSampler(name: string, sampler: Nullable<TextureSampler>): void {\r\n let samplerCache = this.samplers[name];\r\n let currentHashCode = -1;\r\n if (!samplerCache) {\r\n this.samplers[name] = samplerCache = { sampler, hashCode: 0 };\r\n } else {\r\n currentHashCode = samplerCache.hashCode;\r\n }\r\n\r\n samplerCache.sampler = sampler;\r\n samplerCache.hashCode = sampler ? WebGPUCacheSampler.GetSamplerHashCode(sampler) : 0;\r\n\r\n const isDirty = currentHashCode !== samplerCache.hashCode;\r\n if (isDirty) {\r\n this.updateId++;\r\n }\r\n\r\n this.isDirty ||= isDirty;\r\n }\r\n\r\n public setTexture(name: string, texture: Nullable<InternalTexture | ExternalTexture>): void {\r\n let textureCache = this.textures[name];\r\n let currentTextureId = -1;\r\n if (!textureCache) {\r\n this.textures[name] = textureCache = { texture, isFloatOrDepthTexture: false, isExternalTexture: false };\r\n } else {\r\n currentTextureId = textureCache.texture?.uniqueId ?? -1;\r\n }\r\n\r\n if (textureCache.isExternalTexture) {\r\n this._numExternalTextures--;\r\n }\r\n if (textureCache.isFloatOrDepthTexture) {\r\n this._numFloatOrDepthTextures--;\r\n }\r\n\r\n if (texture) {\r\n textureCache.isFloatOrDepthTexture =\r\n texture.type === Constants.TEXTURETYPE_FLOAT ||\r\n (texture.format >= Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 && texture.format <= Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8);\r\n textureCache.isExternalTexture = ExternalTexture.IsExternalTexture(texture);\r\n if (textureCache.isFloatOrDepthTexture) {\r\n this._numFloatOrDepthTextures++;\r\n }\r\n if (textureCache.isExternalTexture) {\r\n this._numExternalTextures++;\r\n }\r\n } else {\r\n textureCache.isFloatOrDepthTexture = false;\r\n textureCache.isExternalTexture = false;\r\n }\r\n\r\n textureCache.texture = texture;\r\n\r\n const isDirty = currentTextureId !== (texture?.uniqueId ?? -1);\r\n if (isDirty) {\r\n this.updateId++;\r\n }\r\n\r\n this.isDirty ||= isDirty;\r\n }\r\n}\r\n"]}
@@ -12,18 +12,7 @@ export class WebGPUOcclusionQuery {
12
12
  if (this._frameQuerySetIsDirty === this._engine.frameId || this._queryFrameId[index] === this._engine.frameId) {
13
13
  return false;
14
14
  }
15
- let canBegin = false;
16
- const passIndex = this._engine._getCurrentRenderPassIndex();
17
- switch (passIndex) {
18
- case 0: {
19
- canBegin = this._engine._mainRenderPassWrapper.renderPassDescriptor.occlusionQuerySet !== undefined;
20
- break;
21
- }
22
- case 1: {
23
- canBegin = this._engine._rttRenderPassWrapper.renderPassDescriptor.occlusionQuerySet !== undefined;
24
- break;
25
- }
26
- }
15
+ const canBegin = this._engine._getCurrentRenderPassWrapper().renderPassDescriptor.occlusionQuerySet !== undefined;
27
16
  if (canBegin) {
28
17
  this._queryFrameId[index] = this._engine.frameId;
29
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuOcclusionQuery.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuOcclusionQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { WebGPUQuerySet } from \"./webgpuQuerySet\";\r\n\r\n/** @internal */\r\nexport class WebGPUOcclusionQuery {\r\n private _engine: WebGPUEngine;\r\n private _device: GPUDevice;\r\n private _bufferManager: WebGPUBufferManager;\r\n\r\n private _currentTotalIndices: number;\r\n private _countIncrement: number;\r\n private _querySet: WebGPUQuerySet;\r\n private _availableIndices: number[] = [];\r\n private _lastBuffer: Nullable<BigUint64Array>;\r\n private _frameLastBuffer: number;\r\n private _frameQuerySetIsDirty = -1;\r\n private _queryFrameId: number[] = [];\r\n\r\n public get querySet(): GPUQuerySet {\r\n return this._querySet.querySet;\r\n }\r\n\r\n public get hasQueries(): boolean {\r\n return this._currentTotalIndices !== this._availableIndices.length;\r\n }\r\n\r\n public canBeginQuery(index: number): boolean {\r\n if (this._frameQuerySetIsDirty === this._engine.frameId || this._queryFrameId[index] === this._engine.frameId) {\r\n return false;\r\n }\r\n\r\n let canBegin = false;\r\n\r\n const passIndex = this._engine._getCurrentRenderPassIndex();\r\n switch (passIndex) {\r\n case 0: {\r\n canBegin = this._engine._mainRenderPassWrapper.renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n break;\r\n }\r\n case 1: {\r\n canBegin = this._engine._rttRenderPassWrapper.renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n break;\r\n }\r\n }\r\n\r\n if (canBegin) {\r\n this._queryFrameId[index] = this._engine.frameId;\r\n }\r\n\r\n return canBegin;\r\n }\r\n\r\n constructor(engine: WebGPUEngine, device: GPUDevice, bufferManager: WebGPUBufferManager, startCount = 50, incrementCount = 100) {\r\n this._engine = engine;\r\n this._device = device;\r\n this._bufferManager = bufferManager;\r\n\r\n this._frameLastBuffer = -1;\r\n this._currentTotalIndices = 0;\r\n this._countIncrement = incrementCount;\r\n\r\n this._allocateNewIndices(startCount);\r\n }\r\n\r\n public createQuery(): number {\r\n if (this._availableIndices.length === 0) {\r\n this._allocateNewIndices();\r\n }\r\n\r\n const index = this._availableIndices[this._availableIndices.length - 1];\r\n this._availableIndices.length--;\r\n\r\n return index;\r\n }\r\n\r\n public deleteQuery(index: number): void {\r\n this._availableIndices[this._availableIndices.length] = index;\r\n }\r\n\r\n public isQueryResultAvailable(index: number): boolean {\r\n this._retrieveQueryBuffer();\r\n\r\n return !!this._lastBuffer && index < this._lastBuffer.length;\r\n }\r\n\r\n public getQueryResult(index: number): number {\r\n return Number(this._lastBuffer?.[index] ?? -1);\r\n }\r\n\r\n private _retrieveQueryBuffer(): void {\r\n if (this._lastBuffer && this._frameLastBuffer === this._engine.frameId) {\r\n return;\r\n }\r\n\r\n if (this._frameLastBuffer !== this._engine.frameId) {\r\n this._frameLastBuffer = this._engine.frameId;\r\n this._querySet.readValues(0, this._currentTotalIndices).then((arrayBuffer) => {\r\n this._lastBuffer = arrayBuffer;\r\n });\r\n }\r\n }\r\n\r\n private _allocateNewIndices(numIndices?: number): void {\r\n numIndices = numIndices ?? this._countIncrement;\r\n\r\n this._delayQuerySetDispose();\r\n\r\n for (let i = 0; i < numIndices; ++i) {\r\n this._availableIndices.push(this._currentTotalIndices + i);\r\n }\r\n\r\n this._currentTotalIndices += numIndices;\r\n this._querySet = new WebGPUQuerySet(\r\n this._currentTotalIndices,\r\n WebGPUConstants.QueryType.Occlusion,\r\n this._device,\r\n this._bufferManager,\r\n false,\r\n \"QuerySet_OcclusionQuery_count_\" + this._currentTotalIndices\r\n );\r\n\r\n this._frameQuerySetIsDirty = this._engine.frameId;\r\n }\r\n\r\n private _delayQuerySetDispose(): void {\r\n const querySet = this._querySet;\r\n if (querySet) {\r\n // Wait a bit before disposing of the queryset, in case some queries are still running for it\r\n setTimeout(() => querySet.dispose, 1000);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this._querySet?.dispose();\r\n this._availableIndices.length = 0;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuOcclusionQuery.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuOcclusionQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { WebGPUQuerySet } from \"./webgpuQuerySet\";\r\n\r\n/** @internal */\r\nexport class WebGPUOcclusionQuery {\r\n private _engine: WebGPUEngine;\r\n private _device: GPUDevice;\r\n private _bufferManager: WebGPUBufferManager;\r\n\r\n private _currentTotalIndices: number;\r\n private _countIncrement: number;\r\n private _querySet: WebGPUQuerySet;\r\n private _availableIndices: number[] = [];\r\n private _lastBuffer: Nullable<BigUint64Array>;\r\n private _frameLastBuffer: number;\r\n private _frameQuerySetIsDirty = -1;\r\n private _queryFrameId: number[] = [];\r\n\r\n public get querySet(): GPUQuerySet {\r\n return this._querySet.querySet;\r\n }\r\n\r\n public get hasQueries(): boolean {\r\n return this._currentTotalIndices !== this._availableIndices.length;\r\n }\r\n\r\n public canBeginQuery(index: number): boolean {\r\n if (this._frameQuerySetIsDirty === this._engine.frameId || this._queryFrameId[index] === this._engine.frameId) {\r\n return false;\r\n }\r\n\r\n const canBegin = this._engine._getCurrentRenderPassWrapper().renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n\r\n if (canBegin) {\r\n this._queryFrameId[index] = this._engine.frameId;\r\n }\r\n\r\n return canBegin;\r\n }\r\n\r\n constructor(engine: WebGPUEngine, device: GPUDevice, bufferManager: WebGPUBufferManager, startCount = 50, incrementCount = 100) {\r\n this._engine = engine;\r\n this._device = device;\r\n this._bufferManager = bufferManager;\r\n\r\n this._frameLastBuffer = -1;\r\n this._currentTotalIndices = 0;\r\n this._countIncrement = incrementCount;\r\n\r\n this._allocateNewIndices(startCount);\r\n }\r\n\r\n public createQuery(): number {\r\n if (this._availableIndices.length === 0) {\r\n this._allocateNewIndices();\r\n }\r\n\r\n const index = this._availableIndices[this._availableIndices.length - 1];\r\n this._availableIndices.length--;\r\n\r\n return index;\r\n }\r\n\r\n public deleteQuery(index: number): void {\r\n this._availableIndices[this._availableIndices.length] = index;\r\n }\r\n\r\n public isQueryResultAvailable(index: number): boolean {\r\n this._retrieveQueryBuffer();\r\n\r\n return !!this._lastBuffer && index < this._lastBuffer.length;\r\n }\r\n\r\n public getQueryResult(index: number): number {\r\n return Number(this._lastBuffer?.[index] ?? -1);\r\n }\r\n\r\n private _retrieveQueryBuffer(): void {\r\n if (this._lastBuffer && this._frameLastBuffer === this._engine.frameId) {\r\n return;\r\n }\r\n\r\n if (this._frameLastBuffer !== this._engine.frameId) {\r\n this._frameLastBuffer = this._engine.frameId;\r\n this._querySet.readValues(0, this._currentTotalIndices).then((arrayBuffer) => {\r\n this._lastBuffer = arrayBuffer;\r\n });\r\n }\r\n }\r\n\r\n private _allocateNewIndices(numIndices?: number): void {\r\n numIndices = numIndices ?? this._countIncrement;\r\n\r\n this._delayQuerySetDispose();\r\n\r\n for (let i = 0; i < numIndices; ++i) {\r\n this._availableIndices.push(this._currentTotalIndices + i);\r\n }\r\n\r\n this._currentTotalIndices += numIndices;\r\n this._querySet = new WebGPUQuerySet(\r\n this._currentTotalIndices,\r\n WebGPUConstants.QueryType.Occlusion,\r\n this._device,\r\n this._bufferManager,\r\n false,\r\n \"QuerySet_OcclusionQuery_count_\" + this._currentTotalIndices\r\n );\r\n\r\n this._frameQuerySetIsDirty = this._engine.frameId;\r\n }\r\n\r\n private _delayQuerySetDispose(): void {\r\n const querySet = this._querySet;\r\n if (querySet) {\r\n // Wait a bit before disposing of the queryset, in case some queries are still running for it\r\n setTimeout(() => querySet.dispose, 1000);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this._querySet?.dispose();\r\n this._availableIndices.length = 0;\r\n }\r\n}\r\n"]}
@@ -1,27 +1,24 @@
1
- import type { Nullable } from "../../types";
2
1
  import type { WebGPUEngine } from "../webgpuEngine";
3
2
  import type { WebGPUBundleList } from "./webgpuBundleList";
4
- import type { WebGPUHardwareTexture } from "./webgpuHardwareTexture";
5
3
  /** @internal */
6
4
  export declare class WebGPUSnapshotRendering {
7
5
  private _engine;
8
6
  private _record;
9
7
  private _play;
10
- private _mainPassBundleList;
8
+ private _playBundleListIndex;
9
+ private _allBundleLists;
11
10
  private _modeSaved;
12
11
  private _bundleList;
13
- private _bundleListRenderTarget;
14
12
  private _enabled;
15
13
  private _mode;
16
- constructor(engine: WebGPUEngine, renderingMode: number, bundleList: WebGPUBundleList, bundleListRenderTarget: WebGPUBundleList);
14
+ constructor(engine: WebGPUEngine, renderingMode: number, bundleList: WebGPUBundleList);
17
15
  get enabled(): boolean;
18
16
  get play(): boolean;
19
17
  get record(): boolean;
20
18
  set enabled(activate: boolean);
21
19
  get mode(): number;
22
20
  set mode(mode: number);
23
- endMainRenderPass(): void;
24
- endRenderTargetPass(currentRenderPass: GPURenderPassEncoder, gpuWrapper: WebGPUHardwareTexture): boolean;
25
- endFrame(mainRenderPass: Nullable<GPURenderPassEncoder>): void;
21
+ endRenderPass(currentRenderPass: GPURenderPassEncoder): boolean;
22
+ endFrame(): void;
26
23
  reset(): void;
27
24
  }
@@ -1,15 +1,15 @@
1
1
 
2
2
  /** @internal */
3
3
  export class WebGPUSnapshotRendering {
4
- constructor(engine, renderingMode, bundleList, bundleListRenderTarget) {
4
+ constructor(engine, renderingMode, bundleList) {
5
5
  this._record = false;
6
6
  this._play = false;
7
- this._mainPassBundleList = [];
7
+ this._playBundleListIndex = 0;
8
+ this._allBundleLists = [];
8
9
  this._enabled = false;
9
10
  this._engine = engine;
10
11
  this._mode = renderingMode;
11
12
  this._bundleList = bundleList;
12
- this._bundleListRenderTarget = bundleListRenderTarget;
13
13
  }
14
14
  get enabled() {
15
15
  return this._enabled;
@@ -21,7 +21,7 @@ export class WebGPUSnapshotRendering {
21
21
  return this._record;
22
22
  }
23
23
  set enabled(activate) {
24
- this._mainPassBundleList.length = 0;
24
+ this._allBundleLists.length = 0;
25
25
  this._record = this._enabled = activate;
26
26
  this._play = false;
27
27
  if (activate) {
@@ -40,47 +40,38 @@ export class WebGPUSnapshotRendering {
40
40
  this._mode = mode;
41
41
  }
42
42
  }
43
- endMainRenderPass() {
44
- if (this._record) {
45
- this._mainPassBundleList.push(this._bundleList.clone());
43
+ endRenderPass(currentRenderPass) {
44
+ if (!this._record && !this._play) {
45
+ // Snapshot rendering mode is not enabled
46
+ return false;
46
47
  }
47
- }
48
- endRenderTargetPass(currentRenderPass, gpuWrapper) {
49
- var _a, _b, _c, _d;
50
- if (this._play) {
51
- (_b = (_a = gpuWrapper._bundleLists) === null || _a === void 0 ? void 0 : _a[gpuWrapper._currentLayer]) === null || _b === void 0 ? void 0 : _b.run(currentRenderPass);
52
- if (this._mode === 1) {
53
- this._engine._reportDrawCall((_d = (_c = gpuWrapper._bundleLists) === null || _c === void 0 ? void 0 : _c[gpuWrapper._currentLayer]) === null || _d === void 0 ? void 0 : _d.numDrawCalls);
54
- }
48
+ let bundleList;
49
+ if (this._record) {
50
+ bundleList = this._bundleList.clone();
51
+ this._allBundleLists.push(bundleList);
52
+ this._bundleList.reset();
55
53
  }
56
- else if (this._record) {
57
- if (!gpuWrapper._bundleLists) {
58
- gpuWrapper._bundleLists = [];
54
+ else {
55
+ // We are playing the snapshot
56
+ if (this._playBundleListIndex >= this._allBundleLists.length) {
57
+ throw new Error(`Invalid playBundleListIndex! Your snapshot is no longer valid for the current frame, you should recreate a new one. playBundleListIndex=${this._playBundleListIndex}, allBundleLists.length=${this._allBundleLists.length}}`);
59
58
  }
60
- gpuWrapper._bundleLists[gpuWrapper._currentLayer] = this._bundleListRenderTarget.clone();
61
- gpuWrapper._bundleLists[gpuWrapper._currentLayer].run(currentRenderPass);
62
- this._bundleListRenderTarget.reset();
59
+ bundleList = this._allBundleLists[this._playBundleListIndex++];
63
60
  }
64
- else {
65
- return false;
61
+ bundleList.run(currentRenderPass);
62
+ if (this._mode === 1) {
63
+ this._engine._reportDrawCall(bundleList.numDrawCalls);
66
64
  }
67
65
  return true;
68
66
  }
69
- endFrame(mainRenderPass) {
67
+ endFrame() {
70
68
  if (this._record) {
71
- this._mainPassBundleList.push(this._bundleList.clone());
69
+ // We stop recording and switch to replay mode for the next frames
72
70
  this._record = false;
73
71
  this._play = true;
74
72
  this._mode = this._modeSaved;
75
73
  }
76
- if (mainRenderPass !== null && this._play) {
77
- for (let i = 0; i < this._mainPassBundleList.length; ++i) {
78
- this._mainPassBundleList[i].run(mainRenderPass);
79
- if (this._mode === 1) {
80
- this._engine._reportDrawCall(this._mainPassBundleList[i].numDrawCalls);
81
- }
82
- }
83
- }
74
+ this._playBundleListIndex = 0;
84
75
  }
85
76
  reset() {
86
77
  this.enabled = false;