@babylonjs/core 8.18.0 → 8.19.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 (100) hide show
  1. package/Collisions/intersectionInfo.d.ts +1 -0
  2. package/Collisions/intersectionInfo.js +1 -0
  3. package/Collisions/intersectionInfo.js.map +1 -1
  4. package/Compute/computeShader.d.ts +7 -0
  5. package/Compute/computeShader.js +15 -0
  6. package/Compute/computeShader.js.map +1 -1
  7. package/Engines/Extensions/engine.computeShader.d.ts +2 -1
  8. package/Engines/Extensions/engine.computeShader.js +1 -0
  9. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  10. package/Engines/IDrawContext.d.ts +31 -1
  11. package/Engines/IDrawContext.js.map +1 -1
  12. package/Engines/IMaterialContext.d.ts +1 -0
  13. package/Engines/IMaterialContext.js.map +1 -1
  14. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  15. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +2 -2
  16. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  17. package/Engines/WebGPU/webgpuComputeContext.js +15 -0
  18. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  19. package/Engines/WebGPU/webgpuDrawContext.d.ts +48 -3
  20. package/Engines/WebGPU/webgpuDrawContext.js +81 -13
  21. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  22. package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -0
  23. package/Engines/WebGPU/webgpuMaterialContext.js +1 -0
  24. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  25. package/Engines/WebGPU/webgpuStencilStateComposer.js +7 -3
  26. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  27. package/Engines/abstractEngine.d.ts +4 -1
  28. package/Engines/abstractEngine.js +2 -2
  29. package/Engines/abstractEngine.js.map +1 -1
  30. package/Engines/engine.d.ts +2 -2
  31. package/Engines/nativeEngine.d.ts +1 -1
  32. package/Engines/nativeEngine.js +2 -2
  33. package/Engines/nativeEngine.js.map +1 -1
  34. package/Engines/renderTargetWrapper.d.ts +8 -0
  35. package/Engines/renderTargetWrapper.js +8 -0
  36. package/Engines/renderTargetWrapper.js.map +1 -1
  37. package/Engines/thinEngine.d.ts +2 -3
  38. package/Engines/thinEngine.js +3 -2
  39. package/Engines/thinEngine.js.map +1 -1
  40. package/Engines/webgpuEngine.d.ts +7 -4
  41. package/Engines/webgpuEngine.js +28 -15
  42. package/Engines/webgpuEngine.js.map +1 -1
  43. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +1 -1
  44. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  45. package/FrameGraph/Passes/renderPass.d.ts +8 -0
  46. package/FrameGraph/Passes/renderPass.js +10 -1
  47. package/FrameGraph/Passes/renderPass.js.map +1 -1
  48. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +46 -2
  49. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +62 -15
  50. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  51. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +4 -0
  52. package/FrameGraph/Tasks/Texture/clearTextureTask.js +5 -1
  53. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  54. package/FrameGraph/frameGraphRenderContext.d.ts +14 -5
  55. package/FrameGraph/frameGraphRenderContext.js +34 -14
  56. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  57. package/FrameGraph/frameGraphTextureManager.d.ts +3 -1
  58. package/FrameGraph/frameGraphTextureManager.js +16 -10
  59. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  60. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +1 -0
  61. package/Materials/Node/Blocks/PBR/reflectionBlock.js +4 -1
  62. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  63. package/Materials/Node/nodeMaterial.js +7 -0
  64. package/Materials/Node/nodeMaterial.js.map +1 -1
  65. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  66. package/Materials/PBR/pbrBaseMaterial.js +8 -6
  67. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  68. package/Materials/drawWrapper.d.ts +34 -2
  69. package/Materials/drawWrapper.js +22 -2
  70. package/Materials/drawWrapper.js.map +1 -1
  71. package/Materials/effectRenderer.d.ts +4 -0
  72. package/Materials/effectRenderer.js +2 -1
  73. package/Materials/effectRenderer.js.map +1 -1
  74. package/Materials/index.d.ts +1 -0
  75. package/Materials/index.js +1 -0
  76. package/Materials/index.js.map +1 -1
  77. package/Materials/material.d.ts +8 -1
  78. package/Materials/material.js +21 -1
  79. package/Materials/material.js.map +1 -1
  80. package/Materials/materialHelper.functions.d.ts +3 -1
  81. package/Materials/materialHelper.functions.js +7 -1
  82. package/Materials/materialHelper.functions.js.map +1 -1
  83. package/Materials/shaderMaterial.js +11 -0
  84. package/Materials/shaderMaterial.js.map +1 -1
  85. package/Materials/standardMaterial.d.ts +1 -0
  86. package/Materials/standardMaterial.js +2 -1
  87. package/Materials/standardMaterial.js.map +1 -1
  88. package/Materials/uniformBuffer.d.ts +6 -0
  89. package/Materials/uniformBuffer.js +8 -0
  90. package/Materials/uniformBuffer.js.map +1 -1
  91. package/Meshes/abstractMesh.js +3 -2
  92. package/Meshes/abstractMesh.js.map +1 -1
  93. package/Meshes/mesh.js +6 -0
  94. package/Meshes/mesh.js.map +1 -1
  95. package/Misc/fileTools.js +1 -1
  96. package/Misc/fileTools.js.map +1 -1
  97. package/States/index.d.ts +1 -0
  98. package/States/index.js +1 -0
  99. package/States/index.js.map +1 -1
  100. package/package.json +1 -1
@@ -138,7 +138,7 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
138
138
  /** @internal */
139
139
  readonly _clearReverseDepthValue = 0;
140
140
  /** @internal */
141
- readonly _clearStencilValue = 0;
141
+ _clearStencilValue: number;
142
142
  private readonly _defaultSampleCount;
143
143
  /** @internal */
144
144
  _options: WebGPUEngineOptions;
@@ -216,8 +216,10 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
216
216
  _currentDrawContext: WebGPUDrawContext;
217
217
  /** @internal */
218
218
  _currentMaterialContext: WebGPUMaterialContext;
219
+ private _currentVertexBuffers;
219
220
  private _currentOverrideVertexBuffers;
220
221
  private _currentIndexBuffer;
222
+ private _dummyIndexBuffer;
221
223
  private _colorWriteLocal;
222
224
  private _forceEnableEffect;
223
225
  /**
@@ -464,8 +466,9 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
464
466
  * @param backBuffer defines if the back buffer must be cleared
465
467
  * @param depth defines if the depth buffer must be cleared
466
468
  * @param stencil defines if the stencil buffer must be cleared
469
+ * @param stencilClearValue defines the value to use to clear the stencil buffer (default is 0)
467
470
  */
468
- clear(color: Nullable<IColor4Like>, backBuffer: boolean, depth: boolean, stencil?: boolean): void;
471
+ clear(color: Nullable<IColor4Like>, backBuffer: boolean, depth: boolean, stencil?: boolean, stencilClearValue?: number): void;
469
472
  private _clearFullQuad;
470
473
  /**
471
474
  * Creates a vertex buffer
@@ -525,12 +528,12 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
525
528
  * Bind a list of vertex buffers with the engine
526
529
  * @param vertexBuffers defines the list of vertex buffers to bind
527
530
  * @param indexBuffer defines the index buffer to bind
528
- * @param effect defines the effect associated with the vertex buffers
531
+ * @param _effect defines the effect associated with the vertex buffers
529
532
  * @param overrideVertexBuffers defines optional list of avertex buffers that overrides the entries in vertexBuffers
530
533
  */
531
534
  bindBuffers(vertexBuffers: {
532
535
  [key: string]: Nullable<VertexBuffer>;
533
- }, indexBuffer: Nullable<DataBuffer>, effect: Effect, overrideVertexBuffers?: {
536
+ }, indexBuffer: Nullable<DataBuffer>, _effect: Effect, overrideVertexBuffers?: {
534
537
  [kind: string]: Nullable<VertexBuffer>;
535
538
  }): void;
536
539
  /**
@@ -319,6 +319,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
319
319
  };
320
320
  /** @internal */
321
321
  this._pendingDebugCommands = [];
322
+ this._currentVertexBuffers = {};
322
323
  this._currentOverrideVertexBuffers = null;
323
324
  this._currentIndexBuffer = null;
324
325
  this._colorWriteLocal = true;
@@ -515,6 +516,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
515
516
  size: 1,
516
517
  label: "EmptyVertexBuffer",
517
518
  });
519
+ this._dummyIndexBuffer = this._bufferManager.createBuffer(new Uint16Array([0, 0, 0, 0]), WebGPUConstants.BufferUsage.Storage | WebGPUConstants.BufferUsage.CopyDst, "DummyIndices");
518
520
  this._cacheRenderPipeline = new WebGPUCacheRenderPipelineTree(this._device, this._emptyVertexBuffer);
519
521
  this._depthCullingState = new WebGPUDepthCullingState(this._cacheRenderPipeline);
520
522
  this._stencilStateComposer = new WebGPUStencilStateComposer(this._cacheRenderPipeline);
@@ -1135,12 +1137,16 @@ export class WebGPUEngine extends ThinWebGPUEngine {
1135
1137
  * @param backBuffer defines if the back buffer must be cleared
1136
1138
  * @param depth defines if the depth buffer must be cleared
1137
1139
  * @param stencil defines if the stencil buffer must be cleared
1140
+ * @param stencilClearValue defines the value to use to clear the stencil buffer (default is 0)
1138
1141
  */
1139
- clear(color, backBuffer, depth, stencil = false) {
1142
+ clear(color, backBuffer, depth, stencil = false, stencilClearValue = 0) {
1140
1143
  // Some PGs are using color3...
1141
1144
  if (color && color.a === undefined) {
1142
1145
  color.a = 1;
1143
1146
  }
1147
+ if (stencil) {
1148
+ this._clearStencilValue = stencilClearValue;
1149
+ }
1144
1150
  const hasScissor = this._scissorIsActive();
1145
1151
  if (this.dbgVerboseLogsForFirstFrames) {
1146
1152
  if (this._count === undefined) {
@@ -1218,7 +1224,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
1218
1224
  else {
1219
1225
  view = data;
1220
1226
  }
1221
- const dataBuffer = this._bufferManager.createBuffer(view, WebGPUConstants.BufferUsage.Vertex | WebGPUConstants.BufferUsage.CopyDst, label);
1227
+ const dataBuffer = this._bufferManager.createBuffer(view, WebGPUConstants.BufferUsage.Vertex | WebGPUConstants.BufferUsage.CopyDst | WebGPUConstants.BufferUsage.Storage, label);
1222
1228
  return dataBuffer;
1223
1229
  }
1224
1230
  /**
@@ -1259,7 +1265,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
1259
1265
  is32Bits = false;
1260
1266
  }
1261
1267
  }
1262
- const dataBuffer = this._bufferManager.createBuffer(view, WebGPUConstants.BufferUsage.Index | WebGPUConstants.BufferUsage.CopyDst, label);
1268
+ const dataBuffer = this._bufferManager.createBuffer(view, WebGPUConstants.BufferUsage.Index | WebGPUConstants.BufferUsage.CopyDst | WebGPUConstants.BufferUsage.Storage, label);
1263
1269
  dataBuffer.is32Bits = is32Bits;
1264
1270
  return dataBuffer;
1265
1271
  }
@@ -1380,13 +1386,14 @@ export class WebGPUEngine extends ThinWebGPUEngine {
1380
1386
  * Bind a list of vertex buffers with the engine
1381
1387
  * @param vertexBuffers defines the list of vertex buffers to bind
1382
1388
  * @param indexBuffer defines the index buffer to bind
1383
- * @param effect defines the effect associated with the vertex buffers
1389
+ * @param _effect defines the effect associated with the vertex buffers
1384
1390
  * @param overrideVertexBuffers defines optional list of avertex buffers that overrides the entries in vertexBuffers
1385
1391
  */
1386
- bindBuffers(vertexBuffers, indexBuffer, effect, overrideVertexBuffers) {
1392
+ bindBuffers(vertexBuffers, indexBuffer, _effect, overrideVertexBuffers) {
1393
+ this._currentVertexBuffers = vertexBuffers;
1387
1394
  this._currentIndexBuffer = indexBuffer;
1388
1395
  this._currentOverrideVertexBuffers = overrideVertexBuffers ?? null;
1389
- this._cacheRenderPipeline.setBuffers(vertexBuffers, indexBuffer, this._currentOverrideVertexBuffers);
1396
+ this._cacheRenderPipeline.setBuffers(this._currentVertexBuffers, this._currentIndexBuffer, this._currentOverrideVertexBuffers);
1390
1397
  }
1391
1398
  /**
1392
1399
  * @internal
@@ -1613,7 +1620,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
1613
1620
  * @returns the new context
1614
1621
  */
1615
1622
  createDrawContext() {
1616
- return new WebGPUDrawContext(this._bufferManager);
1623
+ return new WebGPUDrawContext(this._bufferManager, this._dummyIndexBuffer);
1617
1624
  }
1618
1625
  /**
1619
1626
  * @internal
@@ -2461,15 +2468,19 @@ export class WebGPUEngine extends ThinWebGPUEngine {
2461
2468
  ? {
2462
2469
  view: depthMSAATextureView ? depthMSAATextureView : depthTextureView,
2463
2470
  depthClearValue: mustClearDepth ? (this.useReverseDepthBuffer ? this._clearReverseDepthValue : this._clearDepthValue) : undefined,
2464
- depthLoadOp: mustClearDepth ? "clear" /* WebGPUConstants.LoadOp.Clear */ : "load" /* WebGPUConstants.LoadOp.Load */,
2465
- depthStoreOp: "store" /* WebGPUConstants.StoreOp.Store */,
2471
+ depthLoadOp: rtWrapper.depthReadOnly ? undefined : mustClearDepth ? "clear" /* WebGPUConstants.LoadOp.Clear */ : "load" /* WebGPUConstants.LoadOp.Load */,
2472
+ depthStoreOp: rtWrapper.depthReadOnly ? undefined : "store" /* WebGPUConstants.StoreOp.Store */,
2473
+ depthReadOnly: rtWrapper.depthReadOnly,
2466
2474
  stencilClearValue: rtWrapper._depthStencilTextureWithStencil && mustClearStencil ? this._clearStencilValue : undefined,
2467
- stencilLoadOp: !depthTextureHasStencil
2475
+ stencilLoadOp: rtWrapper.stencilReadOnly
2468
2476
  ? undefined
2469
- : rtWrapper._depthStencilTextureWithStencil && mustClearStencil
2470
- ? "clear" /* WebGPUConstants.LoadOp.Clear */
2471
- : "load" /* WebGPUConstants.LoadOp.Load */,
2472
- stencilStoreOp: !depthTextureHasStencil ? undefined : "store" /* WebGPUConstants.StoreOp.Store */,
2477
+ : !depthTextureHasStencil
2478
+ ? undefined
2479
+ : rtWrapper._depthStencilTextureWithStencil && mustClearStencil
2480
+ ? "clear" /* WebGPUConstants.LoadOp.Clear */
2481
+ : "load" /* WebGPUConstants.LoadOp.Load */,
2482
+ stencilStoreOp: rtWrapper.stencilReadOnly ? undefined : !depthTextureHasStencil ? undefined : "store" /* WebGPUConstants.StoreOp.Store */,
2483
+ stencilReadOnly: rtWrapper.stencilReadOnly,
2473
2484
  }
2474
2485
  : undefined,
2475
2486
  occlusionQuerySet: this._occlusionQuery?.hasQueries ? this._occlusionQuery.querySet : undefined,
@@ -2826,6 +2837,8 @@ export class WebGPUEngine extends ThinWebGPUEngine {
2826
2837
  this.applyStates();
2827
2838
  const webgpuPipelineContext = this._currentEffect._pipelineContext;
2828
2839
  this.bindUniformBufferBase(this._currentRenderTarget ? this._ubInvertY : this._ubDontInvertY, 0, WebGPUShaderProcessor.InternalsUBOName);
2840
+ this._currentDrawContext.setVertexPulling(this._currentMaterialContext.useVertexPulling, webgpuPipelineContext, this._currentVertexBuffers, this._cacheRenderPipeline.indexBuffer, // don't use this._currentIndexBuffer, it will have been set to null by _drawArraysType!
2841
+ this._currentOverrideVertexBuffers);
2829
2842
  if (webgpuPipelineContext.uniformBuffer) {
2830
2843
  webgpuPipelineContext.uniformBuffer.update();
2831
2844
  this.bindUniformBufferBase(webgpuPipelineContext.uniformBuffer.getBuffer(), 0, WebGPUShaderProcessor.LeftOvertUBOName);
@@ -2901,7 +2914,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
2901
2914
  }
2902
2915
  // draw
2903
2916
  const nonCompatMode = !this.compatibilityMode && !this._snapshotRendering.record;
2904
- if (nonCompatMode && this._currentDrawContext.indirectDrawBuffer) {
2917
+ if (this._currentDrawContext.indirectDrawBuffer) {
2905
2918
  this._currentDrawContext.setIndirectData(count, instancesCount || 1, start);
2906
2919
  if (drawType === 0) {
2907
2920
  renderPass2.drawIndexedIndirect(this._currentDrawContext.indirectDrawBuffer, 0);