@babylonjs/core 6.36.0 → 6.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/Cameras/Inputs/arcRotateCameraGamepadInput.js +4 -0
  2. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  3. package/Engines/Extensions/engine.dynamicTexture.d.ts +2 -2
  4. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  5. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +28 -3
  6. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  7. package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -0
  8. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  9. package/Engines/WebGPU/webgpuBufferManager.js +6 -2
  10. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  11. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +1 -0
  12. package/Engines/WebGPU/webgpuCacheBindGroups.js +12 -0
  13. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  14. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +2 -1
  15. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  16. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -2
  17. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +5 -2
  18. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  19. package/Engines/WebGPU/webgpuCacheSampler.js +3 -0
  20. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  21. package/Engines/WebGPU/webgpuClearQuad.js +2 -1
  22. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  23. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +1 -1
  24. package/Engines/WebGPU/webgpuHardwareTexture.js +23 -5
  25. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  26. package/Engines/WebGPU/webgpuPipelineContext.js +4 -5
  27. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  28. package/Engines/WebGPU/webgpuQuerySet.js +10 -4
  29. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  30. package/Engines/WebGPU/webgpuTextureHelper.d.ts +8 -53
  31. package/Engines/WebGPU/webgpuTextureHelper.js +4 -996
  32. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  33. package/Engines/WebGPU/webgpuTextureManager.d.ts +56 -0
  34. package/Engines/WebGPU/webgpuTextureManager.js +1012 -0
  35. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -0
  36. package/Engines/engine.d.ts +1 -0
  37. package/Engines/engine.js +9 -2
  38. package/Engines/engine.js.map +1 -1
  39. package/Engines/renderTargetWrapper.d.ts +1 -0
  40. package/Engines/renderTargetWrapper.js +5 -1
  41. package/Engines/renderTargetWrapper.js.map +1 -1
  42. package/Engines/thinEngine.d.ts +1 -0
  43. package/Engines/thinEngine.js +11 -7
  44. package/Engines/thinEngine.js.map +1 -1
  45. package/Engines/webgpuEngine.d.ts +9 -2
  46. package/Engines/webgpuEngine.js +75 -3
  47. package/Engines/webgpuEngine.js.map +1 -1
  48. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.d.ts +23 -6
  49. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js +14 -3
  50. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js.map +1 -1
  51. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.d.ts +14 -3
  52. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +12 -11
  53. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  54. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.d.ts +1 -1
  55. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js +1 -1
  56. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js.map +1 -1
  57. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.d.ts +22 -7
  58. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +15 -9
  59. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  60. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.d.ts +1 -1
  61. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js +1 -1
  62. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
  63. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.d.ts +1 -1
  64. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js +1 -1
  65. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js.map +1 -1
  66. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.d.ts +1 -1
  67. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js +1 -1
  68. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js.map +1 -1
  69. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.d.ts +1 -1
  70. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +1 -1
  71. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
  72. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.d.ts +1 -1
  73. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js +1 -1
  74. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js.map +1 -1
  75. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.d.ts +1 -1
  76. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js +1 -1
  77. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -1
  78. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.d.ts +1 -1
  79. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js +1 -1
  80. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -1
  81. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.d.ts +1 -1
  82. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js +1 -1
  83. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
  84. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.d.ts +1 -1
  85. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js +1 -1
  86. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -1
  87. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.d.ts +1 -1
  88. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +1 -1
  89. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
  90. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.d.ts +1 -1
  91. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +1 -1
  92. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  93. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.d.ts +1 -1
  94. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js +1 -1
  95. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js.map +1 -1
  96. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.d.ts +13 -5
  97. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +9 -5
  98. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
  99. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.d.ts +1 -1
  100. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js +1 -1
  101. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  102. package/FlowGraph/flowGraph.d.ts +24 -6
  103. package/FlowGraph/flowGraph.js +12 -12
  104. package/FlowGraph/flowGraph.js.map +1 -1
  105. package/FlowGraph/flowGraphBlock.d.ts +31 -2
  106. package/FlowGraph/flowGraphBlock.js +8 -3
  107. package/FlowGraph/flowGraphBlock.js.map +1 -1
  108. package/FlowGraph/flowGraphContext.d.ts +5 -1
  109. package/FlowGraph/flowGraphContext.js +4 -2
  110. package/FlowGraph/flowGraphContext.js.map +1 -1
  111. package/FlowGraph/flowGraphCoordinator.d.ts +22 -2
  112. package/FlowGraph/flowGraphCoordinator.js +7 -11
  113. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  114. package/FlowGraph/{flowGraphWithOnDoneExecutionBlock.js → flowGraphExecutionBlockWithOutSignal.js} +1 -1
  115. package/FlowGraph/flowGraphExecutionBlockWithOutSignal.js.map +1 -0
  116. package/FlowGraph/flowGraphPathConverter.d.ts +13 -0
  117. package/FlowGraph/flowGraphPathConverter.js +31 -0
  118. package/FlowGraph/flowGraphPathConverter.js.map +1 -0
  119. package/FlowGraph/flowGraphPathConverterComponent.d.ts +19 -0
  120. package/FlowGraph/flowGraphPathConverterComponent.js +31 -0
  121. package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -0
  122. package/FlowGraph/index.d.ts +0 -1
  123. package/FlowGraph/index.js +0 -1
  124. package/FlowGraph/index.js.map +1 -1
  125. package/FlowGraph/serialization.d.ts +8 -0
  126. package/FlowGraph/serialization.js +12 -4
  127. package/FlowGraph/serialization.js.map +1 -1
  128. package/FlowGraph/typeDefinitions.d.ts +86 -1
  129. package/FlowGraph/typeDefinitions.js.map +1 -1
  130. package/Materials/Textures/dynamicTexture.js +2 -1
  131. package/Materials/Textures/dynamicTexture.js.map +1 -1
  132. package/Materials/Textures/hardwareTextureWrapper.d.ts +1 -1
  133. package/Materials/Textures/hardwareTextureWrapper.js.map +1 -1
  134. package/Materials/Textures/internalTexture.d.ts +6 -2
  135. package/Materials/Textures/internalTexture.js +6 -4
  136. package/Materials/Textures/internalTexture.js.map +1 -1
  137. package/Materials/Textures/renderTargetTexture.js +10 -10
  138. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  139. package/Materials/material.d.ts +1 -1
  140. package/Materials/material.js +3 -1
  141. package/Materials/material.js.map +1 -1
  142. package/Materials/shaderMaterial.js +2 -2
  143. package/Materials/shaderMaterial.js.map +1 -1
  144. package/Materials/uniformBuffer.d.ts +2 -0
  145. package/Materials/uniformBuffer.js +16 -0
  146. package/Materials/uniformBuffer.js.map +1 -1
  147. package/Meshes/GreasedLine/greasedLineMesh.d.ts +2 -1
  148. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  149. package/Meshes/GreasedLine/greasedLineRibbonMesh.d.ts +2 -1
  150. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  151. package/Meshes/WebGPU/webgpuDataBuffer.d.ts +1 -0
  152. package/Meshes/WebGPU/webgpuDataBuffer.js +2 -0
  153. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  154. package/Meshes/geometry.js +3 -3
  155. package/Meshes/geometry.js.map +1 -1
  156. package/Misc/brdfTextureTools.js +9 -7
  157. package/Misc/brdfTextureTools.js.map +1 -1
  158. package/Misc/rgbdTextureTools.js +37 -37
  159. package/Misc/rgbdTextureTools.js.map +1 -1
  160. package/ObjectModel/index.d.ts +1 -0
  161. package/ObjectModel/index.js +2 -0
  162. package/ObjectModel/index.js.map +1 -0
  163. package/ObjectModel/objectModelInterfaces.d.ts +21 -0
  164. package/ObjectModel/objectModelInterfaces.js +2 -0
  165. package/ObjectModel/objectModelInterfaces.js.map +1 -0
  166. package/Particles/computeShaderParticleSystem.js +2 -2
  167. package/Particles/computeShaderParticleSystem.js.map +1 -1
  168. package/Particles/gpuParticleSystem.js +1 -1
  169. package/Particles/gpuParticleSystem.js.map +1 -1
  170. package/Particles/particleSystem.js +2 -5
  171. package/Particles/particleSystem.js.map +1 -1
  172. package/Rendering/fluidRenderer/fluidRenderer.js +1 -6
  173. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  174. package/Rendering/renderingManager.js +1 -1
  175. package/Rendering/renderingManager.js.map +1 -1
  176. package/XR/features/WebXRControllerTeleportation.d.ts +9 -1
  177. package/XR/features/WebXRControllerTeleportation.js +10 -0
  178. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  179. package/XR/webXRCamera.js.map +1 -1
  180. package/index.d.ts +1 -0
  181. package/index.js +1 -0
  182. package/index.js.map +1 -1
  183. package/package.json +1 -1
  184. package/types.d.ts +5 -1
  185. package/types.js +0 -2
  186. package/types.js.map +1 -1
  187. package/FlowGraph/flowGraphPath.d.ts +0 -45
  188. package/FlowGraph/flowGraphPath.js +0 -156
  189. package/FlowGraph/flowGraphPath.js.map +0 -1
  190. package/FlowGraph/flowGraphPathComponent.d.ts +0 -42
  191. package/FlowGraph/flowGraphPathComponent.js +0 -51
  192. package/FlowGraph/flowGraphPathComponent.js.map +0 -1
  193. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js.map +0 -1
  194. /package/FlowGraph/{flowGraphWithOnDoneExecutionBlock.d.ts → flowGraphExecutionBlockWithOutSignal.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuCacheRenderPipelineTree.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheRenderPipelineTree.ts"],"names":[],"mappings":"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","sourcesContent":["import type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\n\r\n/** @internal */\r\nclass NodeState {\r\n public values: { [id: number]: NodeState };\r\n public pipeline: GPURenderPipeline;\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n\r\n public count(): [number, number] {\r\n let countNode = 0,\r\n countPipeline = this.pipeline ? 1 : 0;\r\n for (const value in this.values) {\r\n const node = this.values[value];\r\n const [childCountNodes, childCoundPipeline] = node!.count();\r\n countNode += childCountNodes;\r\n countPipeline += childCoundPipeline;\r\n countNode++;\r\n }\r\n return [countNode, countPipeline];\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheRenderPipelineTree extends WebGPUCacheRenderPipeline {\r\n private static _Cache: NodeState = new NodeState();\r\n\r\n private _nodeStack: NodeState[];\r\n\r\n public static GetNodeCounts(): { nodeCount: number; pipelineCount: number } {\r\n const counts = WebGPUCacheRenderPipelineTree._Cache.count();\r\n\r\n return { nodeCount: counts[0], pipelineCount: counts[1] };\r\n }\r\n\r\n public static _GetPipelines(node: NodeState, pipelines: Array<Array<number>>, curPath: Array<number>, curPathLen: number): void {\r\n if (node.pipeline) {\r\n const path = curPath.slice();\r\n path.length = curPathLen;\r\n pipelines.push(path);\r\n }\r\n for (const value in node.values) {\r\n const nnode = node.values[value];\r\n curPath[curPathLen] = parseInt(value);\r\n WebGPUCacheRenderPipelineTree._GetPipelines(nnode, pipelines, curPath, curPathLen + 1);\r\n }\r\n }\r\n\r\n public static GetPipelines(): Array<Array<number>> {\r\n const pipelines: Array<Array<number>> = [];\r\n WebGPUCacheRenderPipelineTree._GetPipelines(WebGPUCacheRenderPipelineTree._Cache, pipelines, [], 0);\r\n return pipelines;\r\n }\r\n\r\n constructor(device: GPUDevice, emptyVertexBuffer: VertexBuffer) {\r\n super(device, emptyVertexBuffer);\r\n this._nodeStack = [];\r\n this._nodeStack[0] = WebGPUCacheRenderPipelineTree._Cache;\r\n }\r\n\r\n protected _getRenderPipeline(param: { token: any; pipeline: Nullable<GPURenderPipeline> }): void {\r\n let node = this._nodeStack[this._stateDirtyLowestIndex];\r\n for (let i = this._stateDirtyLowestIndex; i < this._statesLength; ++i) {\r\n let nn: NodeState | undefined = node!.values[this._states[i]];\r\n if (!nn) {\r\n nn = new NodeState();\r\n node!.values[this._states[i]] = nn;\r\n }\r\n node = nn;\r\n this._nodeStack[i + 1] = node;\r\n }\r\n\r\n param.token = node;\r\n param.pipeline = node.pipeline;\r\n }\r\n\r\n protected _setRenderPipeline(param: { token: NodeState; pipeline: Nullable<GPURenderPipeline> }): void {\r\n param.token.pipeline = param.pipeline!;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuCacheRenderPipelineTree.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheRenderPipelineTree.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\nimport type { Nullable } from \"../../types\";\r\nimport { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\n\r\n/** @internal */\r\nclass NodeState {\r\n public values: { [id: number]: NodeState };\r\n public pipeline: GPURenderPipeline;\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n\r\n public count(): [number, number] {\r\n let countNode = 0,\r\n countPipeline = this.pipeline ? 1 : 0;\r\n for (const value in this.values) {\r\n const node = this.values[value];\r\n const [childCountNodes, childCoundPipeline] = node!.count();\r\n countNode += childCountNodes;\r\n countPipeline += childCoundPipeline;\r\n countNode++;\r\n }\r\n return [countNode, countPipeline];\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheRenderPipelineTree extends WebGPUCacheRenderPipeline {\r\n private static _Cache: NodeState = new NodeState();\r\n\r\n private _nodeStack: NodeState[];\r\n\r\n public static GetNodeCounts(): { nodeCount: number; pipelineCount: number } {\r\n const counts = WebGPUCacheRenderPipelineTree._Cache.count();\r\n\r\n return { nodeCount: counts[0], pipelineCount: counts[1] };\r\n }\r\n\r\n public static _GetPipelines(node: NodeState, pipelines: Array<Array<number>>, curPath: Array<number>, curPathLen: number): void {\r\n if (node.pipeline) {\r\n const path = curPath.slice();\r\n path.length = curPathLen;\r\n pipelines.push(path);\r\n }\r\n for (const value in node.values) {\r\n const nnode = node.values[value];\r\n curPath[curPathLen] = parseInt(value);\r\n WebGPUCacheRenderPipelineTree._GetPipelines(nnode, pipelines, curPath, curPathLen + 1);\r\n }\r\n }\r\n\r\n public static GetPipelines(): Array<Array<number>> {\r\n const pipelines: Array<Array<number>> = [];\r\n WebGPUCacheRenderPipelineTree._GetPipelines(WebGPUCacheRenderPipelineTree._Cache, pipelines, [], 0);\r\n return pipelines;\r\n }\r\n\r\n public static ResetCache() {\r\n WebGPUCacheRenderPipelineTree._Cache = new NodeState();\r\n }\r\n\r\n public reset(): void {\r\n this._nodeStack = [];\r\n this._nodeStack[0] = WebGPUCacheRenderPipelineTree._Cache;\r\n super.reset();\r\n }\r\n\r\n protected _getRenderPipeline(param: { token: any; pipeline: Nullable<GPURenderPipeline> }): void {\r\n let node = this._nodeStack[this._stateDirtyLowestIndex];\r\n for (let i = this._stateDirtyLowestIndex; i < this._statesLength; ++i) {\r\n let nn: NodeState | undefined = node!.values[this._states[i]];\r\n if (!nn) {\r\n nn = new NodeState();\r\n node!.values[this._states[i]] = nn;\r\n }\r\n node = nn;\r\n this._nodeStack[i + 1] = node;\r\n }\r\n\r\n param.token = node;\r\n param.pipeline = node.pipeline;\r\n }\r\n\r\n protected _setRenderPipeline(param: { token: NodeState; pipeline: Nullable<GPURenderPipeline> }): void {\r\n param.token.pipeline = param.pipeline!;\r\n }\r\n}\r\n"]}
@@ -1,3 +1,6 @@
1
+ /* eslint-disable babylonjs/available */
2
+ /* eslint-disable jsdoc/require-jsdoc */
3
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1
4
  import * as WebGPUConstants from "./webgpuConstants.js";
2
5
 
3
6
  const filterToBits = [
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuCacheSampler.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheSampler.ts"],"names":[],"mappings":"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","sourcesContent":["import * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { Constants } from \"../constants\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\nconst filterToBits = [\r\n 0 | (0 << 1) | (0 << 2), // not used\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 1 | (1 << 1) | (1 << 2), // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 | (1 << 1) | (1 << 2), // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR\r\n 0 | (0 << 1) | (1 << 2), // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 1 | (0 << 1) | (1 << 2), // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n// subtract 0x01FF from the comparison function value before indexing this array!\r\nconst comparisonFunctionToBits = [\r\n (0 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // undefined\r\n (0 << 3) | (0 << 4) | (0 << 5) | (1 << 6), // NEVER\r\n (0 << 3) | (0 << 4) | (1 << 5) | (0 << 6), // LESS\r\n (0 << 3) | (0 << 4) | (1 << 5) | (1 << 6), // EQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (0 << 6), // LEQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (1 << 6), // GREATER\r\n (0 << 3) | (1 << 4) | (1 << 5) | (0 << 6), // NOTEQUAL\r\n (0 << 3) | (1 << 4) | (1 << 5) | (1 << 6), // GEQUAL\r\n (1 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // ALWAYS\r\n];\r\n\r\nconst filterNoMipToBits = [\r\n 0 << 7, // not used\r\n 1 << 7, // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 << 7, // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 0 << 7, // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 1 << 7, // TEXTURE_NEAREST_LINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 << 7, // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n/** @internal */\r\nexport class WebGPUCacheSampler {\r\n private _samplers: { [hash: number]: GPUSampler } = {};\r\n private _device: GPUDevice;\r\n\r\n public disabled: boolean;\r\n\r\n constructor(device: GPUDevice) {\r\n this._device = device;\r\n this.disabled = false;\r\n }\r\n\r\n public static GetSamplerHashCode(sampler: TextureSampler): number {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const code =\r\n filterToBits[sampler.samplingMode] +\r\n comparisonFunctionToBits[(sampler._comparisonFunction || 0x0202) - 0x0200 + 1] +\r\n filterNoMipToBits[sampler.samplingMode] + // handle the lodMinClamp = lodMaxClamp = 0 case when no filter used for mip mapping\r\n ((sampler._cachedWrapU ?? 1) << 8) +\r\n ((sampler._cachedWrapV ?? 1) << 10) +\r\n ((sampler._cachedWrapR ?? 1) << 12) +\r\n ((sampler.useMipMaps ? 1 : 0) << 14) + // need to factor this in because _getSamplerFilterDescriptor depends on samplingMode AND useMipMaps!\r\n (anisotropy << 15);\r\n\r\n return code;\r\n }\r\n\r\n private static _GetSamplerFilterDescriptor(\r\n sampler: TextureSampler,\r\n anisotropy: number\r\n ): {\r\n magFilter: GPUFilterMode;\r\n minFilter: GPUFilterMode;\r\n mipmapFilter: GPUFilterMode;\r\n lodMinClamp?: number;\r\n lodMaxClamp?: number;\r\n anisotropyEnabled?: boolean;\r\n } {\r\n let magFilter: GPUFilterMode, minFilter: GPUFilterMode, mipmapFilter: GPUFilterMode, lodMinClamp: number | undefined, lodMaxClamp: number | undefined;\r\n const useMipMaps = sampler.useMipMaps;\r\n switch (sampler.samplingMode) {\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR:\r\n case Constants.TEXTURE_TRILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST:\r\n case Constants.TEXTURE_NEAREST_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR:\r\n case Constants.TEXTURE_BILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n default:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n }\r\n\r\n if (anisotropy > 1 && (lodMinClamp !== 0 || lodMaxClamp !== 0) && mipmapFilter !== WebGPUConstants.FilterMode.Nearest) {\r\n return {\r\n magFilter: WebGPUConstants.FilterMode.Linear,\r\n minFilter: WebGPUConstants.FilterMode.Linear,\r\n mipmapFilter: WebGPUConstants.FilterMode.Linear,\r\n anisotropyEnabled: true,\r\n };\r\n }\r\n\r\n return {\r\n magFilter,\r\n minFilter,\r\n mipmapFilter,\r\n lodMinClamp,\r\n lodMaxClamp,\r\n };\r\n }\r\n\r\n private static _GetWrappingMode(mode: number): GPUAddressMode {\r\n switch (mode) {\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.Repeat;\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.ClampToEdge;\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.MirrorRepeat;\r\n }\r\n return WebGPUConstants.AddressMode.Repeat;\r\n }\r\n\r\n private static _GetSamplerWrappingDescriptor(sampler: TextureSampler): {\r\n addressModeU: GPUAddressMode;\r\n addressModeV: GPUAddressMode;\r\n addressModeW: GPUAddressMode;\r\n } {\r\n return {\r\n addressModeU: this._GetWrappingMode(sampler._cachedWrapU!),\r\n addressModeV: this._GetWrappingMode(sampler._cachedWrapV!),\r\n addressModeW: this._GetWrappingMode(sampler._cachedWrapR!),\r\n };\r\n }\r\n\r\n private static _GetSamplerDescriptor(sampler: TextureSampler, label?: string): GPUSamplerDescriptor {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler.useMipMaps && sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const filterDescriptor = this._GetSamplerFilterDescriptor(sampler, anisotropy);\r\n return {\r\n label,\r\n ...filterDescriptor,\r\n ...this._GetSamplerWrappingDescriptor(sampler),\r\n compare: sampler._comparisonFunction ? WebGPUCacheSampler.GetCompareFunction(sampler._comparisonFunction) : undefined,\r\n maxAnisotropy: filterDescriptor.anisotropyEnabled ? anisotropy : 1,\r\n };\r\n }\r\n\r\n public static GetCompareFunction(compareFunction: Nullable<number>): GPUCompareFunction {\r\n switch (compareFunction) {\r\n case Constants.ALWAYS:\r\n return WebGPUConstants.CompareFunction.Always;\r\n case Constants.EQUAL:\r\n return WebGPUConstants.CompareFunction.Equal;\r\n case Constants.GREATER:\r\n return WebGPUConstants.CompareFunction.Greater;\r\n case Constants.GEQUAL:\r\n return WebGPUConstants.CompareFunction.GreaterEqual;\r\n case Constants.LESS:\r\n return WebGPUConstants.CompareFunction.Less;\r\n case Constants.LEQUAL:\r\n return WebGPUConstants.CompareFunction.LessEqual;\r\n case Constants.NEVER:\r\n return WebGPUConstants.CompareFunction.Never;\r\n case Constants.NOTEQUAL:\r\n return WebGPUConstants.CompareFunction.NotEqual;\r\n default:\r\n return WebGPUConstants.CompareFunction.Less;\r\n }\r\n }\r\n\r\n public getSampler(sampler: TextureSampler, bypassCache = false, hash = 0, label?: string): GPUSampler {\r\n if (this.disabled) {\r\n return this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler, label));\r\n }\r\n\r\n if (bypassCache) {\r\n hash = 0;\r\n } else if (hash === 0) {\r\n hash = WebGPUCacheSampler.GetSamplerHashCode(sampler);\r\n }\r\n\r\n let gpuSampler = bypassCache ? undefined : this._samplers[hash];\r\n if (!gpuSampler) {\r\n gpuSampler = this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler, label));\r\n if (!bypassCache) {\r\n this._samplers[hash] = gpuSampler;\r\n }\r\n }\r\n\r\n return gpuSampler;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuCacheSampler.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheSampler.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\n/* eslint-disable jsdoc/require-jsdoc */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { Constants } from \"../constants\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\nconst filterToBits = [\r\n 0 | (0 << 1) | (0 << 2), // not used\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 1 | (1 << 1) | (1 << 2), // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 | (0 << 1) | (0 << 2), // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 | (1 << 1) | (1 << 2), // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 0 | (1 << 1) | (0 << 2), // TEXTURE_NEAREST_LINEAR\r\n 0 | (0 << 1) | (1 << 2), // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 1 | (0 << 1) | (1 << 2), // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 1 | (1 << 1) | (0 << 2), // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 | (0 << 1) | (0 << 2), // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n// subtract 0x01FF from the comparison function value before indexing this array!\r\nconst comparisonFunctionToBits = [\r\n (0 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // undefined\r\n (0 << 3) | (0 << 4) | (0 << 5) | (1 << 6), // NEVER\r\n (0 << 3) | (0 << 4) | (1 << 5) | (0 << 6), // LESS\r\n (0 << 3) | (0 << 4) | (1 << 5) | (1 << 6), // EQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (0 << 6), // LEQUAL\r\n (0 << 3) | (1 << 4) | (0 << 5) | (1 << 6), // GREATER\r\n (0 << 3) | (1 << 4) | (1 << 5) | (0 << 6), // NOTEQUAL\r\n (0 << 3) | (1 << 4) | (1 << 5) | (1 << 6), // GEQUAL\r\n (1 << 3) | (0 << 4) | (0 << 5) | (0 << 6), // ALWAYS\r\n];\r\n\r\nconst filterNoMipToBits = [\r\n 0 << 7, // not used\r\n 1 << 7, // TEXTURE_NEAREST_SAMPLINGMODE / TEXTURE_NEAREST_NEAREST\r\n 1 << 7, // TEXTURE_BILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR\r\n 0 << 7, // TEXTURE_TRILINEAR_SAMPLINGMODE / TEXTURE_LINEAR_LINEAR_MIPLINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPNEAREST\r\n 0 << 7, // TEXTURE_NEAREST_LINEAR_MIPLINEAR\r\n 1 << 7, // TEXTURE_NEAREST_LINEAR\r\n 0 << 7, // TEXTURE_NEAREST_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPNEAREST\r\n 0 << 7, // TEXTURE_LINEAR_NEAREST_MIPLINEAR\r\n 0 << 7, // TEXTURE_LINEAR_LINEAR_MIPNEAREST\r\n 1 << 7, // TEXTURE_LINEAR_NEAREST\r\n];\r\n\r\n/** @internal */\r\nexport class WebGPUCacheSampler {\r\n private _samplers: { [hash: number]: GPUSampler } = {};\r\n private _device: GPUDevice;\r\n\r\n public disabled: boolean;\r\n\r\n constructor(device: GPUDevice) {\r\n this._device = device;\r\n this.disabled = false;\r\n }\r\n\r\n public static GetSamplerHashCode(sampler: TextureSampler): number {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const code =\r\n filterToBits[sampler.samplingMode] +\r\n comparisonFunctionToBits[(sampler._comparisonFunction || 0x0202) - 0x0200 + 1] +\r\n filterNoMipToBits[sampler.samplingMode] + // handle the lodMinClamp = lodMaxClamp = 0 case when no filter used for mip mapping\r\n ((sampler._cachedWrapU ?? 1) << 8) +\r\n ((sampler._cachedWrapV ?? 1) << 10) +\r\n ((sampler._cachedWrapR ?? 1) << 12) +\r\n ((sampler.useMipMaps ? 1 : 0) << 14) + // need to factor this in because _getSamplerFilterDescriptor depends on samplingMode AND useMipMaps!\r\n (anisotropy << 15);\r\n\r\n return code;\r\n }\r\n\r\n private static _GetSamplerFilterDescriptor(\r\n sampler: TextureSampler,\r\n anisotropy: number\r\n ): {\r\n magFilter: GPUFilterMode;\r\n minFilter: GPUFilterMode;\r\n mipmapFilter: GPUFilterMode;\r\n lodMinClamp?: number;\r\n lodMaxClamp?: number;\r\n anisotropyEnabled?: boolean;\r\n } {\r\n let magFilter: GPUFilterMode, minFilter: GPUFilterMode, mipmapFilter: GPUFilterMode, lodMinClamp: number | undefined, lodMaxClamp: number | undefined;\r\n const useMipMaps = sampler.useMipMaps;\r\n switch (sampler.samplingMode) {\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR:\r\n case Constants.TEXTURE_TRILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_NEAREST_LINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_NEAREST_NEAREST:\r\n case Constants.TEXTURE_NEAREST_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n lodMinClamp = lodMaxClamp = 0;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n if (!useMipMaps) {\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n } else {\r\n mipmapFilter = WebGPUConstants.FilterMode.Linear;\r\n }\r\n break;\r\n case Constants.TEXTURE_LINEAR_LINEAR:\r\n case Constants.TEXTURE_BILINEAR_SAMPLINGMODE:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Linear;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n case Constants.TEXTURE_LINEAR_NEAREST:\r\n magFilter = WebGPUConstants.FilterMode.Linear;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n default:\r\n magFilter = WebGPUConstants.FilterMode.Nearest;\r\n minFilter = WebGPUConstants.FilterMode.Nearest;\r\n mipmapFilter = WebGPUConstants.FilterMode.Nearest;\r\n lodMinClamp = lodMaxClamp = 0;\r\n break;\r\n }\r\n\r\n if (anisotropy > 1 && (lodMinClamp !== 0 || lodMaxClamp !== 0) && mipmapFilter !== WebGPUConstants.FilterMode.Nearest) {\r\n return {\r\n magFilter: WebGPUConstants.FilterMode.Linear,\r\n minFilter: WebGPUConstants.FilterMode.Linear,\r\n mipmapFilter: WebGPUConstants.FilterMode.Linear,\r\n anisotropyEnabled: true,\r\n };\r\n }\r\n\r\n return {\r\n magFilter,\r\n minFilter,\r\n mipmapFilter,\r\n lodMinClamp,\r\n lodMaxClamp,\r\n };\r\n }\r\n\r\n private static _GetWrappingMode(mode: number): GPUAddressMode {\r\n switch (mode) {\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.Repeat;\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.ClampToEdge;\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return WebGPUConstants.AddressMode.MirrorRepeat;\r\n }\r\n return WebGPUConstants.AddressMode.Repeat;\r\n }\r\n\r\n private static _GetSamplerWrappingDescriptor(sampler: TextureSampler): {\r\n addressModeU: GPUAddressMode;\r\n addressModeV: GPUAddressMode;\r\n addressModeW: GPUAddressMode;\r\n } {\r\n return {\r\n addressModeU: this._GetWrappingMode(sampler._cachedWrapU!),\r\n addressModeV: this._GetWrappingMode(sampler._cachedWrapV!),\r\n addressModeW: this._GetWrappingMode(sampler._cachedWrapR!),\r\n };\r\n }\r\n\r\n private static _GetSamplerDescriptor(sampler: TextureSampler, label?: string): GPUSamplerDescriptor {\r\n // The WebGPU spec currently only allows values 1 and 4 for anisotropy\r\n const anisotropy = sampler.useMipMaps && sampler._cachedAnisotropicFilteringLevel && sampler._cachedAnisotropicFilteringLevel > 1 ? 4 : 1;\r\n const filterDescriptor = this._GetSamplerFilterDescriptor(sampler, anisotropy);\r\n return {\r\n label,\r\n ...filterDescriptor,\r\n ...this._GetSamplerWrappingDescriptor(sampler),\r\n compare: sampler._comparisonFunction ? WebGPUCacheSampler.GetCompareFunction(sampler._comparisonFunction) : undefined,\r\n maxAnisotropy: filterDescriptor.anisotropyEnabled ? anisotropy : 1,\r\n };\r\n }\r\n\r\n public static GetCompareFunction(compareFunction: Nullable<number>): GPUCompareFunction {\r\n switch (compareFunction) {\r\n case Constants.ALWAYS:\r\n return WebGPUConstants.CompareFunction.Always;\r\n case Constants.EQUAL:\r\n return WebGPUConstants.CompareFunction.Equal;\r\n case Constants.GREATER:\r\n return WebGPUConstants.CompareFunction.Greater;\r\n case Constants.GEQUAL:\r\n return WebGPUConstants.CompareFunction.GreaterEqual;\r\n case Constants.LESS:\r\n return WebGPUConstants.CompareFunction.Less;\r\n case Constants.LEQUAL:\r\n return WebGPUConstants.CompareFunction.LessEqual;\r\n case Constants.NEVER:\r\n return WebGPUConstants.CompareFunction.Never;\r\n case Constants.NOTEQUAL:\r\n return WebGPUConstants.CompareFunction.NotEqual;\r\n default:\r\n return WebGPUConstants.CompareFunction.Less;\r\n }\r\n }\r\n\r\n public getSampler(sampler: TextureSampler, bypassCache = false, hash = 0, label?: string): GPUSampler {\r\n if (this.disabled) {\r\n return this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler, label));\r\n }\r\n\r\n if (bypassCache) {\r\n hash = 0;\r\n } else if (hash === 0) {\r\n hash = WebGPUCacheSampler.GetSamplerHashCode(sampler);\r\n }\r\n\r\n let gpuSampler = bypassCache ? undefined : this._samplers[hash];\r\n if (!gpuSampler) {\r\n gpuSampler = this._device.createSampler(WebGPUCacheSampler._GetSamplerDescriptor(sampler, label));\r\n if (!bypassCache) {\r\n this._samplers[hash] = gpuSampler;\r\n }\r\n }\r\n\r\n return gpuSampler;\r\n }\r\n}\r\n"]}
@@ -1,7 +1,8 @@
1
1
 
2
2
  import { WebGPUCacheRenderPipelineTree } from "./webgpuCacheRenderPipelineTree.js";
3
3
  import { WebGPUShaderProcessingContext } from "./webgpuShaderProcessingContext.js";
4
- import { renderableTextureFormatToIndex, WebGPUTextureHelper } from "./webgpuTextureHelper.js";
4
+ import { WebGPUTextureHelper } from "./webgpuTextureHelper.js";
5
+ import { renderableTextureFormatToIndex } from "./webgpuTextureManager.js";
5
6
  import "../../Shaders/clearQuad.vertex.js";
6
7
  import "../../Shaders/clearQuad.fragment.js";
7
8
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"../../Materials/effect\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IColor4Like } from \"../../Maths/math.like\";\r\nimport type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { renderableTextureFormatToIndex, WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @internal */\r\nexport class WebGPUClearQuad {\r\n private _device: GPUDevice;\r\n private _engine: WebGPUEngine;\r\n private _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n private _effect: Effect;\r\n private _bindGroups: { [id: string]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: string]: GPURenderBundle } = {};\r\n private _keyTemp: number[] = [];\r\n\r\n public setDepthStencilFormat(format: GPUTextureFormat | undefined): void {\r\n this._depthTextureFormat = format;\r\n this._cacheRenderPipeline.setDepthStencilFormat(format);\r\n }\r\n\r\n public setColorFormat(format: GPUTextureFormat | null): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[], textureCount: number): void {\r\n this._cacheRenderPipeline.setMRT(textureArray, textureCount);\r\n this._cacheRenderPipeline.setMRTAttachments(attachments);\r\n }\r\n\r\n constructor(device: GPUDevice, engine: WebGPUEngine, emptyVertexBuffer: VertexBuffer) {\r\n this._device = device;\r\n this._engine = engine;\r\n\r\n this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer);\r\n this._cacheRenderPipeline.setDepthTestEnabled(false);\r\n this._cacheRenderPipeline.setStencilReadMask(0xff);\r\n\r\n this._effect = engine.createEffect(\"clearQuad\", [], [\"color\", \"depthValue\"]);\r\n }\r\n\r\n public clear(\r\n renderPass: Nullable<GPURenderPassEncoder>,\r\n clearColor?: Nullable<IColor4Like>,\r\n clearDepth?: boolean,\r\n clearStencil?: boolean,\r\n sampleCount = 1\r\n ): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey: string;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n let idx = 0;\r\n this._keyTemp.length = 0;\r\n for (let i = 0; i < this._cacheRenderPipeline.colorFormats.length; ++i) {\r\n this._keyTemp[idx++] = renderableTextureFormatToIndex[this._cacheRenderPipeline.colorFormats[i] ?? \"\"];\r\n }\r\n\r\n const depthStencilFormatIndex = renderableTextureFormatToIndex[this._depthTextureFormat ?? 0];\r\n\r\n this._keyTemp[idx] =\r\n (clearColor ? clearColor.r + clearColor.g * 256 + clearColor.b * 256 * 256 + clearColor.a * 256 * 256 * 256 : 0) +\r\n (clearDepth ? 2 ** 32 : 0) +\r\n (clearStencil ? 2 ** 33 : 0) +\r\n (this._engine.useReverseDepthBuffer ? 2 ** 34 : 0) +\r\n (isRTTPass ? 2 ** 35 : 0) +\r\n (sampleCount > 1 ? 2 ** 36 : 0) +\r\n depthStencilFormatIndex * 2 ** 37;\r\n\r\n bundleKey = this._keyTemp.join(\"_\");\r\n bundle = this._bundleCache[bundleKey];\r\n\r\n if (bundle) {\r\n return bundle;\r\n }\r\n\r\n renderPass2 = this._device.createRenderBundleEncoder({\r\n colorFormats: this._cacheRenderPipeline.colorFormats,\r\n depthStencilFormat: this._depthTextureFormat,\r\n sampleCount: WebGPUTextureHelper.GetSample(sampleCount),\r\n });\r\n }\r\n\r\n this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);\r\n this._cacheRenderPipeline.setStencilEnabled(!!clearStencil && !!this._depthTextureFormat && WebGPUTextureHelper.HasStencilAspect(this._depthTextureFormat));\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xff : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? Constants.ALWAYS : Constants.NEVER);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? Constants.REPLACE : Constants.KEEP);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xf : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(Constants.MATERIAL_TriangleStripDrawMode, this._effect, sampleCount);\r\n\r\n const webgpuPipelineContext = this._effect._pipelineContext as WebGPUPipelineContext;\r\n\r\n if (clearColor) {\r\n this._effect.setDirectColor4(\"color\", clearColor);\r\n }\r\n\r\n this._effect.setFloat(\"depthValue\", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);\r\n\r\n webgpuPipelineContext.uniformBuffer!.update();\r\n\r\n const bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;\r\n const bufferLeftOver = webgpuPipelineContext.uniformBuffer!.getBuffer() as WebGPUDataBuffer;\r\n\r\n const key = bufferLeftOver.uniqueId + \"-\" + bufferInternals.uniqueId;\r\n\r\n let bindGroups = this._bindGroups[key];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts[0];\r\n bindGroups = this._bindGroups[key] = [];\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[0],\r\n entries: [],\r\n })\r\n );\r\n if (!WebGPUShaderProcessingContext._SimplifiedKnownBindings) {\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[1],\r\n entries: [],\r\n })\r\n );\r\n }\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[WebGPUShaderProcessingContext._SimplifiedKnownBindings ? 1 : 2],\r\n entries: [\r\n {\r\n binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity,\r\n },\r\n },\r\n {\r\n binding: 1,\r\n resource: {\r\n buffer: bufferLeftOver.underlyingResource,\r\n size: bufferLeftOver.capacity,\r\n },\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n\r\n renderPass2.setPipeline(pipeline);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n renderPass2.setBindGroup(i, bindGroups[i]);\r\n }\r\n renderPass2.draw(4, 1, 0, 0);\r\n\r\n if (!renderPass) {\r\n bundle = (renderPass2 as GPURenderBundleEncoder).finish();\r\n this._bundleCache[bundleKey!] = bundle;\r\n }\r\n\r\n return bundle;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuClearQuad.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuClearQuad.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"../../Materials/effect\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IColor4Like } from \"../../Maths/math.like\";\r\nimport type { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./webgpuCacheRenderPipeline\";\r\nimport { WebGPUCacheRenderPipelineTree } from \"./webgpuCacheRenderPipelineTree\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\nimport { renderableTextureFormatToIndex } from \"./webgpuTextureManager\";\r\n\r\nimport \"../../Shaders/clearQuad.vertex\";\r\nimport \"../../Shaders/clearQuad.fragment\";\r\n\r\n/** @internal */\r\nexport class WebGPUClearQuad {\r\n private _device: GPUDevice;\r\n private _engine: WebGPUEngine;\r\n private _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n private _effect: Effect;\r\n private _bindGroups: { [id: string]: GPUBindGroup[] } = {};\r\n private _depthTextureFormat: GPUTextureFormat | undefined;\r\n private _bundleCache: { [key: string]: GPURenderBundle } = {};\r\n private _keyTemp: number[] = [];\r\n\r\n public setDepthStencilFormat(format: GPUTextureFormat | undefined): void {\r\n this._depthTextureFormat = format;\r\n this._cacheRenderPipeline.setDepthStencilFormat(format);\r\n }\r\n\r\n public setColorFormat(format: GPUTextureFormat | null): void {\r\n this._cacheRenderPipeline.setColorFormat(format);\r\n }\r\n\r\n public setMRTAttachments(attachments: number[], textureArray: InternalTexture[], textureCount: number): void {\r\n this._cacheRenderPipeline.setMRT(textureArray, textureCount);\r\n this._cacheRenderPipeline.setMRTAttachments(attachments);\r\n }\r\n\r\n constructor(device: GPUDevice, engine: WebGPUEngine, emptyVertexBuffer: VertexBuffer) {\r\n this._device = device;\r\n this._engine = engine;\r\n\r\n this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, emptyVertexBuffer);\r\n this._cacheRenderPipeline.setDepthTestEnabled(false);\r\n this._cacheRenderPipeline.setStencilReadMask(0xff);\r\n\r\n this._effect = engine.createEffect(\"clearQuad\", [], [\"color\", \"depthValue\"]);\r\n }\r\n\r\n public clear(\r\n renderPass: Nullable<GPURenderPassEncoder>,\r\n clearColor?: Nullable<IColor4Like>,\r\n clearDepth?: boolean,\r\n clearStencil?: boolean,\r\n sampleCount = 1\r\n ): Nullable<GPURenderBundle> {\r\n let renderPass2: GPURenderPassEncoder | GPURenderBundleEncoder;\r\n let bundle: Nullable<GPURenderBundle> = null;\r\n let bundleKey: string;\r\n\r\n const isRTTPass = !!this._engine._currentRenderTarget;\r\n\r\n if (renderPass) {\r\n renderPass2 = renderPass;\r\n } else {\r\n let idx = 0;\r\n this._keyTemp.length = 0;\r\n for (let i = 0; i < this._cacheRenderPipeline.colorFormats.length; ++i) {\r\n this._keyTemp[idx++] = renderableTextureFormatToIndex[this._cacheRenderPipeline.colorFormats[i] ?? \"\"];\r\n }\r\n\r\n const depthStencilFormatIndex = renderableTextureFormatToIndex[this._depthTextureFormat ?? 0];\r\n\r\n this._keyTemp[idx] =\r\n (clearColor ? clearColor.r + clearColor.g * 256 + clearColor.b * 256 * 256 + clearColor.a * 256 * 256 * 256 : 0) +\r\n (clearDepth ? 2 ** 32 : 0) +\r\n (clearStencil ? 2 ** 33 : 0) +\r\n (this._engine.useReverseDepthBuffer ? 2 ** 34 : 0) +\r\n (isRTTPass ? 2 ** 35 : 0) +\r\n (sampleCount > 1 ? 2 ** 36 : 0) +\r\n depthStencilFormatIndex * 2 ** 37;\r\n\r\n bundleKey = this._keyTemp.join(\"_\");\r\n bundle = this._bundleCache[bundleKey];\r\n\r\n if (bundle) {\r\n return bundle;\r\n }\r\n\r\n renderPass2 = this._device.createRenderBundleEncoder({\r\n colorFormats: this._cacheRenderPipeline.colorFormats,\r\n depthStencilFormat: this._depthTextureFormat,\r\n sampleCount: WebGPUTextureHelper.GetSample(sampleCount),\r\n });\r\n }\r\n\r\n this._cacheRenderPipeline.setDepthWriteEnabled(!!clearDepth);\r\n this._cacheRenderPipeline.setStencilEnabled(!!clearStencil && !!this._depthTextureFormat && WebGPUTextureHelper.HasStencilAspect(this._depthTextureFormat));\r\n this._cacheRenderPipeline.setStencilWriteMask(clearStencil ? 0xff : 0);\r\n this._cacheRenderPipeline.setStencilCompare(clearStencil ? Constants.ALWAYS : Constants.NEVER);\r\n this._cacheRenderPipeline.setStencilPassOp(clearStencil ? Constants.REPLACE : Constants.KEEP);\r\n this._cacheRenderPipeline.setWriteMask(clearColor ? 0xf : 0);\r\n\r\n const pipeline = this._cacheRenderPipeline.getRenderPipeline(Constants.MATERIAL_TriangleStripDrawMode, this._effect, sampleCount);\r\n\r\n const webgpuPipelineContext = this._effect._pipelineContext as WebGPUPipelineContext;\r\n\r\n if (clearColor) {\r\n this._effect.setDirectColor4(\"color\", clearColor);\r\n }\r\n\r\n this._effect.setFloat(\"depthValue\", this._engine.useReverseDepthBuffer ? this._engine._clearReverseDepthValue : this._engine._clearDepthValue);\r\n\r\n webgpuPipelineContext.uniformBuffer!.update();\r\n\r\n const bufferInternals = isRTTPass ? this._engine._ubInvertY : this._engine._ubDontInvertY;\r\n const bufferLeftOver = webgpuPipelineContext.uniformBuffer!.getBuffer() as WebGPUDataBuffer;\r\n\r\n const key = bufferLeftOver.uniqueId + \"-\" + bufferInternals.uniqueId;\r\n\r\n let bindGroups = this._bindGroups[key];\r\n\r\n if (!bindGroups) {\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts[0];\r\n bindGroups = this._bindGroups[key] = [];\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[0],\r\n entries: [],\r\n })\r\n );\r\n if (!WebGPUShaderProcessingContext._SimplifiedKnownBindings) {\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[1],\r\n entries: [],\r\n })\r\n );\r\n }\r\n bindGroups.push(\r\n this._device.createBindGroup({\r\n layout: bindGroupLayouts[WebGPUShaderProcessingContext._SimplifiedKnownBindings ? 1 : 2],\r\n entries: [\r\n {\r\n binding: 0,\r\n resource: {\r\n buffer: bufferInternals.underlyingResource,\r\n size: bufferInternals.capacity,\r\n },\r\n },\r\n {\r\n binding: 1,\r\n resource: {\r\n buffer: bufferLeftOver.underlyingResource,\r\n size: bufferLeftOver.capacity,\r\n },\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n\r\n renderPass2.setPipeline(pipeline);\r\n for (let i = 0; i < bindGroups.length; ++i) {\r\n renderPass2.setBindGroup(i, bindGroups[i]);\r\n }\r\n renderPass2.draw(4, 1, 0, 0);\r\n\r\n if (!renderPass) {\r\n bundle = (renderPass2 as GPURenderBundleEncoder).finish();\r\n this._bundleCache[bundleKey!] = bundle;\r\n }\r\n\r\n return bundle;\r\n }\r\n}\r\n"]}
@@ -33,7 +33,7 @@ export declare class WebGPUHardwareTexture implements HardwareTextureWrapper {
33
33
  textureAdditionalUsages: number;
34
34
  constructor(existingTexture?: Nullable<GPUTexture>);
35
35
  set(hardwareTexture: GPUTexture): void;
36
- setUsage(_textureSource: number, generateMipMaps: boolean, isCube: boolean, width: number, height: number): void;
36
+ setUsage(_textureSource: number, generateMipMaps: boolean, is2DArray: boolean, isCube: boolean, is3D: boolean, width: number, height: number, depth: number): void;
37
37
  createView(descriptor?: GPUTextureViewDescriptor, createViewForWriting?: boolean): void;
38
38
  reset(): void;
39
39
  release(): void;
@@ -1,5 +1,7 @@
1
1
  import { Scalar } from "../../Maths/math.scalar.js";
2
+ // eslint-disable-next-line @typescript-eslint/naming-convention
2
3
  import * as WebGPUConstants from "./webgpuConstants.js";
4
+ import { WebGPUTextureHelper } from "./webgpuTextureHelper.js";
3
5
  /** @internal */
4
6
  export class WebGPUHardwareTexture {
5
7
  get underlyingResource() {
@@ -38,15 +40,31 @@ export class WebGPUHardwareTexture {
38
40
  set(hardwareTexture) {
39
41
  this._webgpuTexture = hardwareTexture;
40
42
  }
41
- setUsage(_textureSource, generateMipMaps, isCube, width, height) {
43
+ setUsage(_textureSource, generateMipMaps, is2DArray, isCube, is3D, width, height, depth) {
44
+ let viewDimension = WebGPUConstants.TextureViewDimension.E2d;
45
+ let arrayLayerCount = 1;
46
+ if (isCube) {
47
+ viewDimension = is2DArray ? WebGPUConstants.TextureViewDimension.CubeArray : WebGPUConstants.TextureViewDimension.Cube;
48
+ arrayLayerCount = 6 * (depth || 1);
49
+ }
50
+ else if (is3D) {
51
+ viewDimension = WebGPUConstants.TextureViewDimension.E3d;
52
+ }
53
+ else if (is2DArray) {
54
+ viewDimension = WebGPUConstants.TextureViewDimension.E2dArray;
55
+ arrayLayerCount = depth;
56
+ }
57
+ const format = WebGPUTextureHelper.GetDepthFormatOnly(this.format);
58
+ const aspect = WebGPUTextureHelper.HasDepthAndStencilAspects(this.format) ? WebGPUConstants.TextureAspect.DepthOnly : WebGPUConstants.TextureAspect.All;
42
59
  this.createView({
43
- format: this.format,
44
- dimension: isCube ? WebGPUConstants.TextureViewDimension.Cube : WebGPUConstants.TextureViewDimension.E2d,
60
+ label: `TextureView${is3D ? "3D" : isCube ? "Cube" : "2D"}${is2DArray ? "_Array" + arrayLayerCount : ""}_${width}x${height}_${generateMipMaps ? "wmips" : "womips"}_${this.format}_${viewDimension}`,
61
+ format,
62
+ dimension: viewDimension,
45
63
  mipLevelCount: generateMipMaps ? Scalar.ILog2(Math.max(width, height)) + 1 : 1,
46
64
  baseArrayLayer: 0,
47
65
  baseMipLevel: 0,
48
- arrayLayerCount: isCube ? 6 : 1,
49
- aspect: WebGPUConstants.TextureAspect.All,
66
+ arrayLayerCount,
67
+ aspect,
50
68
  });
51
69
  }
52
70
  createView(descriptor, createViewForWriting = false) {
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { HardwareTextureWrapper } from \"../../Materials/Textures/hardwareTextureWrapper\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport type { Nullable } from \"../../types\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUHardwareTexture implements HardwareTextureWrapper {\r\n /**\r\n * Cache of RenderPassDescriptor and BindGroup used when generating mipmaps (see WebGPUTextureHelper.generateMipmaps)\r\n * @internal\r\n */\r\n public _mipmapGenRenderPassDescr: GPURenderPassDescriptor[][];\r\n /** @internal */\r\n public _mipmapGenBindGroup: GPUBindGroup[][];\r\n\r\n /**\r\n * Cache for the invertYPreMultiplyAlpha function (see WebGPUTextureHelper)\r\n * @internal\r\n */\r\n public _copyInvertYTempTexture?: GPUTexture;\r\n /** @internal */\r\n public _copyInvertYRenderPassDescr: GPURenderPassDescriptor;\r\n /** @internal */\r\n public _copyInvertYBindGroup: GPUBindGroup;\r\n /** @internal */\r\n public _copyInvertYBindGroupWithOfst: GPUBindGroup;\r\n\r\n private _webgpuTexture: Nullable<GPUTexture>;\r\n // There can be multiple MSAA textures for a single WebGPU texture because different layers of a 2DArrayTexture / 3DTexture\r\n // or different faces of a cube texture can be bound to different render targets at the same time (in a multi RenderTargetWrapper)\r\n private _webgpuMSAATexture: Nullable<GPUTexture[]>;\r\n\r\n public get underlyingResource(): Nullable<GPUTexture> {\r\n return this._webgpuTexture;\r\n }\r\n\r\n public getMSAATexture(index = 0): Nullable<GPUTexture> {\r\n return this._webgpuMSAATexture?.[index] ?? null;\r\n }\r\n\r\n public setMSAATexture(texture: GPUTexture, index = -1) {\r\n if (!this._webgpuMSAATexture) {\r\n this._webgpuMSAATexture = [];\r\n }\r\n\r\n if (index === -1) {\r\n index = this._webgpuMSAATexture.length;\r\n }\r\n\r\n this._webgpuMSAATexture![index] = texture;\r\n }\r\n\r\n public releaseMSAATexture() {\r\n if (this._webgpuMSAATexture) {\r\n for (const texture of this._webgpuMSAATexture) {\r\n texture?.destroy();\r\n }\r\n this._webgpuMSAATexture = null;\r\n }\r\n }\r\n\r\n public view: Nullable<GPUTextureView>;\r\n public viewForWriting: Nullable<GPUTextureView>;\r\n public format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n public textureUsages = 0;\r\n public textureAdditionalUsages = 0;\r\n\r\n constructor(existingTexture: Nullable<GPUTexture> = null) {\r\n this._webgpuTexture = existingTexture;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public set(hardwareTexture: GPUTexture): void {\r\n this._webgpuTexture = hardwareTexture;\r\n }\r\n\r\n public setUsage(_textureSource: number, generateMipMaps: boolean, isCube: boolean, width: number, height: number): void {\r\n this.createView({\r\n format: this.format,\r\n dimension: isCube ? WebGPUConstants.TextureViewDimension.Cube : WebGPUConstants.TextureViewDimension.E2d,\r\n mipLevelCount: generateMipMaps ? Scalar.ILog2(Math.max(width, height)) + 1 : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount: isCube ? 6 : 1,\r\n aspect: WebGPUConstants.TextureAspect.All,\r\n });\r\n }\r\n\r\n public createView(descriptor?: GPUTextureViewDescriptor, createViewForWriting = false): void {\r\n this.view = this._webgpuTexture!.createView(descriptor);\r\n if (createViewForWriting && descriptor) {\r\n const saveNumMipMaps = descriptor.mipLevelCount;\r\n descriptor.mipLevelCount = 1;\r\n this.viewForWriting = this._webgpuTexture!.createView(descriptor);\r\n descriptor.mipLevelCount = saveNumMipMaps;\r\n }\r\n }\r\n\r\n public reset(): void {\r\n this._webgpuTexture = null;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public release(): void {\r\n this._webgpuTexture?.destroy();\r\n this.releaseMSAATexture();\r\n this._copyInvertYTempTexture?.destroy();\r\n this.reset();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuHardwareTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuHardwareTexture.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\r\n/* eslint-disable babylonjs/available */\r\nimport type { HardwareTextureWrapper } from \"../../Materials/Textures/hardwareTextureWrapper\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport type { Nullable } from \"../../types\";\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { WebGPUTextureHelper } from \"./webgpuTextureHelper\";\r\n\r\n/** @internal */\r\nexport class WebGPUHardwareTexture implements HardwareTextureWrapper {\r\n /**\r\n * Cache of RenderPassDescriptor and BindGroup used when generating mipmaps (see WebGPUTextureHelper.generateMipmaps)\r\n * @internal\r\n */\r\n public _mipmapGenRenderPassDescr: GPURenderPassDescriptor[][];\r\n /** @internal */\r\n public _mipmapGenBindGroup: GPUBindGroup[][];\r\n\r\n /**\r\n * Cache for the invertYPreMultiplyAlpha function (see WebGPUTextureHelper)\r\n * @internal\r\n */\r\n public _copyInvertYTempTexture?: GPUTexture;\r\n /** @internal */\r\n public _copyInvertYRenderPassDescr: GPURenderPassDescriptor;\r\n /** @internal */\r\n public _copyInvertYBindGroup: GPUBindGroup;\r\n /** @internal */\r\n public _copyInvertYBindGroupWithOfst: GPUBindGroup;\r\n\r\n private _webgpuTexture: Nullable<GPUTexture>;\r\n // There can be multiple MSAA textures for a single WebGPU texture because different layers of a 2DArrayTexture / 3DTexture\r\n // or different faces of a cube texture can be bound to different render targets at the same time (in a multi RenderTargetWrapper)\r\n private _webgpuMSAATexture: Nullable<GPUTexture[]>;\r\n\r\n public get underlyingResource(): Nullable<GPUTexture> {\r\n return this._webgpuTexture;\r\n }\r\n\r\n public getMSAATexture(index = 0): Nullable<GPUTexture> {\r\n return this._webgpuMSAATexture?.[index] ?? null;\r\n }\r\n\r\n public setMSAATexture(texture: GPUTexture, index = -1) {\r\n if (!this._webgpuMSAATexture) {\r\n this._webgpuMSAATexture = [];\r\n }\r\n\r\n if (index === -1) {\r\n index = this._webgpuMSAATexture.length;\r\n }\r\n\r\n this._webgpuMSAATexture![index] = texture;\r\n }\r\n\r\n public releaseMSAATexture() {\r\n if (this._webgpuMSAATexture) {\r\n for (const texture of this._webgpuMSAATexture) {\r\n texture?.destroy();\r\n }\r\n this._webgpuMSAATexture = null;\r\n }\r\n }\r\n\r\n public view: Nullable<GPUTextureView>;\r\n public viewForWriting: Nullable<GPUTextureView>;\r\n public format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n public textureUsages = 0;\r\n public textureAdditionalUsages = 0;\r\n\r\n constructor(existingTexture: Nullable<GPUTexture> = null) {\r\n this._webgpuTexture = existingTexture;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public set(hardwareTexture: GPUTexture): void {\r\n this._webgpuTexture = hardwareTexture;\r\n }\r\n\r\n public setUsage(_textureSource: number, generateMipMaps: boolean, is2DArray: boolean, isCube: boolean, is3D: boolean, width: number, height: number, depth: number): void {\r\n let viewDimension: GPUTextureViewDimension = WebGPUConstants.TextureViewDimension.E2d;\r\n let arrayLayerCount = 1;\r\n if (isCube) {\r\n viewDimension = is2DArray ? WebGPUConstants.TextureViewDimension.CubeArray : WebGPUConstants.TextureViewDimension.Cube;\r\n arrayLayerCount = 6 * (depth || 1);\r\n } else if (is3D) {\r\n viewDimension = WebGPUConstants.TextureViewDimension.E3d;\r\n } else if (is2DArray) {\r\n viewDimension = WebGPUConstants.TextureViewDimension.E2dArray;\r\n arrayLayerCount = depth;\r\n }\r\n\r\n const format = WebGPUTextureHelper.GetDepthFormatOnly(this.format);\r\n const aspect = WebGPUTextureHelper.HasDepthAndStencilAspects(this.format) ? WebGPUConstants.TextureAspect.DepthOnly : WebGPUConstants.TextureAspect.All;\r\n\r\n this.createView({\r\n label: `TextureView${is3D ? \"3D\" : isCube ? \"Cube\" : \"2D\"}${is2DArray ? \"_Array\" + arrayLayerCount : \"\"}_${width}x${height}_${generateMipMaps ? \"wmips\" : \"womips\"}_${\r\n this.format\r\n }_${viewDimension}`,\r\n format,\r\n dimension: viewDimension,\r\n mipLevelCount: generateMipMaps ? Scalar.ILog2(Math.max(width, height)) + 1 : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount,\r\n aspect,\r\n });\r\n }\r\n\r\n public createView(descriptor?: GPUTextureViewDescriptor, createViewForWriting = false): void {\r\n this.view = this._webgpuTexture!.createView(descriptor);\r\n if (createViewForWriting && descriptor) {\r\n const saveNumMipMaps = descriptor.mipLevelCount;\r\n descriptor.mipLevelCount = 1;\r\n this.viewForWriting = this._webgpuTexture!.createView(descriptor);\r\n descriptor.mipLevelCount = saveNumMipMaps;\r\n }\r\n }\r\n\r\n public reset(): void {\r\n this._webgpuTexture = null;\r\n this._webgpuMSAATexture = null;\r\n this.view = null;\r\n this.viewForWriting = null;\r\n }\r\n\r\n public release(): void {\r\n this._webgpuTexture?.destroy();\r\n this.releaseMSAATexture();\r\n this._copyInvertYTempTexture?.destroy();\r\n this.reset();\r\n }\r\n}\r\n"]}
@@ -25,11 +25,10 @@ export class WebGPUPipelineContext {
25
25
  }
26
26
  _fillEffectInformation(effect, uniformBuffersNames, uniformsNames, uniforms, samplerList, samplers, attributesNames, attributes) {
27
27
  const engine = this.engine;
28
- // Prevent Memory Leak by reducing the number of string, refer to the string instead of copy.
29
- effect._fragmentSourceCode = "";
30
- effect._vertexSourceCode = "";
31
- // this._fragmentSourceCodeOverride = "";
32
- // this._vertexSourceCodeOverride = "";
28
+ if (engine._doNotHandleContextLost) {
29
+ effect._fragmentSourceCode = "";
30
+ effect._vertexSourceCode = "";
31
+ }
33
32
  const foundSamplers = this.shaderProcessingContext.availableTextures;
34
33
  let index;
35
34
  for (index = 0; index < samplerList.length; index++) {
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuPipelineContext.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuPipelineContext.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\n/* eslint-disable jsdoc/require-jsdoc */\r\nimport type { IPipelineContext } from \"../IPipelineContext\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { Effect } from \"../../Materials/effect\";\r\nimport type { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport type { IMatrixLike, IVector2Like, IVector3Like, IVector4Like, IColor3Like, IColor4Like, IQuaternionLike } from \"../../Maths/math.like\";\r\nimport { WebGPUShaderProcessor } from \"./webgpuShaderProcessor\";\r\n\r\n/** @internal */\r\nexport interface IWebGPURenderPipelineStageDescriptor {\r\n vertexStage: GPUProgrammableStage;\r\n fragmentStage?: GPUProgrammableStage;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUPipelineContext implements IPipelineContext {\r\n public engine: WebGPUEngine;\r\n\r\n public shaderProcessingContext: WebGPUShaderProcessingContext;\r\n\r\n protected _leftOverUniformsByName: { [name: string]: string };\r\n\r\n // Property used to handle vertex buffers with int values when the shader code expect float values.\r\n public vertexBufferKindToType: { [kind: string]: number };\r\n\r\n public sources: {\r\n vertex: string;\r\n fragment: string;\r\n rawVertex: string;\r\n rawFragment: string;\r\n };\r\n\r\n public stages: Nullable<IWebGPURenderPipelineStageDescriptor>;\r\n\r\n // The field is indexed by textureState. See @WebGPUMaterialContext.textureState for more information.\r\n public bindGroupLayouts: { [textureState: number]: GPUBindGroupLayout[] } = {};\r\n\r\n /**\r\n * Stores the left-over uniform buffer\r\n */\r\n public uniformBuffer: Nullable<UniformBuffer>;\r\n\r\n // Default implementation.\r\n public onCompiled?: () => void;\r\n\r\n public get isAsync() {\r\n return false;\r\n }\r\n\r\n public get isReady(): boolean {\r\n if (this.stages) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _name: string;\r\n\r\n constructor(shaderProcessingContext: WebGPUShaderProcessingContext, engine: WebGPUEngine) {\r\n this._name = \"unnamed\";\r\n this.shaderProcessingContext = shaderProcessingContext;\r\n this._leftOverUniformsByName = {};\r\n this.engine = engine;\r\n this.vertexBufferKindToType = {};\r\n }\r\n\r\n public _handlesSpectorRebuildCallback(): void {\r\n // Nothing to do yet for spector.\r\n }\r\n\r\n public _fillEffectInformation(\r\n effect: Effect,\r\n uniformBuffersNames: { [key: string]: number },\r\n uniformsNames: string[],\r\n uniforms: { [key: string]: Nullable<WebGLUniformLocation> },\r\n samplerList: string[],\r\n samplers: { [key: string]: number },\r\n attributesNames: string[],\r\n attributes: number[]\r\n ) {\r\n const engine = this.engine;\r\n\r\n // Prevent Memory Leak by reducing the number of string, refer to the string instead of copy.\r\n effect._fragmentSourceCode = \"\";\r\n effect._vertexSourceCode = \"\";\r\n // this._fragmentSourceCodeOverride = \"\";\r\n // this._vertexSourceCodeOverride = \"\";\r\n\r\n const foundSamplers = this.shaderProcessingContext.availableTextures;\r\n let index: number;\r\n for (index = 0; index < samplerList.length; index++) {\r\n const name = samplerList[index];\r\n const sampler = foundSamplers[samplerList[index]];\r\n\r\n if (sampler == null || sampler == undefined) {\r\n samplerList.splice(index, 1);\r\n index--;\r\n } else {\r\n samplers[name] = index;\r\n }\r\n }\r\n\r\n for (const attr of engine.getAttributes(this, attributesNames)) {\r\n attributes.push(attr);\r\n }\r\n\r\n // Build the uniform layout for the left over uniforms.\r\n this.buildUniformLayout();\r\n\r\n const attributeNamesFromEffect: string[] = [];\r\n const attributeLocationsFromEffect: number[] = [];\r\n for (index = 0; index < attributesNames.length; index++) {\r\n const location = attributes[index];\r\n if (location >= 0) {\r\n attributeNamesFromEffect.push(attributesNames[index]);\r\n attributeLocationsFromEffect.push(location);\r\n }\r\n }\r\n this.shaderProcessingContext.attributeNamesFromEffect = attributeNamesFromEffect;\r\n this.shaderProcessingContext.attributeLocationsFromEffect = attributeLocationsFromEffect;\r\n }\r\n\r\n /** @internal */\r\n /**\r\n * Build the uniform buffer used in the material.\r\n */\r\n public buildUniformLayout(): void {\r\n if (!this.shaderProcessingContext.leftOverUniforms.length) {\r\n return;\r\n }\r\n\r\n this.uniformBuffer = new UniformBuffer(this.engine, undefined, undefined, \"leftOver-\" + this._name);\r\n\r\n for (const leftOverUniform of this.shaderProcessingContext.leftOverUniforms) {\r\n const type = leftOverUniform.type.replace(/^(.*?)(<.*>)?$/, \"$1\");\r\n const size = WebGPUShaderProcessor.UniformSizes[type];\r\n this.uniformBuffer.addUniform(leftOverUniform.name, size, leftOverUniform.length);\r\n this._leftOverUniformsByName[leftOverUniform.name] = leftOverUniform.type;\r\n }\r\n\r\n this.uniformBuffer.create();\r\n }\r\n\r\n /**\r\n * Release all associated resources.\r\n **/\r\n public dispose() {\r\n if (this.uniformBuffer) {\r\n this.uniformBuffer.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Sets an integer value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value Value to be set.\r\n */\r\n public setInt(uniformName: string, value: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt(uniformName, value);\r\n }\r\n\r\n /**\r\n * Sets an int2 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int2.\r\n * @param y Second int in int2.\r\n */\r\n public setInt2(uniformName: string, x: number, y: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt2(uniformName, x, y);\r\n }\r\n\r\n /**\r\n * Sets an int3 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int3.\r\n * @param y Second int in int3.\r\n * @param z Third int in int3.\r\n */\r\n public setInt3(uniformName: string, x: number, y: number, z: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt3(uniformName, x, y, z);\r\n }\r\n\r\n /**\r\n * Sets an int4 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int4.\r\n * @param y Second int in int4.\r\n * @param z Third int in int4.\r\n * @param w Fourth int in int4.\r\n */\r\n public setInt4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt4(uniformName, x, y, z, w);\r\n }\r\n\r\n /**\r\n * Sets an int array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray(uniformName: string, array: Int32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray2(uniformName: string, array: Int32Array): void {\r\n this.setIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray3(uniformName: string, array: Int32Array): void {\r\n this.setIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray4(uniformName: string, array: Int32Array): void {\r\n this.setIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned integer value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value Value to be set.\r\n */\r\n public setUInt(uniformName: string, value: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt(uniformName, value);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int2 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First unsigned int in uint2.\r\n * @param y Second unsigned int in uint2.\r\n */\r\n public setUInt2(uniformName: string, x: number, y: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt2(uniformName, x, y);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int3 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First unsigned int in uint3.\r\n * @param y Second unsigned int in uint3.\r\n * @param z Third unsigned int in uint3.\r\n */\r\n public setUInt3(uniformName: string, x: number, y: number, z: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt3(uniformName, x, y, z);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int4 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First unsigned int in uint4.\r\n * @param y Second unsigned int in uint4.\r\n * @param z Third unsigned int in uint4.\r\n * @param w Fourth unsigned int in uint4.\r\n */\r\n public setUInt4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt4(uniformName, x, y, z, w);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray(uniformName: string, array: Uint32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray2(uniformName: string, array: Uint32Array): void {\r\n this.setUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray3(uniformName: string, array: Uint32Array): void {\r\n this.setUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray4(uniformName: string, array: Uint32Array): void {\r\n this.setUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray(uniformName: string, array: number[]): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray2(uniformName: string, array: number[]): void {\r\n this.setArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n * @returns this effect.\r\n */\r\n public setArray3(uniformName: string, array: number[]): void {\r\n this.setArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray4(uniformName: string, array: number[]): void {\r\n this.setArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets matrices on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrices matrices to be set.\r\n */\r\n public setMatrices(uniformName: string, matrices: Float32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrices(uniformName, matrices);\r\n }\r\n\r\n /**\r\n * Sets matrix on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix(uniformName: string, matrix: IMatrixLike): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrix(uniformName, matrix);\r\n }\r\n\r\n /**\r\n * Sets a 3x3 matrix on a uniform variable. (Specified as [1,2,3,4,5,6,7,8,9] will result in [1,2,3][4,5,6][7,8,9] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix3x3(uniformName: string, matrix: Float32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrix3x3(uniformName, matrix);\r\n }\r\n\r\n /**\r\n * Sets a 2x2 matrix on a uniform variable. (Specified as [1,2,3,4] will result in [1,2][3,4] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix2x2(uniformName: string, matrix: Float32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrix2x2(uniformName, matrix);\r\n }\r\n\r\n /**\r\n * Sets a float on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value value to be set.\r\n * @returns this effect.\r\n */\r\n public setFloat(uniformName: string, value: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat(uniformName, value);\r\n }\r\n\r\n /**\r\n * Sets a Vector2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector2 vector2 to be set.\r\n */\r\n public setVector2(uniformName: string, vector2: IVector2Like): void {\r\n this.setFloat2(uniformName, vector2.x, vector2.y);\r\n }\r\n\r\n /**\r\n * Sets a float2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float2.\r\n * @param y Second float in float2.\r\n */\r\n public setFloat2(uniformName: string, x: number, y: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat2(uniformName, x, y);\r\n }\r\n\r\n /**\r\n * Sets a Vector3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector3 Value to be set.\r\n */\r\n public setVector3(uniformName: string, vector3: IVector3Like): void {\r\n this.setFloat3(uniformName, vector3.x, vector3.y, vector3.z);\r\n }\r\n\r\n /**\r\n * Sets a float3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float3.\r\n * @param y Second float in float3.\r\n * @param z Third float in float3.\r\n */\r\n public setFloat3(uniformName: string, x: number, y: number, z: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat3(uniformName, x, y, z);\r\n }\r\n\r\n /**\r\n * Sets a Vector4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector4 Value to be set.\r\n */\r\n public setVector4(uniformName: string, vector4: IVector4Like): void {\r\n this.setFloat4(uniformName, vector4.x, vector4.y, vector4.z, vector4.w);\r\n }\r\n\r\n /**\r\n * Sets a Quaternion on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param quaternion Value to be set.\r\n */\r\n public setQuaternion(uniformName: string, quaternion: IQuaternionLike): void {\r\n this.setFloat4(uniformName, quaternion.x, quaternion.y, quaternion.z, quaternion.w);\r\n }\r\n\r\n /**\r\n * Sets a float4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float4.\r\n * @param y Second float in float4.\r\n * @param z Third float in float4.\r\n * @param w Fourth float in float4.\r\n * @returns this effect.\r\n */\r\n public setFloat4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat4(uniformName, x, y, z, w);\r\n }\r\n\r\n /**\r\n * Sets a Color3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n */\r\n public setColor3(uniformName: string, color3: IColor3Like): void {\r\n this.setFloat3(uniformName, color3.r, color3.g, color3.b);\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n * @param alpha Alpha value to be set.\r\n */\r\n public setColor4(uniformName: string, color3: IColor3Like, alpha: number): void {\r\n this.setFloat4(uniformName, color3.r, color3.g, color3.b, alpha);\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable\r\n * @param uniformName defines the name of the variable\r\n * @param color4 defines the value to be set\r\n */\r\n public setDirectColor4(uniformName: string, color4: IColor4Like): void {\r\n this.setFloat4(uniformName, color4.r, color4.g, color4.b, color4.a);\r\n }\r\n\r\n public _getVertexShaderCode(): string | null {\r\n return this.sources?.vertex;\r\n }\r\n\r\n public _getFragmentShaderCode(): string | null {\r\n return this.sources?.fragment;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuPipelineContext.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuPipelineContext.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;IA8B9B,IAAW,OAAO;QACd,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAKD,YAAY,uBAAsD,EAAE,MAAoB;QA1BxF,sGAAsG;QAC/F,qBAAgB,GAAqD,EAAE,CAAC;QA0B3E,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;IACrC,CAAC;IAEM,8BAA8B;QACjC,iCAAiC;IACrC,CAAC;IAEM,sBAAsB,CACzB,MAAc,EACd,mBAA8C,EAC9C,aAAuB,EACvB,QAA2D,EAC3D,WAAqB,EACrB,QAAmC,EACnC,eAAyB,EACzB,UAAoB;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAI,MAAM,CAAC,uBAAuB,EAAE;YAChC,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAChC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC;SACjC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;QACrE,IAAI,KAAa,CAAC;QAClB,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAElD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,SAAS,EAAE;gBACzC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7B,KAAK,EAAE,CAAC;aACX;iBAAM;gBACH,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAC1B;SACJ;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;YAC5D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;QAED,uDAAuD;QACvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,MAAM,wBAAwB,GAAa,EAAE,CAAC;QAC9C,MAAM,4BAA4B,GAAa,EAAE,CAAC;QAClD,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACf,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/C;SACJ;QACD,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACjF,IAAI,CAAC,uBAAuB,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;IAC7F,CAAC;IAED,gBAAgB;IAChB;;OAEG;IACI,kBAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACvD,OAAO;SACV;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAEpG,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,EAAE;YACzE,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YAClF,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC;SAC7E;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED;;QAEI;IACG,OAAO;QACV,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;SAChC;IACL,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAmB,EAAE,KAAa;QAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS;QACpD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;OAMG;IACI,OAAO,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC/D,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACI,OAAO,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC1E,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,WAAmB,EAAE,KAAiB;QACrD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,WAAmB,EAAE,KAAiB;QACtD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,WAAmB,EAAE,KAAiB;QACtD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,WAAmB,EAAE,KAAiB;QACtD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,WAAmB,EAAE,KAAa;QAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS;QACrD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;OAMG;IACI,QAAQ,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAChE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACI,QAAQ,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC3E,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,WAAmB,EAAE,KAAkB;QACvD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,WAAmB,EAAE,KAAkB;QACxD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,WAAmB,EAAE,KAAkB;QACxD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,WAAmB,EAAE,KAAkB;QACxD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,WAAmB,EAAE,KAAe;QAChD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,WAAmB,EAAE,KAAe;QACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACI,SAAS,CAAC,WAAmB,EAAE,KAAe;QACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,WAAmB,EAAE,KAAe;QACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,WAAmB,EAAE,QAAsB;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,WAAmB,EAAE,MAAmB;QACrD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,WAAmB,EAAE,MAAoB;QACzD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,WAAmB,EAAE,MAAoB;QACzD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,WAAmB,EAAE,KAAa;QAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,WAAmB,EAAE,OAAqB;QACxD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACI,SAAS,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS;QACtD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,WAAmB,EAAE,OAAqB;QACxD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACI,SAAS,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QACjE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,WAAmB,EAAE,OAAqB;QACxD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,WAAmB,EAAE,UAA2B;QACjE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;;;;;;OAQG;IACI,SAAS,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC5E,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO;SACV;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,WAAmB,EAAE,MAAmB;QACrD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACI,SAAS,CAAC,WAAmB,EAAE,MAAmB,EAAE,KAAa;QACpE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,WAAmB,EAAE,MAAmB;QAC3D,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAEM,oBAAoB;;QACvB,OAAO,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAC;IAChC,CAAC;IAEM,sBAAsB;;QACzB,OAAO,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,CAAC;IAClC,CAAC;CACJ","sourcesContent":["/* eslint-disable babylonjs/available */\r\n/* eslint-disable jsdoc/require-jsdoc */\r\nimport type { IPipelineContext } from \"../IPipelineContext\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { Effect } from \"../../Materials/effect\";\r\nimport type { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport type { IMatrixLike, IVector2Like, IVector3Like, IVector4Like, IColor3Like, IColor4Like, IQuaternionLike } from \"../../Maths/math.like\";\r\nimport { WebGPUShaderProcessor } from \"./webgpuShaderProcessor\";\r\n\r\n/** @internal */\r\nexport interface IWebGPURenderPipelineStageDescriptor {\r\n vertexStage: GPUProgrammableStage;\r\n fragmentStage?: GPUProgrammableStage;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUPipelineContext implements IPipelineContext {\r\n public engine: WebGPUEngine;\r\n\r\n public shaderProcessingContext: WebGPUShaderProcessingContext;\r\n\r\n protected _leftOverUniformsByName: { [name: string]: string };\r\n\r\n // Property used to handle vertex buffers with int values when the shader code expect float values.\r\n public vertexBufferKindToType: { [kind: string]: number };\r\n\r\n public sources: {\r\n vertex: string;\r\n fragment: string;\r\n rawVertex: string;\r\n rawFragment: string;\r\n };\r\n\r\n public stages: Nullable<IWebGPURenderPipelineStageDescriptor>;\r\n\r\n // The field is indexed by textureState. See @WebGPUMaterialContext.textureState for more information.\r\n public bindGroupLayouts: { [textureState: number]: GPUBindGroupLayout[] } = {};\r\n\r\n /**\r\n * Stores the left-over uniform buffer\r\n */\r\n public uniformBuffer: Nullable<UniformBuffer>;\r\n\r\n // Default implementation.\r\n public onCompiled?: () => void;\r\n\r\n public get isAsync() {\r\n return false;\r\n }\r\n\r\n public get isReady(): boolean {\r\n if (this.stages) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public _name: string;\r\n\r\n constructor(shaderProcessingContext: WebGPUShaderProcessingContext, engine: WebGPUEngine) {\r\n this._name = \"unnamed\";\r\n this.shaderProcessingContext = shaderProcessingContext;\r\n this._leftOverUniformsByName = {};\r\n this.engine = engine;\r\n this.vertexBufferKindToType = {};\r\n }\r\n\r\n public _handlesSpectorRebuildCallback(): void {\r\n // Nothing to do yet for spector.\r\n }\r\n\r\n public _fillEffectInformation(\r\n effect: Effect,\r\n uniformBuffersNames: { [key: string]: number },\r\n uniformsNames: string[],\r\n uniforms: { [key: string]: Nullable<WebGLUniformLocation> },\r\n samplerList: string[],\r\n samplers: { [key: string]: number },\r\n attributesNames: string[],\r\n attributes: number[]\r\n ) {\r\n const engine = this.engine;\r\n\r\n if (engine._doNotHandleContextLost) {\r\n effect._fragmentSourceCode = \"\";\r\n effect._vertexSourceCode = \"\";\r\n }\r\n\r\n const foundSamplers = this.shaderProcessingContext.availableTextures;\r\n let index: number;\r\n for (index = 0; index < samplerList.length; index++) {\r\n const name = samplerList[index];\r\n const sampler = foundSamplers[samplerList[index]];\r\n\r\n if (sampler == null || sampler == undefined) {\r\n samplerList.splice(index, 1);\r\n index--;\r\n } else {\r\n samplers[name] = index;\r\n }\r\n }\r\n\r\n for (const attr of engine.getAttributes(this, attributesNames)) {\r\n attributes.push(attr);\r\n }\r\n\r\n // Build the uniform layout for the left over uniforms.\r\n this.buildUniformLayout();\r\n\r\n const attributeNamesFromEffect: string[] = [];\r\n const attributeLocationsFromEffect: number[] = [];\r\n for (index = 0; index < attributesNames.length; index++) {\r\n const location = attributes[index];\r\n if (location >= 0) {\r\n attributeNamesFromEffect.push(attributesNames[index]);\r\n attributeLocationsFromEffect.push(location);\r\n }\r\n }\r\n this.shaderProcessingContext.attributeNamesFromEffect = attributeNamesFromEffect;\r\n this.shaderProcessingContext.attributeLocationsFromEffect = attributeLocationsFromEffect;\r\n }\r\n\r\n /** @internal */\r\n /**\r\n * Build the uniform buffer used in the material.\r\n */\r\n public buildUniformLayout(): void {\r\n if (!this.shaderProcessingContext.leftOverUniforms.length) {\r\n return;\r\n }\r\n\r\n this.uniformBuffer = new UniformBuffer(this.engine, undefined, undefined, \"leftOver-\" + this._name);\r\n\r\n for (const leftOverUniform of this.shaderProcessingContext.leftOverUniforms) {\r\n const type = leftOverUniform.type.replace(/^(.*?)(<.*>)?$/, \"$1\");\r\n const size = WebGPUShaderProcessor.UniformSizes[type];\r\n this.uniformBuffer.addUniform(leftOverUniform.name, size, leftOverUniform.length);\r\n this._leftOverUniformsByName[leftOverUniform.name] = leftOverUniform.type;\r\n }\r\n\r\n this.uniformBuffer.create();\r\n }\r\n\r\n /**\r\n * Release all associated resources.\r\n **/\r\n public dispose() {\r\n if (this.uniformBuffer) {\r\n this.uniformBuffer.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Sets an integer value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value Value to be set.\r\n */\r\n public setInt(uniformName: string, value: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt(uniformName, value);\r\n }\r\n\r\n /**\r\n * Sets an int2 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int2.\r\n * @param y Second int in int2.\r\n */\r\n public setInt2(uniformName: string, x: number, y: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt2(uniformName, x, y);\r\n }\r\n\r\n /**\r\n * Sets an int3 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int3.\r\n * @param y Second int in int3.\r\n * @param z Third int in int3.\r\n */\r\n public setInt3(uniformName: string, x: number, y: number, z: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt3(uniformName, x, y, z);\r\n }\r\n\r\n /**\r\n * Sets an int4 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int4.\r\n * @param y Second int in int4.\r\n * @param z Third int in int4.\r\n * @param w Fourth int in int4.\r\n */\r\n public setInt4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateInt4(uniformName, x, y, z, w);\r\n }\r\n\r\n /**\r\n * Sets an int array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray(uniformName: string, array: Int32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray2(uniformName: string, array: Int32Array): void {\r\n this.setIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray3(uniformName: string, array: Int32Array): void {\r\n this.setIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray4(uniformName: string, array: Int32Array): void {\r\n this.setIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned integer value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value Value to be set.\r\n */\r\n public setUInt(uniformName: string, value: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt(uniformName, value);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int2 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First unsigned int in uint2.\r\n * @param y Second unsigned int in uint2.\r\n */\r\n public setUInt2(uniformName: string, x: number, y: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt2(uniformName, x, y);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int3 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First unsigned int in uint3.\r\n * @param y Second unsigned int in uint3.\r\n * @param z Third unsigned int in uint3.\r\n */\r\n public setUInt3(uniformName: string, x: number, y: number, z: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt3(uniformName, x, y, z);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int4 value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First unsigned int in uint4.\r\n * @param y Second unsigned int in uint4.\r\n * @param z Third unsigned int in uint4.\r\n * @param w Fourth unsigned int in uint4.\r\n */\r\n public setUInt4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUInt4(uniformName, x, y, z, w);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray(uniformName: string, array: Uint32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray2(uniformName: string, array: Uint32Array): void {\r\n this.setUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray3(uniformName: string, array: Uint32Array): void {\r\n this.setUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an unsigned int array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setUIntArray4(uniformName: string, array: Uint32Array): void {\r\n this.setUIntArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray(uniformName: string, array: number[]): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray2(uniformName: string, array: number[]): void {\r\n this.setArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n * @returns this effect.\r\n */\r\n public setArray3(uniformName: string, array: number[]): void {\r\n this.setArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets an array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray4(uniformName: string, array: number[]): void {\r\n this.setArray(uniformName, array);\r\n }\r\n\r\n /**\r\n * Sets matrices on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrices matrices to be set.\r\n */\r\n public setMatrices(uniformName: string, matrices: Float32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrices(uniformName, matrices);\r\n }\r\n\r\n /**\r\n * Sets matrix on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix(uniformName: string, matrix: IMatrixLike): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrix(uniformName, matrix);\r\n }\r\n\r\n /**\r\n * Sets a 3x3 matrix on a uniform variable. (Specified as [1,2,3,4,5,6,7,8,9] will result in [1,2,3][4,5,6][7,8,9] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix3x3(uniformName: string, matrix: Float32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrix3x3(uniformName, matrix);\r\n }\r\n\r\n /**\r\n * Sets a 2x2 matrix on a uniform variable. (Specified as [1,2,3,4] will result in [1,2][3,4] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix2x2(uniformName: string, matrix: Float32Array): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateMatrix2x2(uniformName, matrix);\r\n }\r\n\r\n /**\r\n * Sets a float on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value value to be set.\r\n * @returns this effect.\r\n */\r\n public setFloat(uniformName: string, value: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat(uniformName, value);\r\n }\r\n\r\n /**\r\n * Sets a Vector2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector2 vector2 to be set.\r\n */\r\n public setVector2(uniformName: string, vector2: IVector2Like): void {\r\n this.setFloat2(uniformName, vector2.x, vector2.y);\r\n }\r\n\r\n /**\r\n * Sets a float2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float2.\r\n * @param y Second float in float2.\r\n */\r\n public setFloat2(uniformName: string, x: number, y: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat2(uniformName, x, y);\r\n }\r\n\r\n /**\r\n * Sets a Vector3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector3 Value to be set.\r\n */\r\n public setVector3(uniformName: string, vector3: IVector3Like): void {\r\n this.setFloat3(uniformName, vector3.x, vector3.y, vector3.z);\r\n }\r\n\r\n /**\r\n * Sets a float3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float3.\r\n * @param y Second float in float3.\r\n * @param z Third float in float3.\r\n */\r\n public setFloat3(uniformName: string, x: number, y: number, z: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat3(uniformName, x, y, z);\r\n }\r\n\r\n /**\r\n * Sets a Vector4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector4 Value to be set.\r\n */\r\n public setVector4(uniformName: string, vector4: IVector4Like): void {\r\n this.setFloat4(uniformName, vector4.x, vector4.y, vector4.z, vector4.w);\r\n }\r\n\r\n /**\r\n * Sets a Quaternion on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param quaternion Value to be set.\r\n */\r\n public setQuaternion(uniformName: string, quaternion: IQuaternionLike): void {\r\n this.setFloat4(uniformName, quaternion.x, quaternion.y, quaternion.z, quaternion.w);\r\n }\r\n\r\n /**\r\n * Sets a float4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float4.\r\n * @param y Second float in float4.\r\n * @param z Third float in float4.\r\n * @param w Fourth float in float4.\r\n * @returns this effect.\r\n */\r\n public setFloat4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (!this.uniformBuffer || !this._leftOverUniformsByName[uniformName]) {\r\n return;\r\n }\r\n this.uniformBuffer.updateFloat4(uniformName, x, y, z, w);\r\n }\r\n\r\n /**\r\n * Sets a Color3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n */\r\n public setColor3(uniformName: string, color3: IColor3Like): void {\r\n this.setFloat3(uniformName, color3.r, color3.g, color3.b);\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n * @param alpha Alpha value to be set.\r\n */\r\n public setColor4(uniformName: string, color3: IColor3Like, alpha: number): void {\r\n this.setFloat4(uniformName, color3.r, color3.g, color3.b, alpha);\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable\r\n * @param uniformName defines the name of the variable\r\n * @param color4 defines the value to be set\r\n */\r\n public setDirectColor4(uniformName: string, color4: IColor4Like): void {\r\n this.setFloat4(uniformName, color4.r, color4.g, color4.b, color4.a);\r\n }\r\n\r\n public _getVertexShaderCode(): string | null {\r\n return this.sources?.vertex;\r\n }\r\n\r\n public _getFragmentShaderCode(): string | null {\r\n return this.sources?.fragment;\r\n }\r\n}\r\n"]}
@@ -12,7 +12,7 @@ export class WebGPUQuerySet {
12
12
  this._count = count;
13
13
  this._canUseMultipleBuffers = canUseMultipleBuffers;
14
14
  this._querySet = device.createQuerySet({
15
- label,
15
+ label: label !== null && label !== void 0 ? label : "QuerySet",
16
16
  type,
17
17
  count,
18
18
  });
@@ -44,13 +44,15 @@ export class WebGPUQuerySet {
44
44
  if (buffer === null) {
45
45
  return null;
46
46
  }
47
+ const engineId = this._engine.uniqueId;
47
48
  return buffer.mapAsync(WebGPUConstants.MapMode.Read).then(() => {
48
49
  const arrayBuf = new BigUint64Array(buffer.getMappedRange()).slice();
49
50
  buffer.unmap();
50
51
  this._dstBuffers[this._dstBuffers.length] = buffer;
51
52
  return arrayBuf;
52
53
  }, (err) => {
53
- if (this._engine.isDisposed) {
54
+ if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {
55
+ // Engine disposed or context loss/restoration
54
56
  return null;
55
57
  }
56
58
  throw err;
@@ -61,6 +63,7 @@ export class WebGPUQuerySet {
61
63
  if (buffer === null) {
62
64
  return null;
63
65
  }
66
+ const engineId = this._engine.uniqueId;
64
67
  return buffer.mapAsync(WebGPUConstants.MapMode.Read).then(() => {
65
68
  const arrayBuf = new BigUint64Array(buffer.getMappedRange());
66
69
  const value = Number(arrayBuf[0]);
@@ -68,7 +71,8 @@ export class WebGPUQuerySet {
68
71
  this._dstBuffers[this._dstBuffers.length] = buffer;
69
72
  return value;
70
73
  }, (err) => {
71
- if (this._engine.isDisposed) {
74
+ if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {
75
+ // Engine disposed or context loss/restoration
72
76
  return 0;
73
77
  }
74
78
  throw err;
@@ -79,6 +83,7 @@ export class WebGPUQuerySet {
79
83
  if (buffer === null) {
80
84
  return null;
81
85
  }
86
+ const engineId = this._engine.uniqueId;
82
87
  return buffer.mapAsync(WebGPUConstants.MapMode.Read).then(() => {
83
88
  const arrayBuf = new BigUint64Array(buffer.getMappedRange());
84
89
  const value = Number(arrayBuf[1] - arrayBuf[0]);
@@ -86,7 +91,8 @@ export class WebGPUQuerySet {
86
91
  this._dstBuffers[this._dstBuffers.length] = buffer;
87
92
  return value;
88
93
  }, (err) => {
89
- if (this._engine.isDisposed) {
94
+ if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {
95
+ // Engine disposed or context loss/restoration
90
96
  return 0;
91
97
  }
92
98
  throw err;