@babylonjs/core 5.0.0-alpha.63 → 5.0.0-alpha.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/Animations/animation.js +42 -2
  2. package/Animations/animation.js.map +1 -1
  3. package/Animations/animationGroup.d.ts +1 -1
  4. package/Animations/animationGroup.js +1 -1
  5. package/Animations/animationGroup.js.map +1 -1
  6. package/Audio/sound.js +14 -0
  7. package/Audio/sound.js.map +1 -1
  8. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +1 -1
  9. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  10. package/Cameras/VR/vrExperienceHelper.d.ts +1 -1
  11. package/Cameras/VR/vrExperienceHelper.js +1 -1
  12. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  13. package/DeviceInput/Implementations/{nativeDeviceInputWrapper.d.ts → nativeDeviceInputSystem.d.ts} +5 -21
  14. package/DeviceInput/Implementations/{nativeDeviceInputWrapper.js → nativeDeviceInputSystem.js} +19 -20
  15. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +1 -0
  16. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +7 -20
  17. package/DeviceInput/Implementations/webDeviceInputSystem.js +70 -62
  18. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  19. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -2
  20. package/DeviceInput/InputDevices/deviceSourceManager.js +5 -1
  21. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  22. package/DeviceInput/Interfaces/inputInterfaces.d.ts +6 -13
  23. package/DeviceInput/Interfaces/inputInterfaces.js.map +1 -1
  24. package/DeviceInput/deviceInputSystem.d.ts +49 -5
  25. package/DeviceInput/deviceInputSystem.js +62 -10
  26. package/DeviceInput/deviceInputSystem.js.map +1 -1
  27. package/DeviceInput/index.d.ts +1 -1
  28. package/DeviceInput/index.js +1 -1
  29. package/DeviceInput/index.js.map +1 -1
  30. package/Engines/Extensions/engine.views.d.ts +1 -1
  31. package/Engines/Extensions/engine.views.js +1 -1
  32. package/Engines/Extensions/engine.views.js.map +1 -1
  33. package/Engines/Processors/iShaderProcessor.d.ts +1 -1
  34. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  35. package/Engines/Processors/shaderProcessingOptions.d.ts +5 -0
  36. package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
  37. package/Engines/Processors/shaderProcessor.js +8 -2
  38. package/Engines/Processors/shaderProcessor.js.map +1 -1
  39. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
  40. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  41. package/Engines/WebGPU/webgpuCacheBindGroups.js +3 -3
  42. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  43. package/Engines/WebGPU/webgpuClearQuad.js +17 -8
  44. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  45. package/Engines/WebGPU/webgpuComputeContext.js +2 -2
  46. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  47. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +2 -1
  48. package/Engines/WebGPU/webgpuHardwareTexture.js +10 -1
  49. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  50. package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -0
  51. package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
  52. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +2 -0
  53. package/Engines/WebGPU/webgpuShaderProcessor.js +23 -0
  54. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  55. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -0
  56. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +17 -1
  57. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  58. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -2
  59. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +10 -29
  60. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  61. package/Engines/WebGPU/webgpuTextureHelper.js +4 -3
  62. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  63. package/Engines/engine.d.ts +63 -6
  64. package/Engines/engine.js.map +1 -1
  65. package/Engines/nativeEngine.js +3 -7
  66. package/Engines/nativeEngine.js.map +1 -1
  67. package/Engines/thinEngine.js +2 -2
  68. package/Engines/thinEngine.js.map +1 -1
  69. package/Engines/webgpuEngine.d.ts +5 -13
  70. package/Engines/webgpuEngine.js +18 -55
  71. package/Engines/webgpuEngine.js.map +1 -1
  72. package/Gizmos/positionGizmo.js +1 -1
  73. package/Gizmos/positionGizmo.js.map +1 -1
  74. package/Inputs/scene.inputManager.js +1 -1
  75. package/Inputs/scene.inputManager.js.map +1 -1
  76. package/Layers/highlightLayer.js +2 -0
  77. package/Layers/highlightLayer.js.map +1 -1
  78. package/Loading/Plugins/babylonFileLoader.js +3 -0
  79. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  80. package/Materials/Node/Blocks/customBlock.js +3 -3
  81. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  82. package/Materials/Node/nodeMaterial.js +8 -0
  83. package/Materials/Node/nodeMaterial.js.map +1 -1
  84. package/Materials/Node/nodeMaterialBlock.js +1 -1
  85. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  86. package/Materials/PBR/index.d.ts +4 -0
  87. package/Materials/PBR/index.js +4 -0
  88. package/Materials/PBR/index.js.map +1 -1
  89. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +28 -96
  90. package/Materials/PBR/pbrAnisotropicConfiguration.js +50 -111
  91. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  92. package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -37
  93. package/Materials/PBR/pbrBRDFConfiguration.js +39 -52
  94. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  95. package/Materials/PBR/pbrBaseMaterial.d.ts +15 -74
  96. package/Materials/PBR/pbrBaseMaterial.js +66 -181
  97. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  98. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  99. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +23 -98
  100. package/Materials/PBR/pbrClearCoatConfiguration.js +91 -143
  101. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  102. package/Materials/PBR/pbrSheenConfiguration.d.ts +25 -93
  103. package/Materials/PBR/pbrSheenConfiguration.js +71 -126
  104. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  105. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +28 -114
  106. package/Materials/PBR/pbrSubSurfaceConfiguration.js +150 -211
  107. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  108. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  109. package/Materials/Textures/dynamicTexture.js +1 -1
  110. package/Materials/Textures/dynamicTexture.js.map +1 -1
  111. package/Materials/Textures/videoTexture.d.ts +1 -1
  112. package/Materials/Textures/videoTexture.js +1 -1
  113. package/Materials/Textures/videoTexture.js.map +1 -1
  114. package/Materials/effect.d.ts +6 -1
  115. package/Materials/effect.js +4 -1
  116. package/Materials/effect.js.map +1 -1
  117. package/Materials/fresnelParameters.d.ts +1 -1
  118. package/Materials/fresnelParameters.js +1 -1
  119. package/Materials/fresnelParameters.js.map +1 -1
  120. package/Materials/index.d.ts +4 -0
  121. package/Materials/index.js +4 -0
  122. package/Materials/index.js.map +1 -1
  123. package/Materials/material.d.ts +43 -2
  124. package/Materials/material.detailMapConfiguration.d.ts +29 -87
  125. package/Materials/material.detailMapConfiguration.js +50 -106
  126. package/Materials/material.detailMapConfiguration.js.map +1 -1
  127. package/Materials/material.js +99 -8
  128. package/Materials/material.js.map +1 -1
  129. package/Materials/materialDefines.d.ts +16 -0
  130. package/Materials/materialDefines.js +17 -5
  131. package/Materials/materialDefines.js.map +1 -1
  132. package/Materials/materialPluginBase.d.ts +182 -0
  133. package/Materials/materialPluginBase.js +209 -0
  134. package/Materials/materialPluginBase.js.map +1 -0
  135. package/Materials/materialPluginEvent.d.ts +98 -0
  136. package/Materials/materialPluginEvent.js +21 -0
  137. package/Materials/materialPluginEvent.js.map +1 -0
  138. package/Materials/materialPluginFactoryExport.d.ts +40 -0
  139. package/Materials/materialPluginFactoryExport.js +75 -0
  140. package/Materials/materialPluginFactoryExport.js.map +1 -0
  141. package/Materials/materialPluginManager.d.ts +90 -0
  142. package/Materials/materialPluginManager.js +323 -0
  143. package/Materials/materialPluginManager.js.map +1 -0
  144. package/Materials/shaderMaterial.d.ts +1 -1
  145. package/Materials/shaderMaterial.js +1 -1
  146. package/Materials/shaderMaterial.js.map +1 -1
  147. package/Materials/standardMaterial.d.ts +13 -10
  148. package/Materials/standardMaterial.js +44 -50
  149. package/Materials/standardMaterial.js.map +1 -1
  150. package/Meshes/Builders/capsuleBuilder.d.ts +1 -1
  151. package/Meshes/Builders/capsuleBuilder.js +1 -1
  152. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  153. package/Meshes/abstractMesh.d.ts +1 -1
  154. package/Meshes/abstractMesh.js +1 -1
  155. package/Meshes/abstractMesh.js.map +1 -1
  156. package/Meshes/linesMesh.d.ts +1 -1
  157. package/Meshes/linesMesh.js +3 -2
  158. package/Meshes/linesMesh.js.map +1 -1
  159. package/Meshes/mesh.lts.d.ts +8 -8
  160. package/Meshes/mesh.lts.js.map +1 -1
  161. package/Meshes/mesh.vertexData.js.map +1 -1
  162. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
  163. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +25 -25
  164. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  165. package/Misc/PerformanceViewer/performanceViewerCollector.d.ts +11 -1
  166. package/Misc/PerformanceViewer/performanceViewerCollector.js +30 -8
  167. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  168. package/Misc/coroutine.d.ts +2 -6
  169. package/Misc/coroutine.js.map +1 -1
  170. package/Misc/sceneSerializer.js +1 -0
  171. package/Misc/sceneSerializer.js.map +1 -1
  172. package/Particles/particleSystem.js +3 -0
  173. package/Particles/particleSystem.js.map +1 -1
  174. package/Rendering/depthPeelingRenderer.d.ts +4 -1
  175. package/Rendering/depthPeelingRenderer.js +34 -9
  176. package/Rendering/depthPeelingRenderer.js.map +1 -1
  177. package/Rendering/renderingGroup.js +5 -1
  178. package/Rendering/renderingGroup.js.map +1 -1
  179. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
  180. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  181. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  182. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  183. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
  184. package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
  185. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  186. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  187. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  188. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  189. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  190. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  191. package/Shaders/anaglyph.fragment.js +1 -1
  192. package/Shaders/anaglyph.fragment.js.map +1 -1
  193. package/Shaders/background.fragment.js +1 -1
  194. package/Shaders/background.fragment.js.map +1 -1
  195. package/Shaders/background.vertex.js +1 -1
  196. package/Shaders/background.vertex.js.map +1 -1
  197. package/Shaders/blackAndWhite.fragment.js +1 -1
  198. package/Shaders/blackAndWhite.fragment.js.map +1 -1
  199. package/Shaders/bloomMerge.fragment.js +1 -1
  200. package/Shaders/bloomMerge.fragment.js.map +1 -1
  201. package/Shaders/blur.fragment.js +1 -1
  202. package/Shaders/blur.fragment.js.map +1 -1
  203. package/Shaders/boundingBoxRenderer.fragment.js +1 -1
  204. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
  205. package/Shaders/boundingBoxRenderer.vertex.js +1 -1
  206. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
  207. package/Shaders/chromaticAberration.fragment.js +1 -1
  208. package/Shaders/chromaticAberration.fragment.js.map +1 -1
  209. package/Shaders/circleOfConfusion.fragment.js +1 -1
  210. package/Shaders/circleOfConfusion.fragment.js.map +1 -1
  211. package/Shaders/clearQuad.vertex.js +1 -1
  212. package/Shaders/clearQuad.vertex.js.map +1 -1
  213. package/Shaders/color.fragment.js +1 -1
  214. package/Shaders/color.fragment.js.map +1 -1
  215. package/Shaders/color.vertex.js +1 -1
  216. package/Shaders/color.vertex.js.map +1 -1
  217. package/Shaders/colorCorrection.fragment.js +1 -1
  218. package/Shaders/colorCorrection.fragment.js.map +1 -1
  219. package/Shaders/convolution.fragment.js +1 -1
  220. package/Shaders/convolution.fragment.js.map +1 -1
  221. package/Shaders/default.fragment.js +1 -1
  222. package/Shaders/default.fragment.js.map +1 -1
  223. package/Shaders/depth.fragment.js +1 -1
  224. package/Shaders/depth.fragment.js.map +1 -1
  225. package/Shaders/depth.vertex.js +1 -1
  226. package/Shaders/depth.vertex.js.map +1 -1
  227. package/Shaders/depthBoxBlur.fragment.js +1 -1
  228. package/Shaders/depthBoxBlur.fragment.js.map +1 -1
  229. package/Shaders/depthOfField.fragment.js +1 -1
  230. package/Shaders/depthOfField.fragment.js.map +1 -1
  231. package/Shaders/depthOfFieldMerge.fragment.js +1 -1
  232. package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
  233. package/Shaders/displayPass.fragment.js +1 -1
  234. package/Shaders/displayPass.fragment.js.map +1 -1
  235. package/Shaders/extractHighlights.fragment.js +1 -1
  236. package/Shaders/extractHighlights.fragment.js.map +1 -1
  237. package/Shaders/filter.fragment.js +1 -1
  238. package/Shaders/filter.fragment.js.map +1 -1
  239. package/Shaders/fxaa.vertex.js +1 -1
  240. package/Shaders/fxaa.vertex.js.map +1 -1
  241. package/Shaders/geometry.vertex.js +1 -1
  242. package/Shaders/geometry.vertex.js.map +1 -1
  243. package/Shaders/glowBlurPostProcess.fragment.js +1 -1
  244. package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
  245. package/Shaders/glowMapGeneration.fragment.js +1 -1
  246. package/Shaders/glowMapGeneration.fragment.js.map +1 -1
  247. package/Shaders/glowMapGeneration.vertex.js +1 -1
  248. package/Shaders/glowMapGeneration.vertex.js.map +1 -1
  249. package/Shaders/glowMapMerge.fragment.js +1 -1
  250. package/Shaders/glowMapMerge.fragment.js.map +1 -1
  251. package/Shaders/glowMapMerge.vertex.js +1 -1
  252. package/Shaders/glowMapMerge.vertex.js.map +1 -1
  253. package/Shaders/grain.fragment.js +1 -1
  254. package/Shaders/grain.fragment.js.map +1 -1
  255. package/Shaders/hdrFiltering.vertex.js +1 -1
  256. package/Shaders/hdrFiltering.vertex.js.map +1 -1
  257. package/Shaders/highlights.fragment.js +1 -1
  258. package/Shaders/highlights.fragment.js.map +1 -1
  259. package/Shaders/imageProcessing.fragment.js +1 -1
  260. package/Shaders/imageProcessing.fragment.js.map +1 -1
  261. package/Shaders/kernelBlur.fragment.js +1 -1
  262. package/Shaders/kernelBlur.fragment.js.map +1 -1
  263. package/Shaders/kernelBlur.vertex.js +1 -1
  264. package/Shaders/kernelBlur.vertex.js.map +1 -1
  265. package/Shaders/layer.fragment.js +1 -1
  266. package/Shaders/layer.fragment.js.map +1 -1
  267. package/Shaders/layer.vertex.js +1 -1
  268. package/Shaders/layer.vertex.js.map +1 -1
  269. package/Shaders/lensFlare.fragment.js +1 -1
  270. package/Shaders/lensFlare.fragment.js.map +1 -1
  271. package/Shaders/lensFlare.vertex.js +1 -1
  272. package/Shaders/lensFlare.vertex.js.map +1 -1
  273. package/Shaders/lensHighlights.fragment.js +1 -1
  274. package/Shaders/lensHighlights.fragment.js.map +1 -1
  275. package/Shaders/line.fragment.js +1 -1
  276. package/Shaders/line.fragment.js.map +1 -1
  277. package/Shaders/line.vertex.js +1 -1
  278. package/Shaders/line.vertex.js.map +1 -1
  279. package/Shaders/minmaxRedux.fragment.js +1 -1
  280. package/Shaders/minmaxRedux.fragment.js.map +1 -1
  281. package/Shaders/motionBlur.fragment.js +1 -1
  282. package/Shaders/motionBlur.fragment.js.map +1 -1
  283. package/Shaders/noise.fragment.js +1 -1
  284. package/Shaders/noise.fragment.js.map +1 -1
  285. package/Shaders/outline.fragment.js +1 -1
  286. package/Shaders/outline.fragment.js.map +1 -1
  287. package/Shaders/outline.vertex.js +1 -1
  288. package/Shaders/outline.vertex.js.map +1 -1
  289. package/Shaders/particles.fragment.js +1 -1
  290. package/Shaders/particles.fragment.js.map +1 -1
  291. package/Shaders/particles.vertex.js +1 -1
  292. package/Shaders/particles.vertex.js.map +1 -1
  293. package/Shaders/pass.fragment.js +1 -1
  294. package/Shaders/pass.fragment.js.map +1 -1
  295. package/Shaders/passCube.fragment.js +1 -1
  296. package/Shaders/passCube.fragment.js.map +1 -1
  297. package/Shaders/pbr.fragment.js +1 -1
  298. package/Shaders/pbr.fragment.js.map +1 -1
  299. package/Shaders/postprocess.vertex.js +1 -1
  300. package/Shaders/postprocess.vertex.js.map +1 -1
  301. package/Shaders/procedural.vertex.js +1 -1
  302. package/Shaders/procedural.vertex.js.map +1 -1
  303. package/Shaders/rgbdDecode.fragment.js +1 -1
  304. package/Shaders/rgbdDecode.fragment.js.map +1 -1
  305. package/Shaders/rgbdEncode.fragment.js +1 -1
  306. package/Shaders/rgbdEncode.fragment.js.map +1 -1
  307. package/Shaders/screenSpaceCurvature.fragment.js +1 -1
  308. package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
  309. package/Shaders/shadowMap.fragment.js +1 -1
  310. package/Shaders/shadowMap.fragment.js.map +1 -1
  311. package/Shaders/shadowMap.vertex.js +1 -1
  312. package/Shaders/shadowMap.vertex.js.map +1 -1
  313. package/Shaders/sharpen.fragment.js +1 -1
  314. package/Shaders/sharpen.fragment.js.map +1 -1
  315. package/Shaders/sprites.fragment.js +1 -1
  316. package/Shaders/sprites.fragment.js.map +1 -1
  317. package/Shaders/sprites.vertex.js +1 -1
  318. package/Shaders/sprites.vertex.js.map +1 -1
  319. package/Shaders/ssaoCombine.fragment.js +1 -1
  320. package/Shaders/ssaoCombine.fragment.js.map +1 -1
  321. package/Shaders/standard.fragment.js +1 -1
  322. package/Shaders/standard.fragment.js.map +1 -1
  323. package/Shaders/stereoscopicInterlace.fragment.js +1 -1
  324. package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
  325. package/Shaders/subSurfaceScattering.fragment.js +1 -1
  326. package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
  327. package/Shaders/tonemap.fragment.js +1 -1
  328. package/Shaders/tonemap.fragment.js.map +1 -1
  329. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  330. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  331. package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
  332. package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
  333. package/Shaders/volumetricLightScatteringPass.vertex.js +1 -1
  334. package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
  335. package/Shaders/vrDistortionCorrection.fragment.js +1 -1
  336. package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
  337. package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
  338. package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
  339. package/XR/features/WebXRHandTracking.d.ts +2 -0
  340. package/XR/features/WebXRHandTracking.js +34 -14
  341. package/XR/features/WebXRHandTracking.js.map +1 -1
  342. package/XR/features/WebXRLayers.d.ts +78 -0
  343. package/XR/features/WebXRLayers.js +243 -0
  344. package/XR/features/WebXRLayers.js.map +1 -0
  345. package/XR/features/WebXRPlaneDetector.js +8 -12
  346. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  347. package/XR/features/index.d.ts +1 -0
  348. package/XR/features/index.js +1 -0
  349. package/XR/features/index.js.map +1 -1
  350. package/XR/native/index.d.ts +1 -0
  351. package/XR/native/index.js +2 -0
  352. package/XR/native/index.js.map +1 -0
  353. package/XR/native/nativeXRRenderTarget.d.ts +44 -0
  354. package/XR/native/nativeXRRenderTarget.js +81 -0
  355. package/XR/native/nativeXRRenderTarget.js.map +1 -0
  356. package/XR/webXRCamera.js +2 -10
  357. package/XR/webXRCamera.js.map +1 -1
  358. package/XR/webXRExperienceHelper.js +15 -13
  359. package/XR/webXRExperienceHelper.js.map +1 -1
  360. package/XR/webXRFeaturesManager.d.ts +4 -0
  361. package/XR/webXRFeaturesManager.js +4 -0
  362. package/XR/webXRFeaturesManager.js.map +1 -1
  363. package/XR/webXRLayerWrapper.d.ts +48 -0
  364. package/XR/webXRLayerWrapper.js +60 -0
  365. package/XR/webXRLayerWrapper.js.map +1 -0
  366. package/XR/webXRManagedOutputCanvas.d.ts +2 -1
  367. package/XR/webXRManagedOutputCanvas.js +36 -29
  368. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  369. package/XR/webXRRenderTargetTextureProvider.d.ts +55 -0
  370. package/XR/webXRRenderTargetTextureProvider.js +63 -0
  371. package/XR/webXRRenderTargetTextureProvider.js.map +1 -0
  372. package/XR/webXRSessionManager.d.ts +30 -7
  373. package/XR/webXRSessionManager.js +62 -64
  374. package/XR/webXRSessionManager.js.map +1 -1
  375. package/XR/webXRTypes.d.ts +1 -1
  376. package/XR/webXRTypes.js.map +1 -1
  377. package/XR/webXRWebGLLayer.d.ts +36 -0
  378. package/XR/webXRWebGLLayer.js +69 -0
  379. package/XR/webXRWebGLLayer.js.map +1 -0
  380. package/abstractScene.d.ts +1 -1
  381. package/abstractScene.js +1 -1
  382. package/abstractScene.js.map +1 -1
  383. package/package.json +35 -5
  384. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuShaderProcessor.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuShaderProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\nimport { Nullable } from \"../../types\";\r\nimport { IShaderProcessor } from \"../Processors/iShaderProcessor\";\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { WebGPUSamplerDescription, WebGPUShaderProcessingContext, WebGPUTextureDescription, WebGPUBufferDescription } from \"./webgpuShaderProcessingContext\";\r\n\r\n/** @hidden */\r\nexport abstract class WebGPUShaderProcessor implements IShaderProcessor {\r\n\r\n public static readonly AutoSamplerSuffix = \"Sampler\";\r\n public static readonly LeftOvertUBOName = \"LeftOver\";\r\n\r\n public static UniformSizes: { [type: string]: number } = {\r\n // GLSL types\r\n \"bool\": 1,\r\n \"int\": 1,\r\n \"float\": 1,\r\n \"vec2\": 2,\r\n \"ivec2\": 2,\r\n \"vec3\": 3,\r\n \"ivec3\": 3,\r\n \"vec4\": 4,\r\n \"ivec4\": 4,\r\n \"mat2\": 4,\r\n \"mat3\": 12,\r\n \"mat4\": 16,\r\n\r\n // WGSL types\r\n \"i32\": 1,\r\n \"u32\": 1,\r\n \"f32\": 1,\r\n \"mat2x2\": 4,\r\n \"mat3x3\": 12,\r\n \"mat4x4\": 16\r\n };\r\n\r\n protected static _SamplerFunctionByWebGLSamplerType: { [key: string]: string } = {\r\n \"sampler2D\": \"sampler2D\",\r\n \"sampler2DArray\": \"sampler2DArray\",\r\n \"sampler2DShadow\": \"sampler2DShadow\",\r\n \"sampler2DArrayShadow\": \"sampler2DArrayShadow\",\r\n \"samplerCube\": \"samplerCube\",\r\n \"sampler3D\": \"sampler3D\",\r\n };\r\n\r\n protected static _TextureTypeByWebGLSamplerType: { [key: string]: string } = {\r\n \"sampler2D\": \"texture2D\",\r\n \"sampler2DArray\": \"texture2DArray\",\r\n \"sampler2DShadow\": \"texture2D\",\r\n \"sampler2DArrayShadow\": \"texture2DArray\",\r\n \"samplerCube\": \"textureCube\",\r\n \"samplerCubeArray\": \"textureCubeArray\",\r\n \"sampler3D\": \"texture3D\",\r\n };\r\n\r\n protected static _GpuTextureViewDimensionByWebGPUTextureType: { [key: string]: GPUTextureViewDimension } = {\r\n \"textureCube\": WebGPUConstants.TextureViewDimension.Cube,\r\n \"textureCubeArray\": WebGPUConstants.TextureViewDimension.CubeArray,\r\n \"texture2D\": WebGPUConstants.TextureViewDimension.E2d,\r\n \"texture2DArray\": WebGPUConstants.TextureViewDimension.E2dArray,\r\n \"texture3D\": WebGPUConstants.TextureViewDimension.E3d,\r\n };\r\n\r\n // if the webgl sampler type is not listed in this array, \"sampler\" is taken by default\r\n protected static _SamplerTypeByWebGLSamplerType: { [key: string]: string } = {\r\n \"sampler2DShadow\": \"samplerShadow\",\r\n \"sampler2DArrayShadow\": \"samplerShadow\",\r\n };\r\n\r\n protected static _IsComparisonSamplerByWebGPUSamplerType: { [key: string]: boolean } = {\r\n \"samplerShadow\": true,\r\n \"samplerArrayShadow\": true,\r\n \"sampler\": false,\r\n };\r\n\r\n public shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n protected webgpuProcessingContext: WebGPUShaderProcessingContext;\r\n\r\n protected abstract _getArraySize(name: string, type: string, preProcessors: { [key: string]: string }): [string, string, number];\r\n protected abstract _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string;\r\n\r\n protected _addUniformToLeftOverUBO(name: string, uniformType: string, preProcessors: { [key: string]: string }): void {\r\n let length = 0;\r\n\r\n [name, uniformType, length] = this._getArraySize(name, uniformType, preProcessors);\r\n\r\n for (let i = 0; i < this.webgpuProcessingContext.leftOverUniforms.length; i++) {\r\n if (this.webgpuProcessingContext.leftOverUniforms[i].name === name) {\r\n return;\r\n }\r\n }\r\n\r\n this.webgpuProcessingContext.leftOverUniforms.push({\r\n name,\r\n type: uniformType,\r\n length\r\n });\r\n }\r\n\r\n protected _buildLeftOverUBO(): string {\r\n if (!this.webgpuProcessingContext.leftOverUniforms.length) {\r\n return \"\";\r\n }\r\n const name = WebGPUShaderProcessor.LeftOvertUBOName;\r\n let availableUBO = this.webgpuProcessingContext.availableBuffers[name];\r\n if (!availableUBO) {\r\n availableUBO = {\r\n binding: this.webgpuProcessingContext.getNextFreeUBOBinding(),\r\n };\r\n this.webgpuProcessingContext.availableBuffers[name] = availableUBO;\r\n this._addBufferBindingDescription(name, availableUBO, WebGPUConstants.BufferBindingType.Uniform, true);\r\n this._addBufferBindingDescription(name, availableUBO, WebGPUConstants.BufferBindingType.Uniform, false);\r\n }\r\n\r\n return this._generateLeftOverUBOCode(name, availableUBO);\r\n }\r\n\r\n protected _collectBindingNames(): void {\r\n // collect all the binding names for faster processing in WebGPUCacheBindGroup\r\n for (let i = 0; i < this.webgpuProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = this.webgpuProcessingContext.bindGroupLayoutEntries[i];\r\n if (setDefinition === undefined) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[i] = [];\r\n continue;\r\n }\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = this.webgpuProcessingContext.bindGroupLayoutEntries[i][j];\r\n const name = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding].name;\r\n const nameInArrayOfTexture = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding].nameInArrayOfTexture;\r\n if (entry) {\r\n if (entry.texture || entry.externalTexture || entry.storageTexture) {\r\n this.webgpuProcessingContext.textureNames.push(nameInArrayOfTexture!);\r\n } else if (entry.sampler) {\r\n this.webgpuProcessingContext.samplerNames.push(name);\r\n } else if (entry.buffer) {\r\n this.webgpuProcessingContext.bufferNames.push(name);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _preCreateBindGroupEntries(): void {\r\n const bindGroupEntries = this.webgpuProcessingContext.bindGroupEntries;\r\n\r\n for (let i = 0; i < this.webgpuProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = this.webgpuProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries: GPUBindGroupEntry[] = [];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = this.webgpuProcessingContext.bindGroupLayoutEntries[i][j];\r\n\r\n if (entry.sampler || entry.texture || entry.storageTexture || entry.externalTexture) {\r\n entries.push({\r\n binding: entry.binding,\r\n resource: undefined as any,\r\n });\r\n } else if (entry.buffer) {\r\n entries.push({\r\n binding: entry.binding,\r\n resource: {\r\n buffer: undefined as any,\r\n offset: 0,\r\n size: 0,\r\n },\r\n });\r\n }\r\n }\r\n\r\n bindGroupEntries[i] = entries;\r\n }\r\n }\r\n\r\n protected _addTextureBindingDescription(name: string, textureInfo: WebGPUTextureDescription, textureIndex: number, dimension: Nullable<GPUTextureViewDimension>, format: Nullable<GPUTextureFormat>, isVertex: boolean): void {\r\n let { groupIndex, bindingIndex } = textureInfo.textures[textureIndex];\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex]) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex] = [];\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex] = [];\r\n }\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex]) {\r\n let len;\r\n if (dimension === null) {\r\n len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n externalTexture: {},\r\n });\r\n } else if (format) {\r\n len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n storageTexture: {\r\n access: WebGPUConstants.StorageTextureAccess.WriteOnly,\r\n format,\r\n viewDimension: dimension,\r\n },\r\n });\r\n } else {\r\n len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n texture: {\r\n sampleType: textureInfo.sampleType,\r\n viewDimension: dimension,\r\n multisampled: false,\r\n },\r\n });\r\n }\r\n const textureName = textureInfo.isTextureArray ? name + textureIndex : name;\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex] = { name, index: len - 1, nameInArrayOfTexture: textureName };\r\n }\r\n\r\n bindingIndex = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex].index;\r\n if (isVertex) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Vertex;\r\n } else {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;\r\n }\r\n }\r\n\r\n protected _addSamplerBindingDescription(name: string, samplerInfo: WebGPUSamplerDescription, isVertex: boolean): void {\r\n let { groupIndex, bindingIndex } = samplerInfo.binding;\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex]) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex] = [];\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex] = [];\r\n }\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex]) {\r\n const len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n sampler: {\r\n type: samplerInfo.type,\r\n },\r\n });\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex] = { name, index: len - 1 };\r\n }\r\n\r\n bindingIndex = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex].index;\r\n if (isVertex) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Vertex;\r\n } else {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;\r\n }\r\n }\r\n\r\n protected _addBufferBindingDescription(name: string, uniformBufferInfo: WebGPUBufferDescription, bufferType: GPUBufferBindingType, isVertex: boolean): void {\r\n let { groupIndex, bindingIndex } = uniformBufferInfo.binding;\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex]) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex] = [];\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex] = [];\r\n }\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex]) {\r\n const len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n buffer: {\r\n type: bufferType,\r\n },\r\n });\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex] = { name, index: len - 1 };\r\n }\r\n\r\n bindingIndex = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex].index;\r\n if (isVertex) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Vertex;\r\n } else {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuShaderProcessor.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuShaderProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAGrD,cAAc;AACd;IAAA;QAqEW,mBAAc,GAAG,cAAc,CAAC,IAAI,CAAC;IA4NhD,CAAC;IArNa,wDAAwB,GAAlC,UAAmC,IAAY,EAAE,WAAmB,EAAE,aAAwC;;QAC1G,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAA8B,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,EAAjF,IAAI,QAAA,EAAE,WAAW,QAAA,EAAE,MAAM,QAAA,CAAyD;QAEnF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3E,IAAI,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;gBAChE,OAAO;aACV;SACJ;QAED,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC/C,IAAI,MAAA;YACJ,IAAI,EAAE,WAAW;YACjB,MAAM,QAAA;SACT,CAAC,CAAC;IACP,CAAC;IAES,iDAAiB,GAA3B;QACI,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACvD,OAAO,EAAE,CAAC;SACb;QACD,IAAM,IAAI,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;QACpD,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY,EAAE;YACf,YAAY,GAAG;gBACX,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE;aAChE,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;YACnE,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvG,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC3G;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;IAES,oDAAoB,GAA9B;QACI,8EAA8E;QAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjF,IAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC7B,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC5D,SAAS;aACZ;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAM,MAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;gBAC1F,IAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC;gBAC1H,IAAI,KAAK,EAAE;oBACP,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,cAAc,EAAE;wBAChE,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC;qBACzE;yBAAM,IAAI,KAAK,CAAC,OAAO,EAAE;wBACtB,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC;qBACxD;yBAAO,IAAI,KAAK,CAAC,MAAM,EAAE;wBACtB,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC;qBACvD;iBACJ;aACJ;SACJ;IACL,CAAC;IAES,0DAA0B,GAApC;QACI,IAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC;QAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjF,IAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAE7E,IAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExE,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,eAAe,EAAE;oBACjF,OAAO,CAAC,IAAI,CAAC;wBACT,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,QAAQ,EAAE,SAAgB;qBAC7B,CAAC,CAAC;iBACN;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE;oBACrB,OAAO,CAAC,IAAI,CAAC;wBACT,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,QAAQ,EAAE;4BACN,MAAM,EAAE,SAAgB;4BACxB,MAAM,EAAE,CAAC;4BACT,IAAI,EAAE,CAAC;yBACV;qBACJ,CAAC,CAAC;iBACN;aACJ;YAED,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;SACjC;IACL,CAAC;IAES,6DAA6B,GAAvC,UAAwC,IAAY,EAAE,WAAqC,EAAE,YAAoB,EAAE,SAA4C,EAAE,MAAkC,EAAE,QAAiB;QAC9M,IAAA,KAA+B,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAA/D,UAAU,gBAAA,EAAE,YAAY,kBAAuC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE;YAClE,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACrE,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;SAC1E;QACD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE;YAClF,IAAI,GAAG,SAAA,CAAC;YACR,IAAI,SAAS,KAAK,IAAI,EAAE;gBACpB,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;oBACvE,OAAO,EAAE,YAAY;oBACrB,UAAU,EAAE,CAAC;oBACb,eAAe,EAAE,EAAE;iBACtB,CAAC,CAAC;aACN;iBAAM,IAAI,MAAM,EAAE;gBACf,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;oBACvE,OAAO,EAAE,YAAY;oBACrB,UAAU,EAAE,CAAC;oBACb,cAAc,EAAE;wBACZ,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,SAAS;wBACtD,MAAM,QAAA;wBACN,aAAa,EAAE,SAAS;qBAC3B;iBACJ,CAAC,CAAC;aACN;iBAAM;gBACH,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;oBACvE,OAAO,EAAE,YAAY;oBACrB,UAAU,EAAE,CAAC;oBACb,OAAO,EAAE;wBACL,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,aAAa,EAAE,SAAS;wBACxB,YAAY,EAAE,KAAK;qBACtB;iBACJ,CAAC,CAAC;aACN;YACD,IAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,MAAA,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC;SACjJ;QAED,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;QACrG,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;SAClI;aAAM;YACH,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC;SACpI;IACL,CAAC;IAES,6DAA6B,GAAvC,UAAwC,IAAY,EAAE,WAAqC,EAAE,QAAiB;QACtG,IAAA,KAA+B,WAAW,CAAC,OAAO,EAAhD,UAAU,gBAAA,EAAE,YAAY,kBAAwB,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE;YAClE,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACrE,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;SAC1E;QACD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE;YAClF,IAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBAC7E,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE;oBACL,IAAI,EAAE,WAAW,CAAC,IAAI;iBACzB;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,MAAA,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;SAC9G;QAED,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;QACrG,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;SAClI;aAAM;YACH,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC;SACpI;IACL,CAAC;IAES,4DAA4B,GAAtC,UAAuC,IAAY,EAAE,iBAA0C,EAAE,UAAgC,EAAE,QAAiB;QAC5I,IAAA,KAA+B,iBAAiB,CAAC,OAAO,EAAtD,UAAU,gBAAA,EAAE,YAAY,kBAA8B,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE;YAClE,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACrE,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;SAC1E;QACD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE;YAClF,IAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBAC7E,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE;oBACJ,IAAI,EAAE,UAAU;iBACnB;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,MAAA,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;SAC9G;QAED,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;QACrG,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;SAClI;aAAM;YACH,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,IAAI,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC;SACpI;IACL,CAAC;IAES,4DAA4B,GAAtC,UAAuC,IAAY,EAAE,YAAoB,EAAE,YAAqB,EAAE,UAAmB;QACjH,IAAI,YAAY,EAAE;YACd,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG;gBAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;oBACnB,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG;oBAC3D,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;wBACnB,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;wBACzC,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBACtC,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK,CAAC;qBACvC;iBACJ;aACJ;SACJ;QAED,IAAI,UAAU,EAAE;YACZ,IAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC3C,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC;SAC9B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IA9RsB,uCAAiB,GAAG,SAAS,CAAC;IAC9B,sCAAgB,GAAG,UAAU,CAAC;IAC9B,sCAAgB,GAAG,WAAW,CAAC;IAExC,kCAAY,GAA+B;QACrD,aAAa;QACb,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QAEV,aAAa;QACb,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;KACf,CAAC;IAEe,wDAAkC,GAA8B;QAC7E,WAAW,EAAE,WAAW;QACxB,gBAAgB,EAAE,gBAAgB;QAClC,iBAAiB,EAAE,iBAAiB;QACpC,sBAAsB,EAAE,sBAAsB;QAC9C,aAAa,EAAE,aAAa;QAC5B,WAAW,EAAE,WAAW;KAC3B,CAAC;IAEe,oDAA8B,GAA8B;QACzE,WAAW,EAAE,WAAW;QACxB,gBAAgB,EAAE,gBAAgB;QAClC,iBAAiB,EAAE,WAAW;QAC9B,sBAAsB,EAAE,gBAAgB;QACxC,aAAa,EAAE,aAAa;QAC5B,kBAAkB,EAAE,kBAAkB;QACtC,WAAW,EAAE,WAAW;KAC3B,CAAC;IAEe,iEAA2C,GAA+C;QACvG,aAAa,EAAE,eAAe,CAAC,oBAAoB,CAAC,IAAI;QACxD,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,SAAS;QAClE,WAAW,EAAE,eAAe,CAAC,oBAAoB,CAAC,GAAG;QACrD,gBAAgB,EAAE,eAAe,CAAC,oBAAoB,CAAC,QAAQ;QAC/D,WAAW,EAAE,eAAe,CAAC,oBAAoB,CAAC,GAAG;KACxD,CAAC;IAEF,uFAAuF;IACtE,oDAA8B,GAA8B;QACzE,iBAAiB,EAAE,eAAe;QAClC,sBAAsB,EAAE,eAAe;KAC1C,CAAC;IAEe,6DAAuC,GAA+B;QACnF,eAAe,EAAE,IAAI;QACrB,oBAAoB,EAAE,IAAI;QAC1B,SAAS,EAAE,KAAK;KACnB,CAAC;IA8NN,4BAAC;CAAA,AAjSD,IAiSC;SAjSqB,qBAAqB","sourcesContent":["import { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\nimport { Nullable } from \"../../types\";\r\nimport { IShaderProcessor } from \"../Processors/iShaderProcessor\";\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { WebGPUSamplerDescription, WebGPUShaderProcessingContext, WebGPUTextureDescription, WebGPUBufferDescription } from \"./webgpuShaderProcessingContext\";\r\n\r\n/** @hidden */\r\nexport abstract class WebGPUShaderProcessor implements IShaderProcessor {\r\n\r\n public static readonly AutoSamplerSuffix = \"Sampler\";\r\n public static readonly LeftOvertUBOName = \"LeftOver\";\r\n public static readonly InternalsUBOName = \"Internals\";\r\n\r\n public static UniformSizes: { [type: string]: number } = {\r\n // GLSL types\r\n \"bool\": 1,\r\n \"int\": 1,\r\n \"float\": 1,\r\n \"vec2\": 2,\r\n \"ivec2\": 2,\r\n \"vec3\": 3,\r\n \"ivec3\": 3,\r\n \"vec4\": 4,\r\n \"ivec4\": 4,\r\n \"mat2\": 4,\r\n \"mat3\": 12,\r\n \"mat4\": 16,\r\n\r\n // WGSL types\r\n \"i32\": 1,\r\n \"u32\": 1,\r\n \"f32\": 1,\r\n \"mat2x2\": 4,\r\n \"mat3x3\": 12,\r\n \"mat4x4\": 16\r\n };\r\n\r\n protected static _SamplerFunctionByWebGLSamplerType: { [key: string]: string } = {\r\n \"sampler2D\": \"sampler2D\",\r\n \"sampler2DArray\": \"sampler2DArray\",\r\n \"sampler2DShadow\": \"sampler2DShadow\",\r\n \"sampler2DArrayShadow\": \"sampler2DArrayShadow\",\r\n \"samplerCube\": \"samplerCube\",\r\n \"sampler3D\": \"sampler3D\",\r\n };\r\n\r\n protected static _TextureTypeByWebGLSamplerType: { [key: string]: string } = {\r\n \"sampler2D\": \"texture2D\",\r\n \"sampler2DArray\": \"texture2DArray\",\r\n \"sampler2DShadow\": \"texture2D\",\r\n \"sampler2DArrayShadow\": \"texture2DArray\",\r\n \"samplerCube\": \"textureCube\",\r\n \"samplerCubeArray\": \"textureCubeArray\",\r\n \"sampler3D\": \"texture3D\",\r\n };\r\n\r\n protected static _GpuTextureViewDimensionByWebGPUTextureType: { [key: string]: GPUTextureViewDimension } = {\r\n \"textureCube\": WebGPUConstants.TextureViewDimension.Cube,\r\n \"textureCubeArray\": WebGPUConstants.TextureViewDimension.CubeArray,\r\n \"texture2D\": WebGPUConstants.TextureViewDimension.E2d,\r\n \"texture2DArray\": WebGPUConstants.TextureViewDimension.E2dArray,\r\n \"texture3D\": WebGPUConstants.TextureViewDimension.E3d,\r\n };\r\n\r\n // if the webgl sampler type is not listed in this array, \"sampler\" is taken by default\r\n protected static _SamplerTypeByWebGLSamplerType: { [key: string]: string } = {\r\n \"sampler2DShadow\": \"samplerShadow\",\r\n \"sampler2DArrayShadow\": \"samplerShadow\",\r\n };\r\n\r\n protected static _IsComparisonSamplerByWebGPUSamplerType: { [key: string]: boolean } = {\r\n \"samplerShadow\": true,\r\n \"samplerArrayShadow\": true,\r\n \"sampler\": false,\r\n };\r\n\r\n public shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n protected webgpuProcessingContext: WebGPUShaderProcessingContext;\r\n\r\n protected abstract _getArraySize(name: string, type: string, preProcessors: { [key: string]: string }): [string, string, number];\r\n protected abstract _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string;\r\n\r\n protected _addUniformToLeftOverUBO(name: string, uniformType: string, preProcessors: { [key: string]: string }): void {\r\n let length = 0;\r\n\r\n [name, uniformType, length] = this._getArraySize(name, uniformType, preProcessors);\r\n\r\n for (let i = 0; i < this.webgpuProcessingContext.leftOverUniforms.length; i++) {\r\n if (this.webgpuProcessingContext.leftOverUniforms[i].name === name) {\r\n return;\r\n }\r\n }\r\n\r\n this.webgpuProcessingContext.leftOverUniforms.push({\r\n name,\r\n type: uniformType,\r\n length\r\n });\r\n }\r\n\r\n protected _buildLeftOverUBO(): string {\r\n if (!this.webgpuProcessingContext.leftOverUniforms.length) {\r\n return \"\";\r\n }\r\n const name = WebGPUShaderProcessor.LeftOvertUBOName;\r\n let availableUBO = this.webgpuProcessingContext.availableBuffers[name];\r\n if (!availableUBO) {\r\n availableUBO = {\r\n binding: this.webgpuProcessingContext.getNextFreeUBOBinding(),\r\n };\r\n this.webgpuProcessingContext.availableBuffers[name] = availableUBO;\r\n this._addBufferBindingDescription(name, availableUBO, WebGPUConstants.BufferBindingType.Uniform, true);\r\n this._addBufferBindingDescription(name, availableUBO, WebGPUConstants.BufferBindingType.Uniform, false);\r\n }\r\n\r\n return this._generateLeftOverUBOCode(name, availableUBO);\r\n }\r\n\r\n protected _collectBindingNames(): void {\r\n // collect all the binding names for faster processing in WebGPUCacheBindGroup\r\n for (let i = 0; i < this.webgpuProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = this.webgpuProcessingContext.bindGroupLayoutEntries[i];\r\n if (setDefinition === undefined) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[i] = [];\r\n continue;\r\n }\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = this.webgpuProcessingContext.bindGroupLayoutEntries[i][j];\r\n const name = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding].name;\r\n const nameInArrayOfTexture = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding].nameInArrayOfTexture;\r\n if (entry) {\r\n if (entry.texture || entry.externalTexture || entry.storageTexture) {\r\n this.webgpuProcessingContext.textureNames.push(nameInArrayOfTexture!);\r\n } else if (entry.sampler) {\r\n this.webgpuProcessingContext.samplerNames.push(name);\r\n } else if (entry.buffer) {\r\n this.webgpuProcessingContext.bufferNames.push(name);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _preCreateBindGroupEntries(): void {\r\n const bindGroupEntries = this.webgpuProcessingContext.bindGroupEntries;\r\n\r\n for (let i = 0; i < this.webgpuProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = this.webgpuProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries: GPUBindGroupEntry[] = [];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = this.webgpuProcessingContext.bindGroupLayoutEntries[i][j];\r\n\r\n if (entry.sampler || entry.texture || entry.storageTexture || entry.externalTexture) {\r\n entries.push({\r\n binding: entry.binding,\r\n resource: undefined as any,\r\n });\r\n } else if (entry.buffer) {\r\n entries.push({\r\n binding: entry.binding,\r\n resource: {\r\n buffer: undefined as any,\r\n offset: 0,\r\n size: 0,\r\n },\r\n });\r\n }\r\n }\r\n\r\n bindGroupEntries[i] = entries;\r\n }\r\n }\r\n\r\n protected _addTextureBindingDescription(name: string, textureInfo: WebGPUTextureDescription, textureIndex: number, dimension: Nullable<GPUTextureViewDimension>, format: Nullable<GPUTextureFormat>, isVertex: boolean): void {\r\n let { groupIndex, bindingIndex } = textureInfo.textures[textureIndex];\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex]) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex] = [];\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex] = [];\r\n }\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex]) {\r\n let len;\r\n if (dimension === null) {\r\n len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n externalTexture: {},\r\n });\r\n } else if (format) {\r\n len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n storageTexture: {\r\n access: WebGPUConstants.StorageTextureAccess.WriteOnly,\r\n format,\r\n viewDimension: dimension,\r\n },\r\n });\r\n } else {\r\n len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n texture: {\r\n sampleType: textureInfo.sampleType,\r\n viewDimension: dimension,\r\n multisampled: false,\r\n },\r\n });\r\n }\r\n const textureName = textureInfo.isTextureArray ? name + textureIndex : name;\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex] = { name, index: len - 1, nameInArrayOfTexture: textureName };\r\n }\r\n\r\n bindingIndex = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex].index;\r\n if (isVertex) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Vertex;\r\n } else {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;\r\n }\r\n }\r\n\r\n protected _addSamplerBindingDescription(name: string, samplerInfo: WebGPUSamplerDescription, isVertex: boolean): void {\r\n let { groupIndex, bindingIndex } = samplerInfo.binding;\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex]) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex] = [];\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex] = [];\r\n }\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex]) {\r\n const len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n sampler: {\r\n type: samplerInfo.type,\r\n },\r\n });\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex] = { name, index: len - 1 };\r\n }\r\n\r\n bindingIndex = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex].index;\r\n if (isVertex) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Vertex;\r\n } else {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;\r\n }\r\n }\r\n\r\n protected _addBufferBindingDescription(name: string, uniformBufferInfo: WebGPUBufferDescription, bufferType: GPUBufferBindingType, isVertex: boolean): void {\r\n let { groupIndex, bindingIndex } = uniformBufferInfo.binding;\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex]) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex] = [];\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex] = [];\r\n }\r\n if (!this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex]) {\r\n const len = this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex].push({\r\n binding: bindingIndex,\r\n visibility: 0,\r\n buffer: {\r\n type: bufferType,\r\n },\r\n });\r\n this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex] = { name, index: len - 1 };\r\n }\r\n\r\n bindingIndex = this.webgpuProcessingContext.bindGroupLayoutEntryInfo[groupIndex][bindingIndex].index;\r\n if (isVertex) {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Vertex;\r\n } else {\r\n this.webgpuProcessingContext.bindGroupLayoutEntries[groupIndex][bindingIndex].visibility |= WebGPUConstants.ShaderStage.Fragment;\r\n }\r\n }\r\n\r\n protected _injectStartingAndEndingCode(code: string, mainFuncDecl: string, startingCode?: string, endingCode?: string): string {\r\n if (startingCode) {\r\n let idx = code.indexOf(mainFuncDecl);\r\n if (idx >= 0) {\r\n while (idx++ < code.length && code.charAt(idx) != '{') { }\r\n if (idx < code.length) {\r\n while (idx++ < code.length && code.charAt(idx) != '\\n') { }\r\n if (idx < code.length) {\r\n const part1 = code.substring(0, idx + 1);\r\n const part2 = code.substring(idx + 1);\r\n code = part1 + startingCode + part2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (endingCode) {\r\n const lastClosingCurly = code.lastIndexOf(\"}\");\r\n code = code.substring(0, lastClosingCurly);\r\n code += endingCode + \"\\n}\";\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
@@ -16,6 +16,7 @@ export declare class WebGPUShaderProcessorGLSL extends WebGPUShaderProcessor {
16
16
  [key: string]: string;
17
17
  }): [string, string, number];
18
18
  initializeShaders(processingContext: Nullable<ShaderProcessingContext>): void;
19
+ preProcessShaderCode(code: string, isFragment: boolean): string;
19
20
  varyingProcessor(varying: string, isFragment: boolean, preProcessors: {
20
21
  [key: string]: string;
21
22
  }, processingContext: Nullable<ShaderProcessingContext>): string;
@@ -33,6 +33,13 @@ var WebGPUShaderProcessorGLSL = /** @class */ (function (_super) {
33
33
  this._missingVaryings.length = 0;
34
34
  this._textureArrayProcessing.length = 0;
35
35
  };
36
+ WebGPUShaderProcessorGLSL.prototype.preProcessShaderCode = function (code, isFragment) {
37
+ var ubDeclaration = "uniform " + WebGPUShaderProcessor.InternalsUBOName + " {\nfloat yFactor__;\nfloat textureOutputHeight__;\n};\n";
38
+ if (isFragment) {
39
+ return ubDeclaration + "##INJECTCODE##\n" + code;
40
+ }
41
+ return ubDeclaration + code;
42
+ };
36
43
  WebGPUShaderProcessorGLSL.prototype.varyingProcessor = function (varying, isFragment, preProcessors, processingContext) {
37
44
  this._preProcessors = preProcessors;
38
45
  var varyingRegex = /\s*varying\s+(?:(?:highp)?|(?:lowp)?)\s*(\S+)\s+(\S+)\s*;/gm;
@@ -184,13 +191,22 @@ var WebGPUShaderProcessorGLSL = /** @class */ (function (_super) {
184
191
  // Replace instructions
185
192
  code = code.replace(/texture2D\s*\(/g, "texture(");
186
193
  if (isFragment) {
194
+ var hasFragCoord = code.indexOf("gl_FragCoord") >= 0;
195
+ var fragCoordCode = "\n glFragCoord__ = gl_FragCoord;\n if (yFactor__ == 1.) {\n glFragCoord__.y = textureOutputHeight__ - glFragCoord__.y;\n }\n ";
196
+ var injectCode = hasFragCoord ? "vec4 glFragCoord__;\n" : "";
187
197
  code = code.replace(/texture2DLodEXT\s*\(/g, "textureLod(");
188
198
  code = code.replace(/textureCubeLodEXT\s*\(/g, "textureLod(");
189
199
  code = code.replace(/textureCube\s*\(/g, "texture(");
190
200
  code = code.replace(/gl_FragDepthEXT/g, "gl_FragDepth");
191
201
  code = code.replace(/gl_FragColor/g, "glFragColor");
192
202
  code = code.replace(/gl_FragData/g, "glFragData");
203
+ code = code.replace(/gl_FragCoord/g, "glFragCoord__");
193
204
  code = code.replace(/void\s+?main\s*\(/g, (hasDrawBuffersExtension ? "" : "layout(location = 0) out vec4 glFragColor;\n") + "void main(");
205
+ code = code.replace(/dFdy/g, "(-yFactor__)*dFdy"); // will also handle dFdyCoarse and dFdyFine
206
+ code = code.replace("##INJECTCODE##", injectCode);
207
+ if (hasFragCoord) {
208
+ code = this._injectStartingAndEndingCode(code, "void main", fragCoordCode);
209
+ }
194
210
  }
195
211
  else {
196
212
  code = code.replace(/gl_InstanceID/g, "gl_InstanceIndex");
@@ -204,7 +220,7 @@ var WebGPUShaderProcessorGLSL = /** @class */ (function (_super) {
204
220
  if (!isFragment) {
205
221
  var lastClosingCurly = code.lastIndexOf("}");
206
222
  code = code.substring(0, lastClosingCurly);
207
- code += "gl_Position.y *= -1.;\n";
223
+ code += "gl_Position.y *= yFactor__;\n";
208
224
  if (!engine.isNDCHalfZRange) {
209
225
  code += "gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;\n";
210
226
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuShaderProcessorsGLSL.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuShaderProcessorsGLSL.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from '../../types';\r\nimport { ShaderProcessingContext } from \"../Processors/shaderProcessingOptions\";\r\nimport { WebGPUShaderProcessingContext, WebGPUBufferDescription } from './webgpuShaderProcessingContext';\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { Logger } from '../../Misc/logger';\r\nimport { ThinEngine } from \"../thinEngine\";\r\nimport { WebGPUShaderProcessor } from \"./webgpuShaderProcessor\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\n/** @hidden */\r\nexport class WebGPUShaderProcessorGLSL extends WebGPUShaderProcessor {\r\n\r\n protected _missingVaryings: Array<string> = [];\r\n protected _textureArrayProcessing: Array<string> = [];\r\n protected _preProcessors: { [key: string]: string };\r\n\r\n public shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n protected _getArraySize(name: string, type: string, preProcessors: { [key: string]: string }): [string, string, number] {\r\n let length = 0;\r\n const startArray = name.indexOf(\"[\");\r\n const endArray = name.indexOf(\"]\");\r\n if (startArray > 0 && endArray > 0) {\r\n const lengthInString = name.substring(startArray + 1, endArray);\r\n length = +(lengthInString);\r\n if (isNaN(length)) {\r\n length = +(preProcessors[lengthInString.trim()]);\r\n }\r\n name = name.substr(0, startArray);\r\n }\r\n return [name, type, length];\r\n }\r\n\r\n public initializeShaders(processingContext: Nullable<ShaderProcessingContext>): void {\r\n this.webgpuProcessingContext = processingContext as WebGPUShaderProcessingContext;\r\n\r\n this._missingVaryings.length = 0;\r\n this._textureArrayProcessing.length = 0;\r\n }\r\n\r\n public varyingProcessor(varying: string, isFragment: boolean, preProcessors: { [key: string]: string }, processingContext: Nullable<ShaderProcessingContext>) {\r\n this._preProcessors = preProcessors;\r\n\r\n const varyingRegex = /\\s*varying\\s+(?:(?:highp)?|(?:lowp)?)\\s*(\\S+)\\s+(\\S+)\\s*;/gm;\r\n const match = varyingRegex.exec(varying);\r\n if (match != null) {\r\n const varyingType = match[1];\r\n const name = match[2];\r\n let location: number;\r\n if (isFragment) {\r\n location = this.webgpuProcessingContext.availableVaryings[name];\r\n this._missingVaryings[location] = \"\";\r\n if (location === undefined) {\r\n Logger.Warn(`Invalid fragment shader: The varying named \"${name}\" is not declared in the vertex shader! This declaration will be ignored.`);\r\n }\r\n }\r\n else {\r\n location = this.webgpuProcessingContext.getVaryingNextLocation(varyingType, this._getArraySize(name, varyingType, preProcessors)[2]);\r\n this.webgpuProcessingContext.availableVaryings[name] = location;\r\n this._missingVaryings[location] = `layout(location = ${location}) in ${varyingType} ${name};`;\r\n }\r\n\r\n varying = varying.replace(match[0], location === undefined ? \"\" : `layout(location = ${location}) ${isFragment ? \"in\" : \"out\"} ${varyingType} ${name};`);\r\n }\r\n return varying;\r\n }\r\n\r\n public attributeProcessor(attribute: string, preProcessors: { [key: string]: string }, processingContext: Nullable<ShaderProcessingContext>) {\r\n this._preProcessors = preProcessors;\r\n\r\n const attribRegex = /\\s*attribute\\s+(\\S+)\\s+(\\S+)\\s*;/gm;\r\n const match = attribRegex.exec(attribute);\r\n if (match != null) {\r\n const attributeType = match[1];\r\n const name = match[2];\r\n const location = this.webgpuProcessingContext.getAttributeNextLocation(attributeType, this._getArraySize(name, attributeType, preProcessors)[2]);\r\n\r\n this.webgpuProcessingContext.availableAttributes[name] = location;\r\n this.webgpuProcessingContext.orderedAttributes[location] = name;\r\n\r\n attribute = attribute.replace(match[0], `layout(location = ${location}) in ${attributeType} ${name};`);\r\n }\r\n return attribute;\r\n }\r\n\r\n public uniformProcessor(uniform: string, isFragment: boolean, preProcessors: { [key: string]: string }, processingContext: Nullable<ShaderProcessingContext>): string {\r\n this._preProcessors = preProcessors;\r\n\r\n const uniformRegex = /\\s*uniform\\s+(?:(?:highp)?|(?:lowp)?)\\s*(\\S+)\\s+(\\S+)\\s*;/gm;\r\n\r\n const match = uniformRegex.exec(uniform);\r\n if (match != null) {\r\n let uniformType = match[1];\r\n let name = match[2];\r\n\r\n if (uniformType.indexOf(\"sampler\") === 0 || uniformType.indexOf(\"sampler\") === 1) {\r\n let arraySize = 0; // 0 means the texture is not declared as an array\r\n\r\n [name, uniformType, arraySize] = this._getArraySize(name, uniformType, preProcessors);\r\n\r\n let textureInfo = this.webgpuProcessingContext.availableTextures[name];\r\n if (!textureInfo) {\r\n textureInfo = {\r\n autoBindSampler: true,\r\n isTextureArray: arraySize > 0,\r\n isStorageTexture: false,\r\n textures: [],\r\n sampleType: WebGPUConstants.TextureSampleType.Float,\r\n };\r\n for (let i = 0; i < (arraySize || 1); ++i) {\r\n textureInfo.textures.push(this.webgpuProcessingContext.getNextFreeUBOBinding());\r\n }\r\n }\r\n\r\n const samplerType = WebGPUShaderProcessor._SamplerTypeByWebGLSamplerType[uniformType] ?? \"sampler\";\r\n const isComparisonSampler = !!WebGPUShaderProcessor._IsComparisonSamplerByWebGPUSamplerType[samplerType];\r\n const samplerBindingType = isComparisonSampler ? WebGPUConstants.SamplerBindingType.Comparison : WebGPUConstants.SamplerBindingType.Filtering;\r\n const samplerName = name + WebGPUShaderProcessor.AutoSamplerSuffix;\r\n\r\n let samplerInfo = this.webgpuProcessingContext.availableSamplers[samplerName];\r\n if (!samplerInfo) {\r\n samplerInfo = {\r\n binding: this.webgpuProcessingContext.getNextFreeUBOBinding(),\r\n type: samplerBindingType,\r\n };\r\n }\r\n\r\n const componentType = uniformType.charAt(0) === 'u' ? 'u' : uniformType.charAt(0) === 'i' ? 'i' : '';\r\n\r\n if (componentType) {\r\n uniformType = uniformType.substr(1);\r\n }\r\n\r\n const sampleType =\r\n isComparisonSampler ? WebGPUConstants.TextureSampleType.Depth :\r\n componentType === 'u' ? WebGPUConstants.TextureSampleType.Uint :\r\n componentType === 'i' ? WebGPUConstants.TextureSampleType.Sint : WebGPUConstants.TextureSampleType.Float;\r\n\r\n textureInfo.sampleType = sampleType;\r\n\r\n const isTextureArray = arraySize > 0;\r\n const samplerGroupIndex = samplerInfo.binding.groupIndex;\r\n const samplerBindingIndex = samplerInfo.binding.bindingIndex;\r\n const samplerFunction = WebGPUShaderProcessor._SamplerFunctionByWebGLSamplerType[uniformType];\r\n const textureType = WebGPUShaderProcessor._TextureTypeByWebGLSamplerType[uniformType];\r\n const textureDimension = WebGPUShaderProcessor._GpuTextureViewDimensionByWebGPUTextureType[textureType];\r\n\r\n // Manage textures and samplers.\r\n if (!isTextureArray) {\r\n arraySize = 1;\r\n uniform = `layout(set = ${samplerGroupIndex}, binding = ${samplerBindingIndex}) uniform ${componentType}${samplerType} ${samplerName};\r\n layout(set = ${textureInfo.textures[0].groupIndex}, binding = ${textureInfo.textures[0].bindingIndex}) uniform ${textureType} ${name}Texture;\r\n #define ${name} ${componentType}${samplerFunction}(${name}Texture, ${samplerName})`;\r\n } else {\r\n let layouts = [];\r\n layouts.push(`layout(set = ${samplerGroupIndex}, binding = ${samplerBindingIndex}) uniform ${componentType}${samplerType} ${samplerName};`);\r\n uniform = `\\r\\n`;\r\n for (let i = 0; i < arraySize; ++i) {\r\n const textureSetIndex = textureInfo.textures[i].groupIndex;\r\n const textureBindingIndex = textureInfo.textures[i].bindingIndex;\r\n\r\n layouts.push(`layout(set = ${textureSetIndex}, binding = ${textureBindingIndex}) uniform ${textureType} ${name}Texture${i};`);\r\n\r\n uniform += `${i > 0 ? '\\r\\n' : ''}#define ${name}${i} ${componentType}${samplerFunction}(${name}Texture${i}, ${samplerName})`;\r\n }\r\n uniform = layouts.join('\\r\\n') + uniform;\r\n this._textureArrayProcessing.push(name);\r\n }\r\n\r\n this.webgpuProcessingContext.availableTextures[name] = textureInfo;\r\n this.webgpuProcessingContext.availableSamplers[samplerName] = samplerInfo;\r\n\r\n this._addSamplerBindingDescription(samplerName, samplerInfo, !isFragment);\r\n\r\n for (let i = 0; i < arraySize; ++i) {\r\n this._addTextureBindingDescription(name, textureInfo, i, textureDimension, null, !isFragment);\r\n }\r\n }\r\n else {\r\n this._addUniformToLeftOverUBO(name, uniformType, preProcessors);\r\n uniform = \"\";\r\n }\r\n }\r\n return uniform;\r\n }\r\n\r\n public uniformBufferProcessor(uniformBuffer: string, isFragment: boolean, processingContext: Nullable<ShaderProcessingContext>): string {\r\n const uboRegex = /uniform\\s+(\\w+)/gm;\r\n\r\n const match = uboRegex.exec(uniformBuffer);\r\n if (match != null) {\r\n const name = match[1];\r\n\r\n let uniformBufferInfo = this.webgpuProcessingContext.availableBuffers[name];\r\n if (!uniformBufferInfo) {\r\n const knownUBO = WebGPUShaderProcessingContext.KnownUBOs[name];\r\n\r\n let binding;\r\n if (knownUBO && knownUBO.binding.groupIndex !== -1) {\r\n binding = knownUBO.binding;\r\n } else {\r\n binding = this.webgpuProcessingContext.getNextFreeUBOBinding();\r\n }\r\n\r\n uniformBufferInfo = { binding };\r\n this.webgpuProcessingContext.availableBuffers[name] = uniformBufferInfo;\r\n }\r\n\r\n this._addBufferBindingDescription(name, uniformBufferInfo, WebGPUConstants.BufferBindingType.Uniform, !isFragment);\r\n\r\n uniformBuffer = uniformBuffer.replace(\"uniform\", `layout(set = ${uniformBufferInfo.binding.groupIndex}, binding = ${uniformBufferInfo.binding.bindingIndex}) uniform`);\r\n }\r\n return uniformBuffer;\r\n }\r\n\r\n public postProcessor(code: string, defines: string[], isFragment: boolean, processingContext: Nullable<ShaderProcessingContext>, engine: ThinEngine) {\r\n const hasDrawBuffersExtension = code.search(/#extension.+GL_EXT_draw_buffers.+require/) !== -1;\r\n\r\n // Remove extensions\r\n var regex = /#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g;\r\n code = code.replace(regex, \"\");\r\n\r\n // Replace instructions\r\n code = code.replace(/texture2D\\s*\\(/g, \"texture(\");\r\n if (isFragment) {\r\n code = code.replace(/texture2DLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCubeLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCube\\s*\\(/g, \"texture(\");\r\n code = code.replace(/gl_FragDepthEXT/g, \"gl_FragDepth\");\r\n code = code.replace(/gl_FragColor/g, \"glFragColor\");\r\n code = code.replace(/gl_FragData/g, \"glFragData\");\r\n code = code.replace(/void\\s+?main\\s*\\(/g, (hasDrawBuffersExtension ? \"\" : \"layout(location = 0) out vec4 glFragColor;\\n\") + \"void main(\");\r\n } else {\r\n code = code.replace(/gl_InstanceID/g, \"gl_InstanceIndex\");\r\n code = code.replace(/gl_VertexID/g, \"gl_VertexIndex\");\r\n var hasMultiviewExtension = defines.indexOf(\"#define MULTIVIEW\") !== -1;\r\n if (hasMultiviewExtension) {\r\n return \"#extension GL_OVR_multiview2 : require\\nlayout (num_views = 2) in;\\n\" + code;\r\n }\r\n }\r\n\r\n // Flip Y + convert z range from [-1,1] to [0,1]\r\n if (!isFragment) {\r\n const lastClosingCurly = code.lastIndexOf(\"}\");\r\n code = code.substring(0, lastClosingCurly);\r\n code += \"gl_Position.y *= -1.;\\n\";\r\n if (!engine.isNDCHalfZRange) {\r\n code += \"gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;\\n\";\r\n }\r\n code += \"}\";\r\n }\r\n\r\n return code;\r\n }\r\n\r\n private _applyTextureArrayProcessing(code: string, name: string): string {\r\n // Replaces the occurrences of name[XX] by nameXX\r\n const regex = new RegExp(name + \"\\\\s*\\\\[(.+)?\\\\]\", \"gm\");\r\n let match = regex.exec(code);\r\n\r\n while (match != null) {\r\n let index = match[1];\r\n let iindex = +(index);\r\n if (this._preProcessors && isNaN(iindex)) {\r\n iindex = +(this._preProcessors[index.trim()]);\r\n }\r\n code = code.replace(match[0], name + iindex);\r\n match = regex.exec(code);\r\n }\r\n\r\n return code;\r\n }\r\n\r\n protected _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string {\r\n let ubo = `layout(set = ${uniformBufferDescription.binding.groupIndex}, binding = ${uniformBufferDescription.binding.bindingIndex}) uniform ${name} {\\n `;\r\n for (let leftOverUniform of this.webgpuProcessingContext.leftOverUniforms) {\r\n if (leftOverUniform.length > 0) {\r\n ubo += ` ${leftOverUniform.type} ${leftOverUniform.name}[${leftOverUniform.length}];\\n`;\r\n }\r\n else {\r\n ubo += ` ${leftOverUniform.type} ${leftOverUniform.name};\\n`;\r\n }\r\n }\r\n ubo += \"};\\n\\n\";\r\n\r\n return ubo;\r\n }\r\n\r\n public finalizeShaders(vertexCode: string, fragmentCode: string, processingContext: Nullable<ShaderProcessingContext>): { vertexCode: string, fragmentCode: string } {\r\n // make replacements for texture names in the texture array case\r\n for (let i = 0; i < this._textureArrayProcessing.length; ++i) {\r\n const name = this._textureArrayProcessing[i];\r\n vertexCode = this._applyTextureArrayProcessing(vertexCode, name);\r\n fragmentCode = this._applyTextureArrayProcessing(fragmentCode, name);\r\n }\r\n\r\n // inject the missing varying in the fragment shader\r\n for (let i = 0; i < this._missingVaryings.length; ++i) {\r\n const decl = this._missingVaryings[i];\r\n if (decl && decl.length > 0) {\r\n fragmentCode = decl + \"\\n\" + fragmentCode;\r\n }\r\n }\r\n\r\n // Builds the leftover UBOs.\r\n const leftOverUBO = this._buildLeftOverUBO();\r\n\r\n vertexCode = leftOverUBO + vertexCode;\r\n fragmentCode = leftOverUBO + fragmentCode;\r\n\r\n this._collectBindingNames();\r\n this._preCreateBindGroupEntries();\r\n\r\n this._preProcessors = null as any;\r\n\r\n return { vertexCode, fragmentCode };\r\n }\r\n}"]}
1
+ {"version":3,"file":"webgpuShaderProcessorsGLSL.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuShaderProcessorsGLSL.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from '../../types';\r\nimport { ShaderProcessingContext } from \"../Processors/shaderProcessingOptions\";\r\nimport { WebGPUShaderProcessingContext, WebGPUBufferDescription } from './webgpuShaderProcessingContext';\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { Logger } from '../../Misc/logger';\r\nimport { ThinEngine } from \"../thinEngine\";\r\nimport { WebGPUShaderProcessor } from \"./webgpuShaderProcessor\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\n/** @hidden */\r\nexport class WebGPUShaderProcessorGLSL extends WebGPUShaderProcessor {\r\n\r\n protected _missingVaryings: Array<string> = [];\r\n protected _textureArrayProcessing: Array<string> = [];\r\n protected _preProcessors: { [key: string]: string };\r\n\r\n public shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n protected _getArraySize(name: string, type: string, preProcessors: { [key: string]: string }): [string, string, number] {\r\n let length = 0;\r\n const startArray = name.indexOf(\"[\");\r\n const endArray = name.indexOf(\"]\");\r\n if (startArray > 0 && endArray > 0) {\r\n const lengthInString = name.substring(startArray + 1, endArray);\r\n length = +(lengthInString);\r\n if (isNaN(length)) {\r\n length = +(preProcessors[lengthInString.trim()]);\r\n }\r\n name = name.substr(0, startArray);\r\n }\r\n return [name, type, length];\r\n }\r\n\r\n public initializeShaders(processingContext: Nullable<ShaderProcessingContext>): void {\r\n this.webgpuProcessingContext = processingContext as WebGPUShaderProcessingContext;\r\n\r\n this._missingVaryings.length = 0;\r\n this._textureArrayProcessing.length = 0;\r\n }\r\n\r\n public preProcessShaderCode(code: string, isFragment: boolean): string {\r\n const ubDeclaration = `uniform ${WebGPUShaderProcessor.InternalsUBOName} {\\nfloat yFactor__;\\nfloat textureOutputHeight__;\\n};\\n`;\r\n\r\n if (isFragment) {\r\n return ubDeclaration + \"##INJECTCODE##\\n\" + code;\r\n }\r\n return ubDeclaration + code;\r\n }\r\n\r\n public varyingProcessor(varying: string, isFragment: boolean, preProcessors: { [key: string]: string }, processingContext: Nullable<ShaderProcessingContext>) {\r\n this._preProcessors = preProcessors;\r\n\r\n const varyingRegex = /\\s*varying\\s+(?:(?:highp)?|(?:lowp)?)\\s*(\\S+)\\s+(\\S+)\\s*;/gm;\r\n const match = varyingRegex.exec(varying);\r\n if (match != null) {\r\n const varyingType = match[1];\r\n const name = match[2];\r\n let location: number;\r\n if (isFragment) {\r\n location = this.webgpuProcessingContext.availableVaryings[name];\r\n this._missingVaryings[location] = \"\";\r\n if (location === undefined) {\r\n Logger.Warn(`Invalid fragment shader: The varying named \"${name}\" is not declared in the vertex shader! This declaration will be ignored.`);\r\n }\r\n }\r\n else {\r\n location = this.webgpuProcessingContext.getVaryingNextLocation(varyingType, this._getArraySize(name, varyingType, preProcessors)[2]);\r\n this.webgpuProcessingContext.availableVaryings[name] = location;\r\n this._missingVaryings[location] = `layout(location = ${location}) in ${varyingType} ${name};`;\r\n }\r\n\r\n varying = varying.replace(match[0], location === undefined ? \"\" : `layout(location = ${location}) ${isFragment ? \"in\" : \"out\"} ${varyingType} ${name};`);\r\n }\r\n return varying;\r\n }\r\n\r\n public attributeProcessor(attribute: string, preProcessors: { [key: string]: string }, processingContext: Nullable<ShaderProcessingContext>) {\r\n this._preProcessors = preProcessors;\r\n\r\n const attribRegex = /\\s*attribute\\s+(\\S+)\\s+(\\S+)\\s*;/gm;\r\n const match = attribRegex.exec(attribute);\r\n if (match != null) {\r\n const attributeType = match[1];\r\n const name = match[2];\r\n const location = this.webgpuProcessingContext.getAttributeNextLocation(attributeType, this._getArraySize(name, attributeType, preProcessors)[2]);\r\n\r\n this.webgpuProcessingContext.availableAttributes[name] = location;\r\n this.webgpuProcessingContext.orderedAttributes[location] = name;\r\n\r\n attribute = attribute.replace(match[0], `layout(location = ${location}) in ${attributeType} ${name};`);\r\n }\r\n return attribute;\r\n }\r\n\r\n public uniformProcessor(uniform: string, isFragment: boolean, preProcessors: { [key: string]: string }, processingContext: Nullable<ShaderProcessingContext>): string {\r\n this._preProcessors = preProcessors;\r\n\r\n const uniformRegex = /\\s*uniform\\s+(?:(?:highp)?|(?:lowp)?)\\s*(\\S+)\\s+(\\S+)\\s*;/gm;\r\n\r\n const match = uniformRegex.exec(uniform);\r\n if (match != null) {\r\n let uniformType = match[1];\r\n let name = match[2];\r\n\r\n if (uniformType.indexOf(\"sampler\") === 0 || uniformType.indexOf(\"sampler\") === 1) {\r\n let arraySize = 0; // 0 means the texture is not declared as an array\r\n\r\n [name, uniformType, arraySize] = this._getArraySize(name, uniformType, preProcessors);\r\n\r\n let textureInfo = this.webgpuProcessingContext.availableTextures[name];\r\n if (!textureInfo) {\r\n textureInfo = {\r\n autoBindSampler: true,\r\n isTextureArray: arraySize > 0,\r\n isStorageTexture: false,\r\n textures: [],\r\n sampleType: WebGPUConstants.TextureSampleType.Float,\r\n };\r\n for (let i = 0; i < (arraySize || 1); ++i) {\r\n textureInfo.textures.push(this.webgpuProcessingContext.getNextFreeUBOBinding());\r\n }\r\n }\r\n\r\n const samplerType = WebGPUShaderProcessor._SamplerTypeByWebGLSamplerType[uniformType] ?? \"sampler\";\r\n const isComparisonSampler = !!WebGPUShaderProcessor._IsComparisonSamplerByWebGPUSamplerType[samplerType];\r\n const samplerBindingType = isComparisonSampler ? WebGPUConstants.SamplerBindingType.Comparison : WebGPUConstants.SamplerBindingType.Filtering;\r\n const samplerName = name + WebGPUShaderProcessor.AutoSamplerSuffix;\r\n\r\n let samplerInfo = this.webgpuProcessingContext.availableSamplers[samplerName];\r\n if (!samplerInfo) {\r\n samplerInfo = {\r\n binding: this.webgpuProcessingContext.getNextFreeUBOBinding(),\r\n type: samplerBindingType,\r\n };\r\n }\r\n\r\n const componentType = uniformType.charAt(0) === 'u' ? 'u' : uniformType.charAt(0) === 'i' ? 'i' : '';\r\n\r\n if (componentType) {\r\n uniformType = uniformType.substr(1);\r\n }\r\n\r\n const sampleType =\r\n isComparisonSampler ? WebGPUConstants.TextureSampleType.Depth :\r\n componentType === 'u' ? WebGPUConstants.TextureSampleType.Uint :\r\n componentType === 'i' ? WebGPUConstants.TextureSampleType.Sint : WebGPUConstants.TextureSampleType.Float;\r\n\r\n textureInfo.sampleType = sampleType;\r\n\r\n const isTextureArray = arraySize > 0;\r\n const samplerGroupIndex = samplerInfo.binding.groupIndex;\r\n const samplerBindingIndex = samplerInfo.binding.bindingIndex;\r\n const samplerFunction = WebGPUShaderProcessor._SamplerFunctionByWebGLSamplerType[uniformType];\r\n const textureType = WebGPUShaderProcessor._TextureTypeByWebGLSamplerType[uniformType];\r\n const textureDimension = WebGPUShaderProcessor._GpuTextureViewDimensionByWebGPUTextureType[textureType];\r\n\r\n // Manage textures and samplers.\r\n if (!isTextureArray) {\r\n arraySize = 1;\r\n uniform = `layout(set = ${samplerGroupIndex}, binding = ${samplerBindingIndex}) uniform ${componentType}${samplerType} ${samplerName};\r\n layout(set = ${textureInfo.textures[0].groupIndex}, binding = ${textureInfo.textures[0].bindingIndex}) uniform ${textureType} ${name}Texture;\r\n #define ${name} ${componentType}${samplerFunction}(${name}Texture, ${samplerName})`;\r\n } else {\r\n let layouts = [];\r\n layouts.push(`layout(set = ${samplerGroupIndex}, binding = ${samplerBindingIndex}) uniform ${componentType}${samplerType} ${samplerName};`);\r\n uniform = `\\r\\n`;\r\n for (let i = 0; i < arraySize; ++i) {\r\n const textureSetIndex = textureInfo.textures[i].groupIndex;\r\n const textureBindingIndex = textureInfo.textures[i].bindingIndex;\r\n\r\n layouts.push(`layout(set = ${textureSetIndex}, binding = ${textureBindingIndex}) uniform ${textureType} ${name}Texture${i};`);\r\n\r\n uniform += `${i > 0 ? '\\r\\n' : ''}#define ${name}${i} ${componentType}${samplerFunction}(${name}Texture${i}, ${samplerName})`;\r\n }\r\n uniform = layouts.join('\\r\\n') + uniform;\r\n this._textureArrayProcessing.push(name);\r\n }\r\n\r\n this.webgpuProcessingContext.availableTextures[name] = textureInfo;\r\n this.webgpuProcessingContext.availableSamplers[samplerName] = samplerInfo;\r\n\r\n this._addSamplerBindingDescription(samplerName, samplerInfo, !isFragment);\r\n\r\n for (let i = 0; i < arraySize; ++i) {\r\n this._addTextureBindingDescription(name, textureInfo, i, textureDimension, null, !isFragment);\r\n }\r\n }\r\n else {\r\n this._addUniformToLeftOverUBO(name, uniformType, preProcessors);\r\n uniform = \"\";\r\n }\r\n }\r\n return uniform;\r\n }\r\n\r\n public uniformBufferProcessor(uniformBuffer: string, isFragment: boolean, processingContext: Nullable<ShaderProcessingContext>): string {\r\n const uboRegex = /uniform\\s+(\\w+)/gm;\r\n\r\n const match = uboRegex.exec(uniformBuffer);\r\n if (match != null) {\r\n const name = match[1];\r\n\r\n let uniformBufferInfo = this.webgpuProcessingContext.availableBuffers[name];\r\n if (!uniformBufferInfo) {\r\n const knownUBO = WebGPUShaderProcessingContext.KnownUBOs[name];\r\n\r\n let binding;\r\n if (knownUBO && knownUBO.binding.groupIndex !== -1) {\r\n binding = knownUBO.binding;\r\n } else {\r\n binding = this.webgpuProcessingContext.getNextFreeUBOBinding();\r\n }\r\n\r\n uniformBufferInfo = { binding };\r\n this.webgpuProcessingContext.availableBuffers[name] = uniformBufferInfo;\r\n }\r\n\r\n this._addBufferBindingDescription(name, uniformBufferInfo, WebGPUConstants.BufferBindingType.Uniform, !isFragment);\r\n\r\n uniformBuffer = uniformBuffer.replace(\"uniform\", `layout(set = ${uniformBufferInfo.binding.groupIndex}, binding = ${uniformBufferInfo.binding.bindingIndex}) uniform`);\r\n }\r\n return uniformBuffer;\r\n }\r\n\r\n public postProcessor(code: string, defines: string[], isFragment: boolean, processingContext: Nullable<ShaderProcessingContext>, engine: ThinEngine) {\r\n const hasDrawBuffersExtension = code.search(/#extension.+GL_EXT_draw_buffers.+require/) !== -1;\r\n\r\n // Remove extensions\r\n var regex = /#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g;\r\n code = code.replace(regex, \"\");\r\n\r\n // Replace instructions\r\n code = code.replace(/texture2D\\s*\\(/g, \"texture(\");\r\n if (isFragment) {\r\n const hasFragCoord = code.indexOf(\"gl_FragCoord\") >= 0;\r\n const fragCoordCode = `\r\n glFragCoord__ = gl_FragCoord;\r\n if (yFactor__ == 1.) {\r\n glFragCoord__.y = textureOutputHeight__ - glFragCoord__.y;\r\n }\r\n `;\r\n\r\n const injectCode = hasFragCoord ? \"vec4 glFragCoord__;\\n\" : \"\";\r\n\r\n code = code.replace(/texture2DLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCubeLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCube\\s*\\(/g, \"texture(\");\r\n code = code.replace(/gl_FragDepthEXT/g, \"gl_FragDepth\");\r\n code = code.replace(/gl_FragColor/g, \"glFragColor\");\r\n code = code.replace(/gl_FragData/g, \"glFragData\");\r\n code = code.replace(/gl_FragCoord/g, \"glFragCoord__\");\r\n code = code.replace(/void\\s+?main\\s*\\(/g, (hasDrawBuffersExtension ? \"\" : \"layout(location = 0) out vec4 glFragColor;\\n\") + \"void main(\");\r\n code = code.replace(/dFdy/g, \"(-yFactor__)*dFdy\"); // will also handle dFdyCoarse and dFdyFine\r\n code = code.replace(\"##INJECTCODE##\", injectCode);\r\n\r\n if (hasFragCoord) {\r\n code = this._injectStartingAndEndingCode(code, \"void main\", fragCoordCode);\r\n }\r\n } else {\r\n code = code.replace(/gl_InstanceID/g, \"gl_InstanceIndex\");\r\n code = code.replace(/gl_VertexID/g, \"gl_VertexIndex\");\r\n var hasMultiviewExtension = defines.indexOf(\"#define MULTIVIEW\") !== -1;\r\n if (hasMultiviewExtension) {\r\n return \"#extension GL_OVR_multiview2 : require\\nlayout (num_views = 2) in;\\n\" + code;\r\n }\r\n }\r\n\r\n // Flip Y + convert z range from [-1,1] to [0,1]\r\n if (!isFragment) {\r\n const lastClosingCurly = code.lastIndexOf(\"}\");\r\n code = code.substring(0, lastClosingCurly);\r\n code += \"gl_Position.y *= yFactor__;\\n\";\r\n if (!engine.isNDCHalfZRange) {\r\n code += \"gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;\\n\";\r\n }\r\n code += \"}\";\r\n }\r\n\r\n return code;\r\n }\r\n\r\n private _applyTextureArrayProcessing(code: string, name: string): string {\r\n // Replaces the occurrences of name[XX] by nameXX\r\n const regex = new RegExp(name + \"\\\\s*\\\\[(.+)?\\\\]\", \"gm\");\r\n let match = regex.exec(code);\r\n\r\n while (match != null) {\r\n let index = match[1];\r\n let iindex = +(index);\r\n if (this._preProcessors && isNaN(iindex)) {\r\n iindex = +(this._preProcessors[index.trim()]);\r\n }\r\n code = code.replace(match[0], name + iindex);\r\n match = regex.exec(code);\r\n }\r\n\r\n return code;\r\n }\r\n\r\n protected _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string {\r\n let ubo = `layout(set = ${uniformBufferDescription.binding.groupIndex}, binding = ${uniformBufferDescription.binding.bindingIndex}) uniform ${name} {\\n `;\r\n for (let leftOverUniform of this.webgpuProcessingContext.leftOverUniforms) {\r\n if (leftOverUniform.length > 0) {\r\n ubo += ` ${leftOverUniform.type} ${leftOverUniform.name}[${leftOverUniform.length}];\\n`;\r\n }\r\n else {\r\n ubo += ` ${leftOverUniform.type} ${leftOverUniform.name};\\n`;\r\n }\r\n }\r\n ubo += \"};\\n\\n\";\r\n\r\n return ubo;\r\n }\r\n\r\n public finalizeShaders(vertexCode: string, fragmentCode: string, processingContext: Nullable<ShaderProcessingContext>): { vertexCode: string, fragmentCode: string } {\r\n // make replacements for texture names in the texture array case\r\n for (let i = 0; i < this._textureArrayProcessing.length; ++i) {\r\n const name = this._textureArrayProcessing[i];\r\n vertexCode = this._applyTextureArrayProcessing(vertexCode, name);\r\n fragmentCode = this._applyTextureArrayProcessing(fragmentCode, name);\r\n }\r\n\r\n // inject the missing varying in the fragment shader\r\n for (let i = 0; i < this._missingVaryings.length; ++i) {\r\n const decl = this._missingVaryings[i];\r\n if (decl && decl.length > 0) {\r\n fragmentCode = decl + \"\\n\" + fragmentCode;\r\n }\r\n }\r\n\r\n // Builds the leftover UBOs.\r\n const leftOverUBO = this._buildLeftOverUBO();\r\n\r\n vertexCode = leftOverUBO + vertexCode;\r\n fragmentCode = leftOverUBO + fragmentCode;\r\n\r\n this._collectBindingNames();\r\n this._preCreateBindGroupEntries();\r\n\r\n this._preProcessors = null as any;\r\n\r\n return { vertexCode, fragmentCode };\r\n }\r\n}"]}
@@ -36,7 +36,7 @@ export declare class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
36
36
  [key: string]: string;
37
37
  }): [string, string, number];
38
38
  initializeShaders(processingContext: Nullable<ShaderProcessingContext>): void;
39
- preProcessShaderCode(code: string): string;
39
+ preProcessShaderCode(code: string, isFragment: boolean): string;
40
40
  varyingProcessor(varying: string, isFragment: boolean, preProcessors: {
41
41
  [key: string]: string;
42
42
  }, processingContext: Nullable<ShaderProcessingContext>): string;
@@ -55,7 +55,6 @@ export declare class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
55
55
  fragmentCode: string;
56
56
  };
57
57
  protected _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string;
58
- private _injectStartingAndEndingCode;
59
58
  private _processSamplers;
60
59
  private _processCustomBuffers;
61
60
  }
@@ -29,6 +29,7 @@ var builtInName_front_facing = "gl_FrontFacing";
29
29
  var builtInName_frag_depth = "gl_FragDepth";
30
30
  var builtInName_FragColor = "gl_FragColor";
31
31
  var leftOverVarName = "uniforms";
32
+ var internalsVarName = "internals";
32
33
  var gpuTextureViewDimensionByWebGPUTextureFunction = {
33
34
  "texture_1d": WebGPUConstants.TextureViewDimension.E1d,
34
35
  "texture_2d": WebGPUConstants.TextureViewDimension.E2d,
@@ -88,8 +89,8 @@ var WebGPUShaderProcessorWGSL = /** @class */ (function (_super) {
88
89
  this._varyingsDeclWGSL = [];
89
90
  this._varyingNamesWGSL = [];
90
91
  };
91
- WebGPUShaderProcessorWGSL.prototype.preProcessShaderCode = function (code) {
92
- return RemoveComments(code);
92
+ WebGPUShaderProcessorWGSL.prototype.preProcessShaderCode = function (code, isFragment) {
93
+ return "[[block]] struct " + WebGPUShaderProcessor.InternalsUBOName + " {\nyFactor__: f32;\ntextureOutputHeight__: f32;\n};\nvar<uniform> " + internalsVarName + " : " + WebGPUShaderProcessor.InternalsUBOName + ";\n" + RemoveComments(code);
93
94
  };
94
95
  WebGPUShaderProcessorWGSL.prototype.varyingProcessor = function (varying, isFragment, preProcessors, processingContext) {
95
96
  var varyingRegex = /\s*varying\s+(?:(?:highp)?|(?:lowp)?)\s*(\S+)\s*:\s*(.+)\s*;/gm;
@@ -192,6 +193,7 @@ var WebGPUShaderProcessorWGSL = /** @class */ (function (_super) {
192
193
  return code;
193
194
  };
194
195
  WebGPUShaderProcessorWGSL.prototype.finalizeShaders = function (vertexCode, fragmentCode, processingContext) {
196
+ var fragCoordCode = fragmentCode.indexOf("gl_FragCoord") >= 0 ? "\n if (internals.yFactor__ == 1.) {\n gl_FragCoord.y = internals.textureOutputHeight__ - gl_FragCoord.y;\n }\n " : "";
195
197
  // Add the group/binding info to the sampler declaration (var xxx: sampler|sampler_comparison)
196
198
  vertexCode = this._processSamplers(vertexCode, true);
197
199
  fragmentCode = this._processSamplers(fragmentCode, false);
@@ -223,15 +225,16 @@ var WebGPUShaderProcessorWGSL = /** @class */ (function (_super) {
223
225
  var name_5 = this._attributeNamesWGSL[i];
224
226
  vertexStartingCode += " " + name_5 + " = input." + name_5 + ";\n";
225
227
  }
226
- var vertexEndingCode = " output.position = " + builtInName_position + ";\n output.position.y = -output.position.y;\n";
228
+ var vertexEndingCode = " output.position = " + builtInName_position + ";\n output.position.y = output.position.y * internals.yFactor__;\n";
227
229
  for (var i = 0; i < this._varyingNamesWGSL.length; ++i) {
228
230
  var name_6 = this._varyingNamesWGSL[i];
229
231
  vertexEndingCode += " output." + name_6 + " = " + name_6 + ";\n";
230
232
  }
231
233
  vertexEndingCode += " return output;";
232
- vertexCode = this._injectStartingAndEndingCode(vertexCode, vertexStartingCode, vertexEndingCode);
234
+ vertexCode = this._injectStartingAndEndingCode(vertexCode, "fn main", vertexStartingCode, vertexEndingCode);
233
235
  // fragment code
234
236
  fragmentCode = fragmentCode.replace(/#define /g, "//#define ");
237
+ fragmentCode = fragmentCode.replace(/dpdy/g, "(-internals.yFactor__)*dpdy"); // will also handle dpdyCoarse and dpdyFine
235
238
  var fragmentBuiltinDecl = "var<private> " + builtInName_position_frag + " : vec4<f32>;\nvar<private> " + builtInName_front_facing + " : bool;\nvar<private> " + builtInName_FragColor + " : vec4<f32>;\nvar<private> " + builtInName_frag_depth + " : f32;\n";
236
239
  var fragmentFragmentInputs = "struct FragmentInputs {\n [[builtin(position)]] position : vec4<f32>;\n [[builtin(front_facing)]] frontFacing : bool;\n";
237
240
  if (this._varyingsWGSL.length > 0) {
@@ -255,14 +258,14 @@ var WebGPUShaderProcessorWGSL = /** @class */ (function (_super) {
255
258
  }
256
259
  idx--;
257
260
  }
258
- idx = saveIndex + 12;
261
+ idx = saveIndex + builtInName_frag_depth.length;
259
262
  }
260
263
  if (hasFragDepth) {
261
264
  fragmentOutputs += " [[builtin(frag_depth)]] fragDepth: f32;\n";
262
265
  }
263
266
  fragmentOutputs += "};\n";
264
267
  fragmentCode = fragmentBuiltinDecl + fragmentFragmentInputs + varyingsDecl + fragmentOutputs + fragmentCode;
265
- var fragmentStartingCode = " var output : FragmentOutputs;\n " + builtInName_position_frag + " = input.position;\n " + builtInName_front_facing + " = input.frontFacing;\n";
268
+ var fragmentStartingCode = " var output : FragmentOutputs;\n " + builtInName_position_frag + " = input.position;\n " + builtInName_front_facing + " = input.frontFacing;\n" + fragCoordCode;
266
269
  for (var i = 0; i < this._varyingNamesWGSL.length; ++i) {
267
270
  var name_7 = this._varyingNamesWGSL[i];
268
271
  fragmentStartingCode += " " + name_7 + " = input." + name_7 + ";\n";
@@ -272,7 +275,7 @@ var WebGPUShaderProcessorWGSL = /** @class */ (function (_super) {
272
275
  fragmentEndingCode += " output.fragDepth = " + builtInName_frag_depth + ";\n";
273
276
  }
274
277
  fragmentEndingCode += " return output;";
275
- fragmentCode = this._injectStartingAndEndingCode(fragmentCode, fragmentStartingCode, fragmentEndingCode);
278
+ fragmentCode = this._injectStartingAndEndingCode(fragmentCode, "fn main", fragmentStartingCode, fragmentEndingCode);
276
279
  this._collectBindingNames();
277
280
  this._preCreateBindGroupEntries();
278
281
  return { vertexCode: vertexCode, fragmentCode: fragmentCode };
@@ -299,28 +302,6 @@ var WebGPUShaderProcessorWGSL = /** @class */ (function (_super) {
299
302
  ubo += "[[group(" + uniformBufferDescription.binding.groupIndex + "), binding(" + uniformBufferDescription.binding.bindingIndex + ")]] var<uniform> " + leftOverVarName + " : " + name + ";\n";
300
303
  return ubo;
301
304
  };
302
- WebGPUShaderProcessorWGSL.prototype._injectStartingAndEndingCode = function (code, startingCode, endingCode) {
303
- if (startingCode) {
304
- var idx = code.indexOf("fn main");
305
- if (idx >= 0) {
306
- while (idx++ < code.length && code.charAt(idx) != '{') { }
307
- if (idx < code.length) {
308
- while (idx++ < code.length && code.charAt(idx) != '\n') { }
309
- if (idx < code.length) {
310
- var part1 = code.substring(0, idx + 1);
311
- var part2 = code.substring(idx + 1);
312
- code = part1 + startingCode + part2;
313
- }
314
- }
315
- }
316
- }
317
- if (endingCode) {
318
- var lastClosingCurly = code.lastIndexOf("}");
319
- code = code.substring(0, lastClosingCurly);
320
- code += endingCode + "\n}";
321
- }
322
- return code;
323
- };
324
305
  WebGPUShaderProcessorWGSL.prototype._processSamplers = function (code, isVertex) {
325
306
  var samplerRegexp = /var\s+(\w+Sampler)\s*:\s*(sampler|sampler_comparison)\s*;/gm;
326
307
  while (true) {