@babylonjs/core 5.52.0 → 5.53.1
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/Animations/animatable.js +1 -1
- package/Animations/animatable.js.map +1 -1
- package/Animations/animationGroup.js +8 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +2 -1
- package/Collisions/pickingInfo.js +4 -3
- package/Collisions/pickingInfo.js.map +1 -1
- package/DeviceInput/eventFactory.js +4 -0
- package/DeviceInput/eventFactory.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +17 -9
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +3 -0
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +74 -19
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +2 -5
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGL/webGLHardwareTexture.d.ts +3 -1
- package/Engines/WebGL/webGLHardwareTexture.js +19 -7
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +14 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +76 -6
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +20 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +22 -7
- package/Engines/WebGPU/webgpuConstants.js +24 -8
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +0 -3
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +20 -53
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +3 -2
- package/Engines/WebGPU/webgpuTextureHelper.js +33 -14
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.d.ts +3 -2
- package/Engines/WebGPU/webgpuTintWASM.js +10 -8
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/constants.d.ts +12 -0
- package/Engines/constants.js +12 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +130 -72
- package/Engines/engine.js +5 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +1 -0
- package/Engines/nativeEngine.js +16 -5
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +28 -4
- package/Engines/renderTargetWrapper.js +107 -10
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +6 -6
- package/Engines/thinEngine.js +29 -21
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +25 -8
- package/Engines/webgpuEngine.js +112 -48
- package/Engines/webgpuEngine.js.map +1 -1
- package/Inputs/scene.inputManager.js +5 -12
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +0 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +3 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +4 -0
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +4 -0
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +40 -0
- package/Materials/Textures/multiRenderTarget.js +143 -4
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +4 -0
- package/Materials/Textures/renderTargetTexture.js +10 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +4 -2
- package/Materials/Textures/texture.js +1 -0
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +4 -0
- package/Materials/Textures/textureCreationOptions.js.map +1 -1
- package/Materials/materialPluginBase.d.ts +3 -2
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/materialPluginManager.js +13 -3
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +2 -0
- package/Materials/uniformBuffer.js +4 -0
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.frustum.d.ts +8 -1
- package/Maths/math.frustum.js +14 -0
- package/Maths/math.frustum.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +2 -1
- package/Meshes/instancedMesh.js +3 -2
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +10 -5
- package/Meshes/mesh.js +40 -16
- package/Meshes/mesh.js.map +1 -1
- package/Misc/filesInput.d.ts +5 -2
- package/Misc/filesInput.js +39 -20
- package/Misc/filesInput.js.map +1 -1
- package/Misc/interfaces/screenshotSize.d.ts +17 -3
- package/Misc/interfaces/screenshotSize.js.map +1 -1
- package/Misc/sceneOptimizer.js +3 -0
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/screenshotTools.d.ts +2 -2
- package/Misc/screenshotTools.js +49 -9
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.d.ts +1 -1
- package/Misc/textureTools.js +4 -2
- package/Misc/textureTools.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +3 -3
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +27 -16
- package/Physics/v2/physicsBody.js +31 -16
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.d.ts +6 -6
- package/Physics/v2/physicsConstraint.js +6 -6
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/Physics/v2/physicsShape.d.ts +7 -7
- package/Physics/v2/physicsShape.js +7 -7
- package/Physics/v2/physicsShape.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +5 -0
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +7 -0
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.d.ts +0 -23
- package/PostProcesses/depthOfFieldMergePostProcess.js +0 -5
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +1 -0
- package/PostProcesses/postProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +1 -0
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +3 -1
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +2 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +2 -0
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Shaders/default.fragment.js +1 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js +10 -5
- package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
- package/Shaders/fluidRenderingRender.fragment.js +3 -3
- package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
- package/Shaders/motionBlur.fragment.js +8 -2
- package/Shaders/motionBlur.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2.fragment.js +11 -4
- package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection2Blur.fragment.js +6 -1
- package/Shaders/screenSpaceReflection2Blur.fragment.js.map +1 -1
- package/Shaders/ssao2.fragment.js +1 -0
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +9 -9
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js +16 -16
- package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +6 -6
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +6 -6
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +8 -8
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.d.ts +9 -0
- package/XR/features/WebXRControllerTeleportation.js +28 -4
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/package.json +1 -1
|
@@ -60,15 +60,31 @@ export interface WebGPUEngineOptions extends ThinEngineOptions, GPURequestAdapte
|
|
|
60
60
|
*/
|
|
61
61
|
powerPreference?: GPUPowerPreference;
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
63
|
+
* When set to true, indicates that only a fallback adapter may be returned when requesting an adapter.
|
|
64
|
+
* If the user agent does not support a fallback adapter, will cause requestAdapter() to resolve to null.
|
|
65
|
+
* Default: false
|
|
66
|
+
*/
|
|
67
|
+
forceFallbackAdapter?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Defines the device descriptor used to create a device once we have retrieved an appropriate adapter
|
|
64
70
|
*/
|
|
65
71
|
deviceDescriptor?: GPUDeviceDescriptor;
|
|
72
|
+
/**
|
|
73
|
+
* When requesting the device, enable all the features supported by the adapter. Default: false
|
|
74
|
+
* Note that this setting is ignored if you explicitely set deviceDescriptor.requiredFeatures
|
|
75
|
+
*/
|
|
76
|
+
enableAllFeatures?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* When requesting the device, set the required limits to the maximum possible values (the ones from adapter.limits). Default: false
|
|
79
|
+
* Note that this setting is ignored if you explicitely set deviceDescriptor.requiredLimits
|
|
80
|
+
*/
|
|
81
|
+
setMaximumLimits?: boolean;
|
|
66
82
|
/**
|
|
67
83
|
* Defines the requested Swap Chain Format.
|
|
68
84
|
*/
|
|
69
85
|
swapChainFormat?: GPUTextureFormat;
|
|
70
86
|
/**
|
|
71
|
-
* Defines whether we should generate debug markers in the gpu command lists (can be seen with PIX for eg)
|
|
87
|
+
* Defines whether we should generate debug markers in the gpu command lists (can be seen with PIX for eg). Default: false
|
|
72
88
|
*/
|
|
73
89
|
enableGPUDebugMarkers?: boolean;
|
|
74
90
|
/**
|
|
@@ -98,16 +114,18 @@ export declare class WebGPUEngine extends Engine {
|
|
|
98
114
|
/** @internal */
|
|
99
115
|
readonly _clearStencilValue = 0;
|
|
100
116
|
private readonly _defaultSampleCount;
|
|
101
|
-
private _canvas;
|
|
102
117
|
/** @internal */
|
|
103
118
|
_options: WebGPUEngineOptions;
|
|
104
119
|
private _glslang;
|
|
105
120
|
private _tintWASM;
|
|
106
121
|
private _adapter;
|
|
107
122
|
private _adapterSupportedExtensions;
|
|
123
|
+
private _adapterInfo;
|
|
124
|
+
private _adapterSupportedLimits;
|
|
108
125
|
/** @internal */
|
|
109
126
|
_device: GPUDevice;
|
|
110
127
|
private _deviceEnabledExtensions;
|
|
128
|
+
private _deviceLimits;
|
|
111
129
|
private _context;
|
|
112
130
|
private _mainPassSampleCount;
|
|
113
131
|
/** @internal */
|
|
@@ -250,6 +268,10 @@ export declare class WebGPUEngine extends Engine {
|
|
|
250
268
|
get supportedExtensions(): Immutable<GPUFeatureName[]>;
|
|
251
269
|
/** Gets the currently enabled extensions on the WebGPU device */
|
|
252
270
|
get enabledExtensions(): Immutable<GPUFeatureName[]>;
|
|
271
|
+
/** Gets the supported limits by the WebGPU adapter */
|
|
272
|
+
get supportedLimits(): GPUSupportedLimits;
|
|
273
|
+
/** Gets the current limits of the WebGPU device */
|
|
274
|
+
get currentLimits(): GPUSupportedLimits;
|
|
253
275
|
/**
|
|
254
276
|
* Returns a string describing the current engine
|
|
255
277
|
*/
|
|
@@ -770,11 +792,6 @@ export declare class WebGPUEngine extends Engine {
|
|
|
770
792
|
* @returns a number defining the current render height
|
|
771
793
|
*/
|
|
772
794
|
getRenderHeight(useScreen?: boolean): number;
|
|
773
|
-
/**
|
|
774
|
-
* Gets the HTML canvas attached with the current WebGPU context
|
|
775
|
-
* @returns a HTML canvas
|
|
776
|
-
*/
|
|
777
|
-
getRenderingCanvas(): Nullable<HTMLCanvasElement>;
|
|
778
795
|
/**
|
|
779
796
|
* Get the current error code of the WebGPU context
|
|
780
797
|
* @returns the error code
|
package/Engines/webgpuEngine.js
CHANGED
|
@@ -35,6 +35,21 @@ import { WebGPUTintWASM } from "./WebGPU/webgpuTintWASM.js";
|
|
|
35
35
|
import { WebGPUShaderProcessor } from "./WebGPU/webgpuShaderProcessor.js";
|
|
36
36
|
import { ShaderLanguage } from "../Materials/shaderLanguage.js";
|
|
37
37
|
import { WebGPUSnapshotRendering } from "./WebGPU/webgpuSnapshotRendering.js";
|
|
38
|
+
const viewDescriptorSwapChainAntialiasing = {
|
|
39
|
+
label: `TextureView_SwapChain_ResolveTarget`,
|
|
40
|
+
dimension: WebGPUConstants.TextureDimension.E2d,
|
|
41
|
+
format: undefined,
|
|
42
|
+
mipLevelCount: 1,
|
|
43
|
+
arrayLayerCount: 1,
|
|
44
|
+
};
|
|
45
|
+
const viewDescriptorSwapChain = {
|
|
46
|
+
label: `TextureView_SwapChain`,
|
|
47
|
+
dimension: WebGPUConstants.TextureDimension.E2d,
|
|
48
|
+
format: undefined,
|
|
49
|
+
mipLevelCount: 1,
|
|
50
|
+
arrayLayerCount: 1,
|
|
51
|
+
};
|
|
52
|
+
const disableUniformityAnalysisMarker = "/* disable_uniformity_analysis */";
|
|
38
53
|
/**
|
|
39
54
|
* The web GPU engine class provides support for WebGPU version of babylon.js.
|
|
40
55
|
* @since 5.0.0
|
|
@@ -130,6 +145,14 @@ export class WebGPUEngine extends Engine {
|
|
|
130
145
|
get enabledExtensions() {
|
|
131
146
|
return this._deviceEnabledExtensions;
|
|
132
147
|
}
|
|
148
|
+
/** Gets the supported limits by the WebGPU adapter */
|
|
149
|
+
get supportedLimits() {
|
|
150
|
+
return this._adapterSupportedLimits;
|
|
151
|
+
}
|
|
152
|
+
/** Gets the current limits of the WebGPU device */
|
|
153
|
+
get currentLimits() {
|
|
154
|
+
return this._deviceLimits;
|
|
155
|
+
}
|
|
133
156
|
/**
|
|
134
157
|
* Returns a string describing the current engine
|
|
135
158
|
*/
|
|
@@ -149,9 +172,9 @@ export class WebGPUEngine extends Engine {
|
|
|
149
172
|
*/
|
|
150
173
|
getInfo() {
|
|
151
174
|
return {
|
|
152
|
-
vendor: "unknown vendor",
|
|
153
|
-
renderer: "unknown renderer",
|
|
154
|
-
version: "unknown version",
|
|
175
|
+
vendor: this._adapterInfo.vendor || "unknown vendor",
|
|
176
|
+
renderer: this._adapterInfo.architecture || "unknown renderer",
|
|
177
|
+
version: this._adapterInfo.description || "unknown version",
|
|
155
178
|
};
|
|
156
179
|
}
|
|
157
180
|
/**
|
|
@@ -202,6 +225,12 @@ export class WebGPUEngine extends Engine {
|
|
|
202
225
|
this._defaultSampleCount = 4; // Only supported value for now.
|
|
203
226
|
this._glslang = null;
|
|
204
227
|
this._tintWASM = null;
|
|
228
|
+
this._adapterInfo = {
|
|
229
|
+
vendor: "",
|
|
230
|
+
architecture: "",
|
|
231
|
+
device: "",
|
|
232
|
+
description: "",
|
|
233
|
+
};
|
|
205
234
|
/** @internal */
|
|
206
235
|
this._compiledComputeEffects = {};
|
|
207
236
|
/** @internal */
|
|
@@ -290,7 +319,7 @@ export class WebGPUEngine extends Engine {
|
|
|
290
319
|
options.swapChainFormat = options.swapChainFormat || navigator.gpu.getPreferredCanvasFormat();
|
|
291
320
|
this._isWebGPU = true;
|
|
292
321
|
this._shaderPlatformName = "WEBGPU";
|
|
293
|
-
this.
|
|
322
|
+
this._renderingCanvas = canvas;
|
|
294
323
|
this._options = options;
|
|
295
324
|
this._mainPassSampleCount = options.antialias ? this._defaultSampleCount : 1;
|
|
296
325
|
this._setupMobileChecks();
|
|
@@ -329,7 +358,7 @@ export class WebGPUEngine extends Engine {
|
|
|
329
358
|
throw Error("WebGPU initializations stopped.");
|
|
330
359
|
})
|
|
331
360
|
.then((adapter) => {
|
|
332
|
-
var _a;
|
|
361
|
+
var _a, _b, _c;
|
|
333
362
|
if (!adapter) {
|
|
334
363
|
throw "Could not retrieve a WebGPU adapter (adapter is null).";
|
|
335
364
|
}
|
|
@@ -337,9 +366,14 @@ export class WebGPUEngine extends Engine {
|
|
|
337
366
|
this._adapter = adapter;
|
|
338
367
|
this._adapterSupportedExtensions = [];
|
|
339
368
|
(_a = this._adapter.features) === null || _a === void 0 ? void 0 : _a.forEach((feature) => this._adapterSupportedExtensions.push(feature));
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
369
|
+
this._adapterSupportedLimits = this._adapter.limits;
|
|
370
|
+
this._adapter.requestAdapterInfo().then((adapterInfo) => {
|
|
371
|
+
this._adapterInfo = adapterInfo;
|
|
372
|
+
});
|
|
373
|
+
const deviceDescriptor = (_b = this._options.deviceDescriptor) !== null && _b !== void 0 ? _b : {};
|
|
374
|
+
const requiredFeatures = (_c = deviceDescriptor === null || deviceDescriptor === void 0 ? void 0 : deviceDescriptor.requiredFeatures) !== null && _c !== void 0 ? _c : (this._options.enableAllFeatures ? this._adapterSupportedExtensions : undefined);
|
|
375
|
+
if (requiredFeatures) {
|
|
376
|
+
const requestedExtensions = requiredFeatures;
|
|
343
377
|
const validExtensions = [];
|
|
344
378
|
for (const extension of requestedExtensions) {
|
|
345
379
|
if (this._adapterSupportedExtensions.indexOf(extension) !== -1) {
|
|
@@ -348,7 +382,13 @@ export class WebGPUEngine extends Engine {
|
|
|
348
382
|
}
|
|
349
383
|
deviceDescriptor.requiredFeatures = validExtensions;
|
|
350
384
|
}
|
|
351
|
-
|
|
385
|
+
if (this._options.setMaximumLimits && !deviceDescriptor.requiredLimits) {
|
|
386
|
+
deviceDescriptor.requiredLimits = {};
|
|
387
|
+
for (const name in this._adapterSupportedLimits) {
|
|
388
|
+
deviceDescriptor.requiredLimits[name] = this._adapterSupportedLimits[name];
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return this._adapter.requestDevice(deviceDescriptor);
|
|
352
392
|
}
|
|
353
393
|
})
|
|
354
394
|
.then((device) => {
|
|
@@ -356,6 +396,7 @@ export class WebGPUEngine extends Engine {
|
|
|
356
396
|
this._device = device;
|
|
357
397
|
this._deviceEnabledExtensions = [];
|
|
358
398
|
(_a = this._device.features) === null || _a === void 0 ? void 0 : _a.forEach((feature) => this._deviceEnabledExtensions.push(feature));
|
|
399
|
+
this._deviceLimits = device.limits;
|
|
359
400
|
let numUncapturedErrors = -1;
|
|
360
401
|
this._device.addEventListener("uncapturederror", (event) => {
|
|
361
402
|
if (++numUncapturedErrors < this.numMaxUncapturedErrors) {
|
|
@@ -367,6 +408,9 @@ export class WebGPUEngine extends Engine {
|
|
|
367
408
|
});
|
|
368
409
|
if (!this._doNotHandleContextLost) {
|
|
369
410
|
(_b = this._device.lost) === null || _b === void 0 ? void 0 : _b.then((info) => {
|
|
411
|
+
if (this._isDisposed) {
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
370
414
|
this._contextWasLost = true;
|
|
371
415
|
Logger.Warn("WebGPU context lost. " + info);
|
|
372
416
|
this.onContextLostObservable.notifyObservers(this);
|
|
@@ -454,16 +498,16 @@ export class WebGPUEngine extends Engine {
|
|
|
454
498
|
// Init caps
|
|
455
499
|
// TODO WEBGPU Real Capability check once limits will be working.
|
|
456
500
|
this._caps = {
|
|
457
|
-
maxTexturesImageUnits:
|
|
458
|
-
maxVertexTextureImageUnits:
|
|
459
|
-
maxCombinedTexturesImageUnits:
|
|
460
|
-
maxTextureSize:
|
|
461
|
-
maxCubemapTextureSize:
|
|
462
|
-
maxRenderTextureSize:
|
|
463
|
-
maxVertexAttribs:
|
|
464
|
-
maxVaryingVectors:
|
|
465
|
-
maxFragmentUniformVectors:
|
|
466
|
-
maxVertexUniformVectors:
|
|
501
|
+
maxTexturesImageUnits: this._deviceLimits.maxSampledTexturesPerShaderStage,
|
|
502
|
+
maxVertexTextureImageUnits: this._deviceLimits.maxSampledTexturesPerShaderStage,
|
|
503
|
+
maxCombinedTexturesImageUnits: this._deviceLimits.maxSampledTexturesPerShaderStage * 2,
|
|
504
|
+
maxTextureSize: this._deviceLimits.maxTextureDimension2D,
|
|
505
|
+
maxCubemapTextureSize: this._deviceLimits.maxTextureDimension2D,
|
|
506
|
+
maxRenderTextureSize: this._deviceLimits.maxTextureDimension2D,
|
|
507
|
+
maxVertexAttribs: this._deviceLimits.maxVertexAttributes,
|
|
508
|
+
maxVaryingVectors: this._deviceLimits.maxInterStageShaderVariables,
|
|
509
|
+
maxFragmentUniformVectors: Math.floor(this._deviceLimits.maxUniformBufferBindingSize / 4),
|
|
510
|
+
maxVertexUniformVectors: Math.floor(this._deviceLimits.maxUniformBufferBindingSize / 4),
|
|
467
511
|
standardDerivatives: true,
|
|
468
512
|
astc: (this._deviceEnabledExtensions.indexOf(WebGPUConstants.FeatureName.TextureCompressionASTC) >= 0 ? true : undefined),
|
|
469
513
|
s3tc: (this._deviceEnabledExtensions.indexOf(WebGPUConstants.FeatureName.TextureCompressionBC) >= 0 ? true : undefined),
|
|
@@ -471,13 +515,13 @@ export class WebGPUEngine extends Engine {
|
|
|
471
515
|
etc1: null,
|
|
472
516
|
etc2: (this._deviceEnabledExtensions.indexOf(WebGPUConstants.FeatureName.TextureCompressionETC2) >= 0 ? true : undefined),
|
|
473
517
|
bptc: this._deviceEnabledExtensions.indexOf(WebGPUConstants.FeatureName.TextureCompressionBC) >= 0 ? true : undefined,
|
|
474
|
-
maxAnisotropy:
|
|
518
|
+
maxAnisotropy: 16,
|
|
475
519
|
uintIndices: true,
|
|
476
520
|
fragmentDepthSupported: true,
|
|
477
521
|
highPrecisionShaderSupported: true,
|
|
478
522
|
colorBufferFloat: true,
|
|
479
523
|
textureFloat: true,
|
|
480
|
-
textureFloatLinearFiltering:
|
|
524
|
+
textureFloatLinearFiltering: this._deviceEnabledExtensions.indexOf(WebGPUConstants.FeatureName.Float32Filterable) >= 0,
|
|
481
525
|
textureFloatRender: true,
|
|
482
526
|
textureHalfFloat: true,
|
|
483
527
|
textureHalfFloatLinearFiltering: true,
|
|
@@ -488,7 +532,7 @@ export class WebGPUEngine extends Engine {
|
|
|
488
532
|
depthTextureExtension: true,
|
|
489
533
|
vertexArrayObject: false,
|
|
490
534
|
instancedArrays: true,
|
|
491
|
-
timerQuery: typeof BigUint64Array !== "undefined" && this.
|
|
535
|
+
timerQuery: typeof BigUint64Array !== "undefined" && this._deviceEnabledExtensions.indexOf(WebGPUConstants.FeatureName.TimestampQuery) !== -1 ? true : undefined,
|
|
492
536
|
supportOcclusionQuery: typeof BigUint64Array !== "undefined",
|
|
493
537
|
canUseTimestampForTimerQuery: true,
|
|
494
538
|
multiview: false,
|
|
@@ -502,7 +546,7 @@ export class WebGPUEngine extends Engine {
|
|
|
502
546
|
supportSRGBBuffers: true,
|
|
503
547
|
supportTransformFeedbacks: false,
|
|
504
548
|
textureMaxLevel: true,
|
|
505
|
-
texture2DArrayMaxLayerCount:
|
|
549
|
+
texture2DArrayMaxLayerCount: this._deviceLimits.maxTextureArrayLayers,
|
|
506
550
|
};
|
|
507
551
|
this._caps.parallelShaderCompile = null;
|
|
508
552
|
this._features = {
|
|
@@ -533,7 +577,10 @@ export class WebGPUEngine extends Engine {
|
|
|
533
577
|
};
|
|
534
578
|
}
|
|
535
579
|
_initializeContextAndSwapChain() {
|
|
536
|
-
|
|
580
|
+
if (!this._renderingCanvas) {
|
|
581
|
+
throw "The rendering canvas has not been set!";
|
|
582
|
+
}
|
|
583
|
+
this._context = this._renderingCanvas.getContext("webgpu");
|
|
537
584
|
this._configureContext();
|
|
538
585
|
this._colorFormat = this._options.swapChainFormat;
|
|
539
586
|
this._mainRenderPassWrapper.colorAttachmentGPUTextures = [new WebGPUHardwareTexture()];
|
|
@@ -546,17 +593,17 @@ export class WebGPUEngine extends Engine {
|
|
|
546
593
|
}
|
|
547
594
|
this.flushFramebuffer(false);
|
|
548
595
|
this._mainTextureExtends = {
|
|
549
|
-
width: this.getRenderWidth(),
|
|
550
|
-
height: this.getRenderHeight(),
|
|
596
|
+
width: this.getRenderWidth(true),
|
|
597
|
+
height: this.getRenderHeight(true),
|
|
551
598
|
depthOrArrayLayers: 1,
|
|
552
599
|
};
|
|
553
|
-
const bufferDataUpdate = new Float32Array([this.getRenderHeight()]);
|
|
600
|
+
const bufferDataUpdate = new Float32Array([this.getRenderHeight(true)]);
|
|
554
601
|
this._bufferManager.setSubData(this._ubInvertY, 4, bufferDataUpdate);
|
|
555
602
|
this._bufferManager.setSubData(this._ubDontInvertY, 4, bufferDataUpdate);
|
|
556
603
|
let mainColorAttachments;
|
|
557
604
|
if (this._options.antialias) {
|
|
558
605
|
const mainTextureDescriptor = {
|
|
559
|
-
label:
|
|
606
|
+
label: `Texture_MainColor_${this._mainTextureExtends.width}x${this._mainTextureExtends.height}_antialiasing`,
|
|
560
607
|
size: this._mainTextureExtends,
|
|
561
608
|
mipLevelCount: 1,
|
|
562
609
|
sampleCount: this._mainPassSampleCount,
|
|
@@ -570,7 +617,13 @@ export class WebGPUEngine extends Engine {
|
|
|
570
617
|
this._mainTexture = this._device.createTexture(mainTextureDescriptor);
|
|
571
618
|
mainColorAttachments = [
|
|
572
619
|
{
|
|
573
|
-
view: this._mainTexture.createView(
|
|
620
|
+
view: this._mainTexture.createView({
|
|
621
|
+
label: "TextureView_MainColor_antialiasing",
|
|
622
|
+
dimension: WebGPUConstants.TextureDimension.E2d,
|
|
623
|
+
format: this._options.swapChainFormat,
|
|
624
|
+
mipLevelCount: 1,
|
|
625
|
+
arrayLayerCount: 1,
|
|
626
|
+
}),
|
|
574
627
|
clearValue: new Color4(0, 0, 0, 1),
|
|
575
628
|
loadOp: WebGPUConstants.LoadOp.Clear,
|
|
576
629
|
storeOp: WebGPUConstants.StoreOp.Store, // don't use StoreOp.Discard, else using several cameras with different viewports or using scissors will fail because we call beginRenderPass / endPass several times for the same color attachment!
|
|
@@ -590,7 +643,7 @@ export class WebGPUEngine extends Engine {
|
|
|
590
643
|
this._mainRenderPassWrapper.depthTextureFormat = this.isStencilEnable ? WebGPUConstants.TextureFormat.Depth24PlusStencil8 : WebGPUConstants.TextureFormat.Depth32Float;
|
|
591
644
|
this._setDepthTextureFormat(this._mainRenderPassWrapper);
|
|
592
645
|
const depthTextureDescriptor = {
|
|
593
|
-
label:
|
|
646
|
+
label: `Texture_MainDepthStencil_${this._mainTextureExtends.width}x${this._mainTextureExtends.height}`,
|
|
594
647
|
size: this._mainTextureExtends,
|
|
595
648
|
mipLevelCount: 1,
|
|
596
649
|
sampleCount: this._mainPassSampleCount,
|
|
@@ -603,7 +656,13 @@ export class WebGPUEngine extends Engine {
|
|
|
603
656
|
}
|
|
604
657
|
this._depthTexture = this._device.createTexture(depthTextureDescriptor);
|
|
605
658
|
const mainDepthAttachment = {
|
|
606
|
-
view: this._depthTexture.createView(
|
|
659
|
+
view: this._depthTexture.createView({
|
|
660
|
+
label: `TextureView_MainDepthStencil_${this._mainTextureExtends.width}x${this._mainTextureExtends.height}`,
|
|
661
|
+
dimension: WebGPUConstants.TextureDimension.E2d,
|
|
662
|
+
format: this._depthTexture.format,
|
|
663
|
+
mipLevelCount: 1,
|
|
664
|
+
arrayLayerCount: 1,
|
|
665
|
+
}),
|
|
607
666
|
depthClearValue: this._clearDepthValue,
|
|
608
667
|
depthLoadOp: WebGPUConstants.LoadOp.Clear,
|
|
609
668
|
depthStoreOp: WebGPUConstants.StoreOp.Store,
|
|
@@ -746,7 +805,7 @@ export class WebGPUEngine extends Engine {
|
|
|
746
805
|
let y = Math.floor(this._viewportCached.y);
|
|
747
806
|
const h = Math.floor(this._viewportCached.w);
|
|
748
807
|
if (!this._currentRenderTarget) {
|
|
749
|
-
y = this.getRenderHeight() - y - h;
|
|
808
|
+
y = this.getRenderHeight(true) - y - h;
|
|
750
809
|
}
|
|
751
810
|
renderPass.setViewport(Math.floor(this._viewportCached.x), y, Math.floor(this._viewportCached.z), h, 0, 1);
|
|
752
811
|
if (this.dbgVerboseLogsForFirstFrames) {
|
|
@@ -1109,10 +1168,10 @@ export class WebGPUEngine extends Engine {
|
|
|
1109
1168
|
}
|
|
1110
1169
|
return defines + source;
|
|
1111
1170
|
}
|
|
1112
|
-
_createPipelineStageDescriptor(vertexShader, fragmentShader, shaderLanguage) {
|
|
1171
|
+
_createPipelineStageDescriptor(vertexShader, fragmentShader, shaderLanguage, disableUniformityAnalysisInVertex, disableUniformityAnalysisInFragment) {
|
|
1113
1172
|
if (this._tintWASM && shaderLanguage === ShaderLanguage.GLSL) {
|
|
1114
|
-
vertexShader = this._tintWASM.convertSpirV2WGSL(vertexShader);
|
|
1115
|
-
fragmentShader = this._tintWASM.convertSpirV2WGSL(fragmentShader);
|
|
1173
|
+
vertexShader = this._tintWASM.convertSpirV2WGSL(vertexShader, disableUniformityAnalysisInVertex);
|
|
1174
|
+
fragmentShader = this._tintWASM.convertSpirV2WGSL(fragmentShader, disableUniformityAnalysisInFragment);
|
|
1116
1175
|
}
|
|
1117
1176
|
return {
|
|
1118
1177
|
vertexStage: {
|
|
@@ -1130,18 +1189,22 @@ export class WebGPUEngine extends Engine {
|
|
|
1130
1189
|
};
|
|
1131
1190
|
}
|
|
1132
1191
|
_compileRawPipelineStageDescriptor(vertexCode, fragmentCode, shaderLanguage) {
|
|
1192
|
+
const disableUniformityAnalysisInVertex = vertexCode.indexOf(disableUniformityAnalysisMarker) >= 0;
|
|
1193
|
+
const disableUniformityAnalysisInFragment = fragmentCode.indexOf(disableUniformityAnalysisMarker) >= 0;
|
|
1133
1194
|
const vertexShader = shaderLanguage === ShaderLanguage.GLSL ? this._compileRawShaderToSpirV(vertexCode, "vertex") : vertexCode;
|
|
1134
1195
|
const fragmentShader = shaderLanguage === ShaderLanguage.GLSL ? this._compileRawShaderToSpirV(fragmentCode, "fragment") : fragmentCode;
|
|
1135
|
-
return this._createPipelineStageDescriptor(vertexShader, fragmentShader, shaderLanguage);
|
|
1196
|
+
return this._createPipelineStageDescriptor(vertexShader, fragmentShader, shaderLanguage, disableUniformityAnalysisInVertex, disableUniformityAnalysisInFragment);
|
|
1136
1197
|
}
|
|
1137
1198
|
_compilePipelineStageDescriptor(vertexCode, fragmentCode, defines, shaderLanguage) {
|
|
1138
1199
|
this.onBeforeShaderCompilationObservable.notifyObservers(this);
|
|
1200
|
+
const disableUniformityAnalysisInVertex = vertexCode.indexOf(disableUniformityAnalysisMarker) >= 0;
|
|
1201
|
+
const disableUniformityAnalysisInFragment = fragmentCode.indexOf(disableUniformityAnalysisMarker) >= 0;
|
|
1139
1202
|
const shaderVersion = "#version 450\n";
|
|
1140
1203
|
const vertexShader = shaderLanguage === ShaderLanguage.GLSL ? this._compileShaderToSpirV(vertexCode, "vertex", defines, shaderVersion) : this._getWGSLShader(vertexCode, "vertex", defines);
|
|
1141
1204
|
const fragmentShader = shaderLanguage === ShaderLanguage.GLSL
|
|
1142
1205
|
? this._compileShaderToSpirV(fragmentCode, "fragment", defines, shaderVersion)
|
|
1143
1206
|
: this._getWGSLShader(fragmentCode, "fragment", defines);
|
|
1144
|
-
const program = this._createPipelineStageDescriptor(vertexShader, fragmentShader, shaderLanguage);
|
|
1207
|
+
const program = this._createPipelineStageDescriptor(vertexShader, fragmentShader, shaderLanguage, disableUniformityAnalysisInVertex, disableUniformityAnalysisInFragment);
|
|
1145
1208
|
this.onAfterShaderCompilationObservable.notifyObservers(this);
|
|
1146
1209
|
return program;
|
|
1147
1210
|
}
|
|
@@ -1364,6 +1427,7 @@ export class WebGPUEngine extends Engine {
|
|
|
1364
1427
|
fullOptions.samples = (_a = options.samples) !== null && _a !== void 0 ? _a : 1;
|
|
1365
1428
|
fullOptions.creationFlags = (_b = options.creationFlags) !== null && _b !== void 0 ? _b : 0;
|
|
1366
1429
|
fullOptions.useSRGBBuffer = (_c = options.useSRGBBuffer) !== null && _c !== void 0 ? _c : false;
|
|
1430
|
+
fullOptions.label = options.label;
|
|
1367
1431
|
}
|
|
1368
1432
|
else {
|
|
1369
1433
|
fullOptions.generateMipMaps = options;
|
|
@@ -1403,6 +1467,7 @@ export class WebGPUEngine extends Engine {
|
|
|
1403
1467
|
texture._cachedWrapU = 0;
|
|
1404
1468
|
texture._cachedWrapV = 0;
|
|
1405
1469
|
texture._useSRGBBuffer = fullOptions.useSRGBBuffer;
|
|
1470
|
+
texture.label = fullOptions.label;
|
|
1406
1471
|
this._internalTexturesCache.push(texture);
|
|
1407
1472
|
if (!delayGPUTextureCreation) {
|
|
1408
1473
|
this._textureHelper.createGPUTextureForInternalTexture(texture, width, height, layers || 1, fullOptions.creationFlags);
|
|
@@ -2104,10 +2169,12 @@ export class WebGPUEngine extends Engine {
|
|
|
2104
2169
|
this._mainRenderPassWrapper.colorAttachmentGPUTextures[0].set(swapChainTexture);
|
|
2105
2170
|
// Resolve in case of MSAA
|
|
2106
2171
|
if (this._options.antialias) {
|
|
2107
|
-
|
|
2172
|
+
viewDescriptorSwapChainAntialiasing.format = swapChainTexture.format;
|
|
2173
|
+
this._mainRenderPassWrapper.renderPassDescriptor.colorAttachments[0].resolveTarget = swapChainTexture.createView(viewDescriptorSwapChainAntialiasing);
|
|
2108
2174
|
}
|
|
2109
2175
|
else {
|
|
2110
|
-
|
|
2176
|
+
viewDescriptorSwapChain.format = swapChainTexture.format;
|
|
2177
|
+
this._mainRenderPassWrapper.renderPassDescriptor.colorAttachments[0].view = swapChainTexture.createView(viewDescriptorSwapChain);
|
|
2111
2178
|
}
|
|
2112
2179
|
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2113
2180
|
if (this._count === undefined) {
|
|
@@ -2518,8 +2585,10 @@ export class WebGPUEngine extends Engine {
|
|
|
2518
2585
|
*/
|
|
2519
2586
|
dispose() {
|
|
2520
2587
|
var _a, _b;
|
|
2588
|
+
this._isDisposed = true;
|
|
2521
2589
|
(_a = this._mainTexture) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
2522
2590
|
(_b = this._depthTexture) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
2591
|
+
this._device.destroy();
|
|
2523
2592
|
super.dispose();
|
|
2524
2593
|
}
|
|
2525
2594
|
//------------------------------------------------------------------------------
|
|
@@ -2531,10 +2600,11 @@ export class WebGPUEngine extends Engine {
|
|
|
2531
2600
|
* @returns a number defining the current render width
|
|
2532
2601
|
*/
|
|
2533
2602
|
getRenderWidth(useScreen = false) {
|
|
2603
|
+
var _a, _b;
|
|
2534
2604
|
if (!useScreen && this._currentRenderTarget) {
|
|
2535
2605
|
return this._currentRenderTarget.width;
|
|
2536
2606
|
}
|
|
2537
|
-
return this.
|
|
2607
|
+
return (_b = (_a = this._renderingCanvas) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
|
|
2538
2608
|
}
|
|
2539
2609
|
/**
|
|
2540
2610
|
* Gets the current render height
|
|
@@ -2542,17 +2612,11 @@ export class WebGPUEngine extends Engine {
|
|
|
2542
2612
|
* @returns a number defining the current render height
|
|
2543
2613
|
*/
|
|
2544
2614
|
getRenderHeight(useScreen = false) {
|
|
2615
|
+
var _a, _b;
|
|
2545
2616
|
if (!useScreen && this._currentRenderTarget) {
|
|
2546
2617
|
return this._currentRenderTarget.height;
|
|
2547
2618
|
}
|
|
2548
|
-
return this.
|
|
2549
|
-
}
|
|
2550
|
-
/**
|
|
2551
|
-
* Gets the HTML canvas attached with the current WebGPU context
|
|
2552
|
-
* @returns a HTML canvas
|
|
2553
|
-
*/
|
|
2554
|
-
getRenderingCanvas() {
|
|
2555
|
-
return this._canvas;
|
|
2619
|
+
return (_b = (_a = this._renderingCanvas) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0;
|
|
2556
2620
|
}
|
|
2557
2621
|
//------------------------------------------------------------------------------
|
|
2558
2622
|
// Errors
|