@babylonjs/core 6.34.2 → 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.
- package/Compute/computeShader.d.ts +8 -2
- package/Compute/computeShader.js +5 -1
- package/Compute/computeShader.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +3 -1
- package/Engines/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +3 -2
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +10 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +3 -2
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +8 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +3 -1
- package/Engines/WebGPU/webgpuBufferManager.js +10 -2
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPerfCounter.d.ts +15 -0
- package/Engines/WebGPU/webgpuPerfCounter.js +31 -0
- package/Engines/WebGPU/webgpuPerfCounter.js.map +1 -0
- package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -1
- package/Engines/WebGPU/webgpuQuerySet.js +37 -18
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +20 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js +18 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +11 -2
- package/Engines/WebGPU/webgpuTimestampQuery.js +45 -7
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/engine.d.ts +1 -1
- package/Engines/index.d.ts +1 -0
- package/Engines/index.js +1 -0
- package/Engines/index.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +16 -1
- package/Engines/webgpuEngine.js +33 -4
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +4 -0
- package/Materials/Textures/multiRenderTarget.js +1 -0
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Misc/perfCounter.d.ts +2 -1
- package/Misc/perfCounter.js +1 -0
- package/Misc/perfCounter.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +3 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/package.json +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
|
|
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
|
*/
|
package/Engines/webgpuEngine.js
CHANGED
|
@@ -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);
|
|
@@ -1034,7 +1053,7 @@ export class WebGPUEngine extends Engine {
|
|
|
1034
1053
|
/**
|
|
1035
1054
|
* Creates a new index buffer
|
|
1036
1055
|
* @param indices defines the content of the index buffer
|
|
1037
|
-
* @param
|
|
1056
|
+
* @param _updatable defines if the index buffer must be updatable
|
|
1038
1057
|
* @param label defines the label of the buffer (for debug purpose)
|
|
1039
1058
|
* @returns a new buffer
|
|
1040
1059
|
*/
|
|
@@ -1912,6 +1931,7 @@ export class WebGPUEngine extends Engine {
|
|
|
1912
1931
|
this._endCurrentRenderPass();
|
|
1913
1932
|
this._snapshotRendering.endFrame();
|
|
1914
1933
|
this._timestampQuery.endFrame(this._renderEncoder);
|
|
1934
|
+
this._timestampIndex = 0;
|
|
1915
1935
|
this.flushFramebuffer();
|
|
1916
1936
|
this._textureHelper.destroyDeferredTextures();
|
|
1917
1937
|
this._bufferManager.destroyDeferredBuffers();
|
|
@@ -2057,7 +2077,7 @@ export class WebGPUEngine extends Engine {
|
|
|
2057
2077
|
colorAttachments.push(null);
|
|
2058
2078
|
}
|
|
2059
2079
|
}
|
|
2060
|
-
(_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);
|
|
2061
2081
|
this._rttRenderPassWrapper.renderPassDescriptor = {
|
|
2062
2082
|
label: ((_f = renderTargetWrapper.label) !== null && _f !== void 0 ? _f : "RTT") + "RenderPass",
|
|
2063
2083
|
colorAttachments,
|
|
@@ -2078,6 +2098,7 @@ export class WebGPUEngine extends Engine {
|
|
|
2078
2098
|
: undefined,
|
|
2079
2099
|
occlusionQuerySet: ((_g = this._occlusionQuery) === null || _g === void 0 ? void 0 : _g.hasQueries) ? this._occlusionQuery.querySet : undefined,
|
|
2080
2100
|
};
|
|
2101
|
+
this._timestampQuery.startPass(this._rttRenderPassWrapper.renderPassDescriptor, this._timestampIndex);
|
|
2081
2102
|
this._currentRenderPass = this._renderEncoder.beginRenderPass(this._rttRenderPassWrapper.renderPassDescriptor);
|
|
2082
2103
|
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2083
2104
|
if (this._count === undefined) {
|
|
@@ -2158,6 +2179,7 @@ export class WebGPUEngine extends Engine {
|
|
|
2158
2179
|
}
|
|
2159
2180
|
}
|
|
2160
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);
|
|
2161
2183
|
this._currentRenderPass = this._renderEncoder.beginRenderPass(this._mainRenderPassWrapper.renderPassDescriptor);
|
|
2162
2184
|
this._setDepthTextureFormat(this._mainRenderPassWrapper);
|
|
2163
2185
|
this._setColorFormat(this._mainRenderPassWrapper);
|
|
@@ -2179,6 +2201,10 @@ export class WebGPUEngine extends Engine {
|
|
|
2179
2201
|
this._bundleList.reset();
|
|
2180
2202
|
}
|
|
2181
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;
|
|
2182
2208
|
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2183
2209
|
if (this._count === undefined) {
|
|
2184
2210
|
this._count = 0;
|
|
@@ -2543,8 +2569,11 @@ export class WebGPUEngine extends Engine {
|
|
|
2543
2569
|
dispose() {
|
|
2544
2570
|
var _a, _b;
|
|
2545
2571
|
this._isDisposed = true;
|
|
2572
|
+
this._timestampQuery.dispose();
|
|
2546
2573
|
(_a = this._mainTexture) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
2547
2574
|
(_b = this._depthTexture) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
2575
|
+
this._textureHelper.destroyDeferredTextures();
|
|
2576
|
+
this._bufferManager.destroyDeferredBuffers();
|
|
2548
2577
|
this._device.destroy();
|
|
2549
2578
|
super.dispose();
|
|
2550
2579
|
}
|