@babylonjs/core 6.34.1 → 6.34.3

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 (153) hide show
  1. package/Cameras/Inputs/followCameraMouseWheelInput.js +12 -9
  2. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  3. package/Cameras/Inputs/followCameraPointersInput.js +28 -9
  4. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  5. package/Cameras/followCameraInputsManager.js +2 -1
  6. package/Cameras/followCameraInputsManager.js.map +1 -1
  7. package/Compute/computeShader.d.ts +8 -2
  8. package/Compute/computeShader.js +5 -1
  9. package/Compute/computeShader.js.map +1 -1
  10. package/Debug/skeletonViewer.js +2 -1
  11. package/Debug/skeletonViewer.js.map +1 -1
  12. package/Engines/Extensions/engine.computeShader.d.ts +3 -1
  13. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  14. package/Engines/Extensions/engine.multiRender.js +3 -2
  15. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  16. package/Engines/Processors/shaderCodeInliner.js +15 -14
  17. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  18. package/Engines/WebGPU/Extensions/engine.computeShader.js +13 -4
  19. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  20. package/Engines/WebGPU/Extensions/engine.multiRender.js +3 -2
  21. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  22. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +8 -1
  23. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  24. package/Engines/WebGPU/webgpuBufferManager.d.ts +3 -1
  25. package/Engines/WebGPU/webgpuBufferManager.js +10 -2
  26. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  27. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  28. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  29. package/Engines/WebGPU/webgpuPerfCounter.d.ts +15 -0
  30. package/Engines/WebGPU/webgpuPerfCounter.js +31 -0
  31. package/Engines/WebGPU/webgpuPerfCounter.js.map +1 -0
  32. package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -1
  33. package/Engines/WebGPU/webgpuQuerySet.js +37 -18
  34. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  35. package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +20 -1
  36. package/Engines/WebGPU/webgpuRenderTargetWrapper.js +18 -1
  37. package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
  38. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  39. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  40. package/Engines/WebGPU/webgpuTimestampQuery.d.ts +11 -2
  41. package/Engines/WebGPU/webgpuTimestampQuery.js +45 -7
  42. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  43. package/Engines/WebGPU/webgpuTintWASM.js +3 -2
  44. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  45. package/Engines/engine.d.ts +3 -5
  46. package/Engines/engine.js.map +1 -1
  47. package/Engines/index.d.ts +1 -0
  48. package/Engines/index.js +1 -0
  49. package/Engines/index.js.map +1 -1
  50. package/Engines/nativeEngine.js +4 -2
  51. package/Engines/nativeEngine.js.map +1 -1
  52. package/Engines/thinEngine.js +4 -4
  53. package/Engines/thinEngine.js.map +1 -1
  54. package/Engines/webgpuEngine.d.ts +16 -1
  55. package/Engines/webgpuEngine.js +108 -54
  56. package/Engines/webgpuEngine.js.map +1 -1
  57. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +2 -1
  58. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  59. package/Gizmos/lightGizmo.js +2 -1
  60. package/Gizmos/lightGizmo.js.map +1 -1
  61. package/Gizmos/rotationGizmo.js +1 -1
  62. package/Gizmos/rotationGizmo.js.map +1 -1
  63. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  64. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  65. package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
  66. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  67. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +3 -2
  68. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  69. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +2 -1
  70. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  71. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -1
  72. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  73. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -1
  74. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  75. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +3 -2
  76. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  77. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
  78. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  79. package/Materials/Node/nodeMaterial.js +9 -8
  80. package/Materials/Node/nodeMaterial.js.map +1 -1
  81. package/Materials/Node/nodeMaterialBlock.js +2 -1
  82. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  83. package/Materials/Textures/multiRenderTarget.d.ts +4 -0
  84. package/Materials/Textures/multiRenderTarget.js +1 -0
  85. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  86. package/Materials/Textures/renderTargetTexture.js +1 -2
  87. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  88. package/Materials/uniformBuffer.d.ts +1 -4
  89. package/Materials/uniformBuffer.js +2 -5
  90. package/Materials/uniformBuffer.js.map +1 -1
  91. package/Meshes/Builders/groundBuilder.d.ts +7 -1
  92. package/Meshes/Builders/groundBuilder.js +17 -8
  93. package/Meshes/Builders/groundBuilder.js.map +1 -1
  94. package/Meshes/Compression/dracoCompression.js.map +1 -1
  95. package/Meshes/Node/nodeGeometryBlock.js +2 -1
  96. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  97. package/Meshes/mesh.d.ts +2 -1
  98. package/Meshes/mesh.js +3 -2
  99. package/Meshes/mesh.js.map +1 -1
  100. package/Misc/assetsManager.js +2 -2
  101. package/Misc/assetsManager.js.map +1 -1
  102. package/Misc/dds.js +1 -1
  103. package/Misc/dds.js.map +1 -1
  104. package/Misc/fileTools.js +4 -0
  105. package/Misc/fileTools.js.map +1 -1
  106. package/Misc/logger.d.ts +3 -3
  107. package/Misc/logger.js +8 -4
  108. package/Misc/logger.js.map +1 -1
  109. package/Misc/perfCounter.d.ts +2 -1
  110. package/Misc/perfCounter.js +1 -0
  111. package/Misc/perfCounter.js.map +1 -1
  112. package/Misc/sceneSerializer.js +2 -1
  113. package/Misc/sceneSerializer.js.map +1 -1
  114. package/Misc/tools.d.ts +2 -7
  115. package/Misc/tools.js.map +1 -1
  116. package/Navigation/Plugins/recastJSPlugin.js +3 -3
  117. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  118. package/Particles/computeShaderParticleSystem.js.map +1 -1
  119. package/Physics/v2/Plugins/havokPlugin.js +1 -1
  120. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  121. package/Physics/v2/physicsBody.d.ts +5 -0
  122. package/Physics/v2/physicsBody.js +7 -0
  123. package/Physics/v2/physicsBody.js.map +1 -1
  124. package/Physics/v2/ragdoll.d.ts +5 -10
  125. package/Physics/v2/ragdoll.js +29 -36
  126. package/Physics/v2/ragdoll.js.map +1 -1
  127. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
  128. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  129. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +3 -2
  130. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  131. package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -1
  132. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  133. package/PostProcesses/screenSpaceReflectionPostProcess.js +3 -2
  134. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  135. package/Rendering/GaussianSplatting/gaussianSplatting.js.map +1 -1
  136. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +3 -1
  137. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  138. package/XR/features/WebXRControllerPhysics.js +2 -2
  139. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  140. package/XR/features/WebXRMeshDetector.js +2 -1
  141. package/XR/features/WebXRMeshDetector.js.map +1 -1
  142. package/XR/features/WebXRWalkingLocomotion.js +1 -1
  143. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  144. package/XR/motionController/webXRMotionControllerManager.js +1 -1
  145. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  146. package/XR/webXRExperienceHelper.js +2 -2
  147. package/XR/webXRExperienceHelper.js.map +1 -1
  148. package/assetContainer.js +2 -2
  149. package/assetContainer.js.map +1 -1
  150. package/package.json +1 -1
  151. package/scene.d.ts +2 -4
  152. package/scene.js +2 -1
  153. package/scene.js.map +1 -1
@@ -34,6 +34,7 @@ import type { WebGPUDataBuffer } from "../Meshes/WebGPU/webgpuDataBuffer";
34
34
  import "../Buffers/buffer.align";
35
35
  import "../ShadersWGSL/postprocess.vertex";
36
36
  import type { RenderTargetWrapper } from "./renderTargetWrapper";
37
+ import { WebGPUPerfCounter } from "./WebGPU/webgpuPerfCounter";
37
38
  /** @internal */
38
39
  interface IWebGPURenderPassWrapper {
39
40
  renderPassDescriptor: Nullable<GPURenderPassDescriptor>;
@@ -152,6 +153,8 @@ export declare class WebGPUEngine extends Engine {
152
153
  /** @internal */
153
154
  _timestampQuery: WebGPUTimestampQuery;
154
155
  /** @internal */
156
+ _timestampIndex: number;
157
+ /** @internal */
155
158
  _occlusionQuery: WebGPUOcclusionQuery;
156
159
  /** @internal */
157
160
  _compiledComputeEffects: {
@@ -299,6 +302,18 @@ export declare class WebGPUEngine extends Engine {
299
302
  */
300
303
  get compatibilityMode(): boolean;
301
304
  set compatibilityMode(mode: boolean);
305
+ /**
306
+ * Enables or disables GPU timing measurements.
307
+ * Note that this is only supported if the "timestamp-query" extension is enabled in the options.
308
+ */
309
+ get enableGPUTimingMeasurements(): boolean;
310
+ set enableGPUTimingMeasurements(enable: boolean);
311
+ /**
312
+ * Gets the GPU time spent in the main render pass for the last frame rendered (in nanoseconds).
313
+ * You have to enable the "timestamp-query" extension in the engine constructor options and set engine.enableGPUTimingMeasurements = true.
314
+ * It will only return time spent in the main pass, not additional render target / compute passes (if any)!
315
+ */
316
+ readonly gpuTimeInFrameForMainPass?: WebGPUPerfCounter;
302
317
  /** @internal */
303
318
  get currentSampleCount(): number;
304
319
  /**
@@ -426,7 +441,7 @@ export declare class WebGPUEngine extends Engine {
426
441
  /**
427
442
  * Creates a new index buffer
428
443
  * @param indices defines the content of the index buffer
429
- * @param updatable defines if the index buffer must be updatable
444
+ * @param _updatable defines if the index buffer must be updatable
430
445
  * @param label defines the label of the buffer (for debug purpose)
431
446
  * @returns a new buffer
432
447
  */
@@ -1,9 +1,11 @@
1
+ /* eslint-disable babylonjs/available */
1
2
  import { Logger } from "../Misc/logger.js";
2
3
  import { Color4 } from "../Maths/math.js";
3
4
  import { Engine } from "../Engines/engine.js";
4
5
  import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture.js";
5
6
  import { Effect } from "../Materials/effect.js";
6
7
 
8
+ // eslint-disable-next-line @typescript-eslint/naming-convention
7
9
  import * as WebGPUConstants from "./WebGPU/webgpuConstants.js";
8
10
  import { VertexBuffer } from "../Buffers/buffer.js";
9
11
  import { WebGPUPipelineContext } from "./WebGPU/webgpuPipelineContext.js";
@@ -34,6 +36,7 @@ import { ShaderLanguage } from "../Materials/shaderLanguage.js";
34
36
  import { WebGPUSnapshotRendering } from "./WebGPU/webgpuSnapshotRendering.js";
35
37
  import "../Buffers/buffer.align.js";
36
38
  import "../ShadersWGSL/postprocess.vertex.js";
39
+ import { WebGPUPerfCounter } from "./WebGPU/webgpuPerfCounter.js";
37
40
  const viewDescriptorSwapChainAntialiasing = {
38
41
  label: `TextureView_SwapChain_ResolveTarget`,
39
42
  dimension: WebGPUConstants.TextureDimension.E2d,
@@ -188,6 +191,20 @@ export class WebGPUEngine extends Engine {
188
191
  set compatibilityMode(mode) {
189
192
  this._compatibilityMode = mode;
190
193
  }
194
+ /**
195
+ * Enables or disables GPU timing measurements.
196
+ * Note that this is only supported if the "timestamp-query" extension is enabled in the options.
197
+ */
198
+ get enableGPUTimingMeasurements() {
199
+ return this._timestampQuery.enable;
200
+ }
201
+ set enableGPUTimingMeasurements(enable) {
202
+ if (this._timestampQuery.enable === enable) {
203
+ return;
204
+ }
205
+ this.gpuTimeInFrameForMainPass = enable ? new WebGPUPerfCounter() : undefined;
206
+ this._timestampQuery.enable = enable;
207
+ }
191
208
  /** @internal */
192
209
  get currentSampleCount() {
193
210
  return this._currentRenderTarget ? this._currentRenderTarget.samples : this._mainPassSampleCount;
@@ -231,6 +248,8 @@ export class WebGPUEngine extends Engine {
231
248
  description: "",
232
249
  };
233
250
  /** @internal */
251
+ this._timestampIndex = 0;
252
+ /** @internal */
234
253
  this._compiledComputeEffects = {};
235
254
  /** @internal */
236
255
  this._counters = {
@@ -420,11 +439,11 @@ export class WebGPUEngine extends Engine {
420
439
  Logger.Error(e);
421
440
  })
422
441
  .then(() => {
423
- this._bufferManager = new WebGPUBufferManager(this._device);
442
+ this._bufferManager = new WebGPUBufferManager(this, this._device);
424
443
  this._textureHelper = new WebGPUTextureHelper(this._device, this._glslang, this._tintWASM, this._bufferManager, this._deviceEnabledExtensions);
425
444
  this._cacheSampler = new WebGPUCacheSampler(this._device);
426
445
  this._cacheBindGroups = new WebGPUCacheBindGroups(this._device, this._cacheSampler, this);
427
- this._timestampQuery = new WebGPUTimestampQuery(this._device, this._bufferManager);
446
+ this._timestampQuery = new WebGPUTimestampQuery(this, this._device, this._bufferManager);
428
447
  this._occlusionQuery = this._device.createQuerySet ? new WebGPUOcclusionQuery(this, this._device, this._bufferManager) : undefined;
429
448
  this._bundleList = new WebGPUBundleList(this._device);
430
449
  this._snapshotRendering = new WebGPUSnapshotRendering(this, this._snapshotRenderingMode, this._bundleList);
@@ -433,7 +452,7 @@ export class WebGPUEngine extends Engine {
433
452
  if (this.dbgVerboseLogsForFirstFrames) {
434
453
  if (this._count === undefined) {
435
454
  this._count = 0;
436
- console.log("%c frame #" + this._count + " - begin", "background: #ffff00");
455
+ Logger.Log(["%c frame #" + this._count + " - begin", "background: #ffff00"]);
437
456
  }
438
457
  }
439
458
  this._uploadEncoder = this._device.createCommandEncoder(this._uploadEncoderDescriptor);
@@ -458,11 +477,11 @@ export class WebGPUEngine extends Engine {
458
477
  this.resize();
459
478
  })
460
479
  .catch((e) => {
480
+ var _a;
461
481
  Logger.Error("Can not create WebGPU Device and/or context.");
462
482
  Logger.Error(e);
463
- if (console.trace) {
464
- console.trace();
465
- }
483
+ // eslint-disable-next-line no-console
484
+ (_a = console === null || console === void 0 ? void 0 : console.trace) === null || _a === void 0 ? void 0 : _a.call(console);
466
485
  });
467
486
  }
468
487
  _initGlslang(glslangOptions) {
@@ -692,7 +711,7 @@ export class WebGPUEngine extends Engine {
692
711
  this._count = 0;
693
712
  }
694
713
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
695
- console.log("frame #" + this._count + " - setSize -", width, height);
714
+ Logger.Log(["frame #" + this._count + " - setSize -", width, height]);
696
715
  }
697
716
  }
698
717
  this._initializeMainAttachments();
@@ -817,7 +836,14 @@ export class WebGPUEngine extends Engine {
817
836
  this._count = 0;
818
837
  }
819
838
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
820
- console.log("frame #" + this._count + " - viewport applied - (", this._viewportCached.x, this._viewportCached.y, this._viewportCached.z, this._viewportCached.w, ") current pass is main pass=" + this._currentPassIsMainPass());
839
+ Logger.Log([
840
+ "frame #" + this._count + " - viewport applied - (",
841
+ this._viewportCached.x,
842
+ this._viewportCached.y,
843
+ this._viewportCached.z,
844
+ this._viewportCached.w,
845
+ ") current pass is main pass=" + this._currentPassIsMainPass(),
846
+ ]);
821
847
  }
822
848
  }
823
849
  }
@@ -854,7 +880,14 @@ export class WebGPUEngine extends Engine {
854
880
  this._count = 0;
855
881
  }
856
882
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
857
- console.log("frame #" + this._count + " - scissor applied - (", this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w, ") current pass is main pass=" + this._currentPassIsMainPass());
883
+ Logger.Log([
884
+ "frame #" + this._count + " - scissor applied - (",
885
+ this._scissorCached.x,
886
+ this._scissorCached.y,
887
+ this._scissorCached.z,
888
+ this._scissorCached.w,
889
+ ") current pass is main pass=" + this._currentPassIsMainPass(),
890
+ ]);
858
891
  }
859
892
  }
860
893
  }
@@ -933,7 +966,7 @@ export class WebGPUEngine extends Engine {
933
966
  this._count = 0;
934
967
  }
935
968
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
936
- console.log("frame #" + this._count + " - clear - backBuffer=", backBuffer, " depth=", depth, " stencil=", stencil, " scissor is active=", hasScissor);
969
+ Logger.Log(["frame #" + this._count + " - clear - backBuffer=", backBuffer, " depth=", depth, " stencil=", stencil, " scissor is active=", hasScissor]);
937
970
  }
938
971
  }
939
972
  // We need to recreate the render pass so that the new parameters for clear color / depth / stencil are taken into account
@@ -1020,7 +1053,7 @@ export class WebGPUEngine extends Engine {
1020
1053
  /**
1021
1054
  * Creates a new index buffer
1022
1055
  * @param indices defines the content of the index buffer
1023
- * @param updatable defines if the index buffer must be updatable
1056
+ * @param _updatable defines if the index buffer must be updatable
1024
1057
  * @param label defines the label of the buffer (for debug purpose)
1025
1058
  * @returns a new buffer
1026
1059
  */
@@ -1257,10 +1290,10 @@ export class WebGPUEngine extends Engine {
1257
1290
  const webGpuContext = pipelineContext;
1258
1291
  const shaderLanguage = webGpuContext.shaderProcessingContext.shaderLanguage;
1259
1292
  if (this.dbgShowShaderCode) {
1260
- console.log(defines);
1261
- console.log(vertexSourceCode);
1262
- console.log(fragmentSourceCode);
1263
- console.log("***********************************************");
1293
+ Logger.Log(["defines", defines]);
1294
+ Logger.Log(vertexSourceCode);
1295
+ Logger.Log(fragmentSourceCode);
1296
+ Logger.Log("***********************************************");
1264
1297
  }
1265
1298
  webGpuContext.sources = {
1266
1299
  fragment: fragmentSourceCode,
@@ -1319,7 +1352,7 @@ export class WebGPUEngine extends Engine {
1319
1352
  effect.drawContext === this._currentDrawContext &&
1320
1353
  !this._forceEnableEffect)) {
1321
1354
  if (!effect.effect && this.dbgShowEmptyEnableEffectCalls) {
1322
- console.error("drawWrapper=", effect);
1355
+ Logger.Log(["drawWrapper=", effect]);
1323
1356
  throw "Invalid call to enableEffect: the effect property is empty!";
1324
1357
  }
1325
1358
  return;
@@ -1331,7 +1364,7 @@ export class WebGPUEngine extends Engine {
1331
1364
  this._currentDrawContext = effect.drawContext;
1332
1365
  this._counters.numEnableDrawWrapper++;
1333
1366
  if (!this._currentMaterialContext) {
1334
- console.error("drawWrapper=", effect);
1367
+ Logger.Log(["drawWrapper=", effect]);
1335
1368
  throw `Invalid call to enableEffect: the materialContext property is empty!`;
1336
1369
  }
1337
1370
  }
@@ -1708,7 +1741,7 @@ export class WebGPUEngine extends Engine {
1708
1741
  this._count = 0;
1709
1742
  }
1710
1743
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
1711
- console.log("frame #" + this._count + " - _setTexture called with a null _currentEffect! texture=", texture);
1744
+ Logger.Log(["frame #" + this._count + " - _setTexture called with a null _currentEffect! texture=", texture]);
1712
1745
  }
1713
1746
  }
1714
1747
  }
@@ -1758,7 +1791,7 @@ export class WebGPUEngine extends Engine {
1758
1791
  this._count = 0;
1759
1792
  }
1760
1793
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
1761
- console.log("frame #" +
1794
+ Logger.Log("frame #" +
1762
1795
  this._count +
1763
1796
  " - generate mipmaps - width=" +
1764
1797
  texture.width +
@@ -1898,6 +1931,7 @@ export class WebGPUEngine extends Engine {
1898
1931
  this._endCurrentRenderPass();
1899
1932
  this._snapshotRendering.endFrame();
1900
1933
  this._timestampQuery.endFrame(this._renderEncoder);
1934
+ this._timestampIndex = 0;
1901
1935
  this.flushFramebuffer();
1902
1936
  this._textureHelper.destroyDeferredTextures();
1903
1937
  this._bufferManager.destroyDeferredBuffers();
@@ -1911,7 +1945,7 @@ export class WebGPUEngine extends Engine {
1911
1945
  for (const name in UniformBuffer._UpdatedUbosInFrame) {
1912
1946
  list.push(name + ":" + UniformBuffer._UpdatedUbosInFrame[name]);
1913
1947
  }
1914
- console.log("frame #" + this._count + " - updated ubos -", list.join(", "));
1948
+ Logger.Log(["frame #" + this._count + " - updated ubos -", list.join(", ")]);
1915
1949
  }
1916
1950
  }
1917
1951
  UniformBuffer._UpdatedUbosInFrame = {};
@@ -1933,12 +1967,12 @@ export class WebGPUEngine extends Engine {
1933
1967
  this._count = 0;
1934
1968
  }
1935
1969
  if (this._count < this.dbgVerboseLogsNumFrames) {
1936
- console.log("%c frame #" + this._count + " - end", "background: #ffff00");
1970
+ Logger.Log(["%c frame #" + this._count + " - end", "background: #ffff00"]);
1937
1971
  }
1938
1972
  if (this._count < this.dbgVerboseLogsNumFrames) {
1939
1973
  this._count++;
1940
1974
  if (this._count !== this.dbgVerboseLogsNumFrames) {
1941
- console.log("%c frame #" + this._count + " - begin", "background: #ffff00");
1975
+ Logger.Log(["%c frame #" + this._count + " - begin", "background: #ffff00"]);
1942
1976
  }
1943
1977
  }
1944
1978
  }
@@ -1952,10 +1986,6 @@ export class WebGPUEngine extends Engine {
1952
1986
  this._commandBuffers[0] = this._uploadEncoder.finish();
1953
1987
  this._commandBuffers[1] = this._renderEncoder.finish();
1954
1988
  this._device.queue.submit(this._commandBuffers);
1955
- // Now that the command buffers have been submitted, we can reset the ubo as we can reuse the same GPU buffer(s)
1956
- for (let i = 0; i < this._uniformBuffers.length; ++i) {
1957
- this._uniformBuffers[i]._checkNewFrame(true);
1958
- }
1959
1989
  this._uploadEncoder = this._device.createCommandEncoder(this._uploadEncoderDescriptor);
1960
1990
  this._renderEncoder = this._device.createCommandEncoder(this._renderEncoderDescriptor);
1961
1991
  this._timestampQuery.startFrame(this._uploadEncoder);
@@ -2047,7 +2077,7 @@ export class WebGPUEngine extends Engine {
2047
2077
  colorAttachments.push(null);
2048
2078
  }
2049
2079
  }
2050
- (_e = this._debugPushGroup) === null || _e === void 0 ? void 0 : _e.call(this, "render target pass", 1);
2080
+ (_e = this._debugPushGroup) === null || _e === void 0 ? void 0 : _e.call(this, "render target pass" + (renderTargetWrapper.label ? " (" + renderTargetWrapper.label + ")" : ""), 1);
2051
2081
  this._rttRenderPassWrapper.renderPassDescriptor = {
2052
2082
  label: ((_f = renderTargetWrapper.label) !== null && _f !== void 0 ? _f : "RTT") + "RenderPass",
2053
2083
  colorAttachments,
@@ -2068,6 +2098,7 @@ export class WebGPUEngine extends Engine {
2068
2098
  : undefined,
2069
2099
  occlusionQuerySet: ((_g = this._occlusionQuery) === null || _g === void 0 ? void 0 : _g.hasQueries) ? this._occlusionQuery.querySet : undefined,
2070
2100
  };
2101
+ this._timestampQuery.startPass(this._rttRenderPassWrapper.renderPassDescriptor, this._timestampIndex);
2071
2102
  this._currentRenderPass = this._renderEncoder.beginRenderPass(this._rttRenderPassWrapper.renderPassDescriptor);
2072
2103
  if (this.dbgVerboseLogsForFirstFrames) {
2073
2104
  if (this._count === undefined) {
@@ -2075,18 +2106,22 @@ export class WebGPUEngine extends Engine {
2075
2106
  }
2076
2107
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
2077
2108
  const internalTexture = rtWrapper.texture;
2078
- console.log("frame #" +
2079
- this._count +
2080
- " - render target begin pass - rtt name=" +
2081
- renderTargetWrapper.label +
2082
- ", internalTexture.uniqueId=" +
2083
- internalTexture.uniqueId +
2084
- ", width=" +
2085
- internalTexture.width +
2086
- ", height=" +
2087
- internalTexture.height +
2088
- ", setClearStates=" +
2089
- setClearStates, "renderPassDescriptor=", this._rttRenderPassWrapper.renderPassDescriptor);
2109
+ Logger.Log([
2110
+ "frame #" +
2111
+ this._count +
2112
+ " - render target begin pass - rtt name=" +
2113
+ renderTargetWrapper.label +
2114
+ ", internalTexture.uniqueId=" +
2115
+ internalTexture.uniqueId +
2116
+ ", width=" +
2117
+ internalTexture.width +
2118
+ ", height=" +
2119
+ internalTexture.height +
2120
+ ", setClearStates=" +
2121
+ setClearStates,
2122
+ "renderPassDescriptor=",
2123
+ this._rttRenderPassWrapper.renderPassDescriptor,
2124
+ ]);
2090
2125
  }
2091
2126
  }
2092
2127
  (_h = this._debugFlushPendingCommands) === null || _h === void 0 ? void 0 : _h.call(this);
@@ -2135,10 +2170,16 @@ export class WebGPUEngine extends Engine {
2135
2170
  this._count = 0;
2136
2171
  }
2137
2172
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
2138
- console.log("frame #" + this._count + " - main begin pass - texture width=" + this._mainTextureExtends.width, " height=" + this._mainTextureExtends.height + ", setClearStates=" + setClearStates, "renderPassDescriptor=", this._mainRenderPassWrapper.renderPassDescriptor);
2173
+ Logger.Log([
2174
+ "frame #" + this._count + " - main begin pass - texture width=" + this._mainTextureExtends.width,
2175
+ " height=" + this._mainTextureExtends.height + ", setClearStates=" + setClearStates,
2176
+ "renderPassDescriptor=",
2177
+ this._mainRenderPassWrapper.renderPassDescriptor,
2178
+ ]);
2139
2179
  }
2140
2180
  }
2141
2181
  (_b = this._debugPushGroup) === null || _b === void 0 ? void 0 : _b.call(this, "main pass", 0);
2182
+ this._timestampQuery.startPass(this._mainRenderPassWrapper.renderPassDescriptor, this._timestampIndex);
2142
2183
  this._currentRenderPass = this._renderEncoder.beginRenderPass(this._mainRenderPassWrapper.renderPassDescriptor);
2143
2184
  this._setDepthTextureFormat(this._mainRenderPassWrapper);
2144
2185
  this._setColorFormat(this._mainRenderPassWrapper);
@@ -2160,12 +2201,16 @@ export class WebGPUEngine extends Engine {
2160
2201
  this._bundleList.reset();
2161
2202
  }
2162
2203
  this._currentRenderPass.end();
2204
+ this._timestampQuery.endPass(this._timestampIndex, (this._currentRenderTarget && this._currentRenderTarget.gpuTimeInFrame
2205
+ ? this._currentRenderTarget.gpuTimeInFrame
2206
+ : this.gpuTimeInFrameForMainPass));
2207
+ this._timestampIndex += 2;
2163
2208
  if (this.dbgVerboseLogsForFirstFrames) {
2164
2209
  if (this._count === undefined) {
2165
2210
  this._count = 0;
2166
2211
  }
2167
2212
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
2168
- console.log("frame #" +
2213
+ Logger.Log("frame #" +
2169
2214
  this._count +
2170
2215
  " - " +
2171
2216
  (currentPassIndex === 2 ? "main" : "render target") +
@@ -2226,18 +2271,24 @@ export class WebGPUEngine extends Engine {
2226
2271
  this._count = 0;
2227
2272
  }
2228
2273
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
2229
- console.log("frame #" +
2230
- this._count +
2231
- " - bindFramebuffer - rtt name=" +
2232
- texture.label +
2233
- ", internalTexture.uniqueId=" +
2234
- ((_b = texture.texture) === null || _b === void 0 ? void 0 : _b.uniqueId) +
2235
- ", face=" +
2236
- faceIndex +
2237
- ", lodLevel=" +
2238
- lodLevel +
2239
- ", layer=" +
2240
- layer, "colorAttachmentViewDescriptor=", this._rttRenderPassWrapper.colorAttachmentViewDescriptor, "depthAttachmentViewDescriptor=", this._rttRenderPassWrapper.depthAttachmentViewDescriptor);
2274
+ Logger.Log([
2275
+ "frame #" +
2276
+ this._count +
2277
+ " - bindFramebuffer - rtt name=" +
2278
+ texture.label +
2279
+ ", internalTexture.uniqueId=" +
2280
+ ((_b = texture.texture) === null || _b === void 0 ? void 0 : _b.uniqueId) +
2281
+ ", face=" +
2282
+ faceIndex +
2283
+ ", lodLevel=" +
2284
+ lodLevel +
2285
+ ", layer=" +
2286
+ layer,
2287
+ "colorAttachmentViewDescriptor=",
2288
+ this._rttRenderPassWrapper.colorAttachmentViewDescriptor,
2289
+ "depthAttachmentViewDescriptor=",
2290
+ this._rttRenderPassWrapper.depthAttachmentViewDescriptor,
2291
+ ]);
2241
2292
  }
2242
2293
  }
2243
2294
  // We don't create the render pass just now, we do a lazy creation of the render pass, hoping the render pass will be created by a call to clear()...
@@ -2285,7 +2336,7 @@ export class WebGPUEngine extends Engine {
2285
2336
  this._count = 0;
2286
2337
  }
2287
2338
  if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
2288
- console.log("frame #" + this._count + " - unBindFramebuffer - rtt name=" + texture.label + ", internalTexture.uniqueId=", (_b = texture.texture) === null || _b === void 0 ? void 0 : _b.uniqueId);
2339
+ Logger.Log("frame #" + this._count + " - unBindFramebuffer - rtt name=" + texture.label + ", internalTexture.uniqueId=", (_b = texture.texture) === null || _b === void 0 ? void 0 : _b.uniqueId);
2289
2340
  }
2290
2341
  }
2291
2342
  this._mrtAttachments = [];
@@ -2518,8 +2569,11 @@ export class WebGPUEngine extends Engine {
2518
2569
  dispose() {
2519
2570
  var _a, _b;
2520
2571
  this._isDisposed = true;
2572
+ this._timestampQuery.dispose();
2521
2573
  (_a = this._mainTexture) === null || _a === void 0 ? void 0 : _a.destroy();
2522
2574
  (_b = this._depthTexture) === null || _b === void 0 ? void 0 : _b.destroy();
2575
+ this._textureHelper.destroyDeferredTextures();
2576
+ this._bufferManager.destroyDeferredBuffers();
2523
2577
  this._device.destroy();
2524
2578
  super.dispose();
2525
2579
  }