@luma.gl/webgpu 9.2.6 → 9.3.0-alpha.11

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 (137) hide show
  1. package/dist/adapter/helpers/cpu-hotspot-profiler.d.ts +54 -0
  2. package/dist/adapter/helpers/cpu-hotspot-profiler.d.ts.map +1 -0
  3. package/dist/adapter/helpers/cpu-hotspot-profiler.js +26 -0
  4. package/dist/adapter/helpers/cpu-hotspot-profiler.js.map +1 -0
  5. package/dist/adapter/helpers/generate-mipmaps-webgpu.d.ts +7 -0
  6. package/dist/adapter/helpers/generate-mipmaps-webgpu.d.ts.map +1 -0
  7. package/dist/adapter/helpers/generate-mipmaps-webgpu.js +490 -0
  8. package/dist/adapter/helpers/generate-mipmaps-webgpu.js.map +1 -0
  9. package/dist/adapter/helpers/get-bind-group.d.ts +8 -6
  10. package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
  11. package/dist/adapter/helpers/get-bind-group.js +110 -30
  12. package/dist/adapter/helpers/get-bind-group.js.map +1 -1
  13. package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts +3 -1
  14. package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts.map +1 -1
  15. package/dist/adapter/helpers/get-vertex-buffer-layout.js +17 -12
  16. package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
  17. package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
  18. package/dist/adapter/helpers/webgpu-parameters.js +1 -0
  19. package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
  20. package/dist/adapter/resources/webgpu-buffer.d.ts +7 -0
  21. package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
  22. package/dist/adapter/resources/webgpu-buffer.js +58 -15
  23. package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
  24. package/dist/adapter/resources/webgpu-command-buffer.js +1 -1
  25. package/dist/adapter/resources/webgpu-command-buffer.js.map +1 -1
  26. package/dist/adapter/resources/webgpu-command-encoder.d.ts +7 -16
  27. package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
  28. package/dist/adapter/resources/webgpu-command-encoder.js +89 -32
  29. package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
  30. package/dist/adapter/resources/webgpu-compute-pass.d.ts +3 -3
  31. package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
  32. package/dist/adapter/resources/webgpu-compute-pass.js +30 -12
  33. package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
  34. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +7 -9
  35. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
  36. package/dist/adapter/resources/webgpu-compute-pipeline.js +30 -17
  37. package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
  38. package/dist/adapter/resources/webgpu-fence.d.ts +13 -0
  39. package/dist/adapter/resources/webgpu-fence.d.ts.map +1 -0
  40. package/dist/adapter/resources/webgpu-fence.js +33 -0
  41. package/dist/adapter/resources/webgpu-fence.js.map +1 -0
  42. package/dist/adapter/resources/webgpu-framebuffer.d.ts +6 -0
  43. package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
  44. package/dist/adapter/resources/webgpu-framebuffer.js +16 -0
  45. package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
  46. package/dist/adapter/resources/webgpu-pipeline-layout.d.ts +1 -1
  47. package/dist/adapter/resources/webgpu-pipeline-layout.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgpu-pipeline-layout.js +11 -18
  49. package/dist/adapter/resources/webgpu-pipeline-layout.js.map +1 -1
  50. package/dist/adapter/resources/webgpu-query-set.d.ts +33 -4
  51. package/dist/adapter/resources/webgpu-query-set.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgpu-query-set.js +145 -4
  53. package/dist/adapter/resources/webgpu-query-set.js.map +1 -1
  54. package/dist/adapter/resources/webgpu-render-pass.d.ts +6 -3
  55. package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
  56. package/dist/adapter/resources/webgpu-render-pass.js +78 -34
  57. package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
  58. package/dist/adapter/resources/webgpu-render-pipeline.d.ts +14 -10
  59. package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgpu-render-pipeline.js +62 -35
  61. package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
  62. package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgpu-sampler.js +4 -0
  64. package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
  65. package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgpu-shader.js +17 -1
  67. package/dist/adapter/resources/webgpu-shader.js.map +1 -1
  68. package/dist/adapter/resources/webgpu-texture-view.d.ts +6 -0
  69. package/dist/adapter/resources/webgpu-texture-view.d.ts.map +1 -1
  70. package/dist/adapter/resources/webgpu-texture-view.js +47 -11
  71. package/dist/adapter/resources/webgpu-texture-view.js.map +1 -1
  72. package/dist/adapter/resources/webgpu-texture.d.ts +25 -3
  73. package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgpu-texture.js +211 -43
  75. package/dist/adapter/resources/webgpu-texture.js.map +1 -1
  76. package/dist/adapter/resources/webgpu-vertex-array.js +1 -1
  77. package/dist/adapter/resources/webgpu-vertex-array.js.map +1 -1
  78. package/dist/adapter/webgpu-adapter.d.ts.map +1 -1
  79. package/dist/adapter/webgpu-adapter.js +35 -35
  80. package/dist/adapter/webgpu-adapter.js.map +1 -1
  81. package/dist/adapter/webgpu-canvas-context.d.ts +6 -3
  82. package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
  83. package/dist/adapter/webgpu-canvas-context.js +90 -30
  84. package/dist/adapter/webgpu-canvas-context.js.map +1 -1
  85. package/dist/adapter/webgpu-device.d.ts +12 -2
  86. package/dist/adapter/webgpu-device.d.ts.map +1 -1
  87. package/dist/adapter/webgpu-device.js +176 -19
  88. package/dist/adapter/webgpu-device.js.map +1 -1
  89. package/dist/adapter/webgpu-presentation-context.d.ts +25 -0
  90. package/dist/adapter/webgpu-presentation-context.d.ts.map +1 -0
  91. package/dist/adapter/webgpu-presentation-context.js +144 -0
  92. package/dist/adapter/webgpu-presentation-context.js.map +1 -0
  93. package/dist/dist.dev.js +8160 -551
  94. package/dist/dist.min.js +171 -6
  95. package/dist/index.cjs +2001 -414
  96. package/dist/index.cjs.map +4 -4
  97. package/dist/index.d.ts +2 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +2 -0
  100. package/dist/index.js.map +1 -1
  101. package/dist/wgsl/get-shader-layout-wgsl.d.ts +8 -0
  102. package/dist/wgsl/get-shader-layout-wgsl.d.ts.map +1 -0
  103. package/dist/wgsl/get-shader-layout-wgsl.js +144 -0
  104. package/dist/wgsl/get-shader-layout-wgsl.js.map +1 -0
  105. package/package.json +6 -5
  106. package/src/adapter/helpers/cpu-hotspot-profiler.ts +70 -0
  107. package/src/adapter/helpers/generate-mipmaps-webgpu.ts +583 -0
  108. package/src/adapter/helpers/get-bind-group.ts +182 -42
  109. package/src/adapter/helpers/get-vertex-buffer-layout.ts +31 -12
  110. package/src/adapter/helpers/webgpu-parameters.ts +2 -0
  111. package/src/adapter/resources/webgpu-buffer.ts +61 -15
  112. package/src/adapter/resources/webgpu-command-buffer.ts +1 -1
  113. package/src/adapter/resources/webgpu-command-encoder.ts +129 -50
  114. package/src/adapter/resources/webgpu-compute-pass.ts +48 -13
  115. package/src/adapter/resources/webgpu-compute-pipeline.ts +49 -18
  116. package/src/adapter/resources/webgpu-fence.ts +38 -0
  117. package/src/adapter/resources/webgpu-framebuffer.ts +21 -0
  118. package/src/adapter/resources/webgpu-pipeline-layout.ts +18 -17
  119. package/src/adapter/resources/webgpu-query-set.ts +185 -9
  120. package/src/adapter/resources/webgpu-render-pass.ts +92 -40
  121. package/src/adapter/resources/webgpu-render-pipeline.ts +90 -44
  122. package/src/adapter/resources/webgpu-sampler.ts +5 -0
  123. package/src/adapter/resources/webgpu-shader.ts +16 -1
  124. package/src/adapter/resources/webgpu-texture-view.ts +51 -11
  125. package/src/adapter/resources/webgpu-texture.ts +281 -101
  126. package/src/adapter/resources/webgpu-vertex-array.ts +1 -1
  127. package/src/adapter/webgpu-adapter.ts +41 -43
  128. package/src/adapter/webgpu-canvas-context.ts +108 -41
  129. package/src/adapter/webgpu-device.ts +243 -25
  130. package/src/adapter/webgpu-presentation-context.ts +180 -0
  131. package/src/index.ts +3 -0
  132. package/src/wgsl/get-shader-layout-wgsl.ts +165 -0
  133. package/dist/adapter/helpers/accessor-to-format.d.ts +0 -1
  134. package/dist/adapter/helpers/accessor-to-format.d.ts.map +0 -1
  135. package/dist/adapter/helpers/accessor-to-format.js +0 -105
  136. package/dist/adapter/helpers/accessor-to-format.js.map +0 -1
  137. package/src/adapter/helpers/accessor-to-format.ts +0 -104
@@ -6,7 +6,7 @@ export class WebGPUCommandBuffer extends CommandBuffer {
6
6
  device;
7
7
  handle;
8
8
  constructor(commandEncoder, props) {
9
- super(commandEncoder.device, {});
9
+ super(commandEncoder.device, props);
10
10
  this.device = commandEncoder.device;
11
11
  this.handle =
12
12
  this.props.handle ||
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-command-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-buffer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAK5C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,MAAM,CAAe;IACrB,MAAM,CAAmB;IAElC,YAAY,cAAoC,EAAE,KAAyB;QACzE,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC3B,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,wBAAwB;iBAC7C,CAAC,CAAC;IACP,CAAC;CACF"}
1
+ {"version":3,"file":"webgpu-command-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-buffer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAK5C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,MAAM,CAAe;IACrB,MAAM,CAAmB;IAElC,YAAY,cAAoC,EAAE,KAAyB;QACzE,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC3B,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,wBAAwB;iBAC7C,CAAC,CAAC;IACP,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import type { RenderPassProps, ComputePassProps, CopyTextureToTextureOptions, CopyTextureToBufferOptions } from '@luma.gl/core';
2
- import { CommandEncoder, CommandEncoderProps, Buffer, Texture } from '@luma.gl/core';
1
+ import type { CommandBufferProps, RenderPassProps, ComputePassProps, CopyBufferToTextureOptions, CopyTextureToTextureOptions, CopyTextureToBufferOptions } from '@luma.gl/core';
2
+ import { CommandEncoder, CommandEncoderProps, Buffer } from '@luma.gl/core';
3
3
  import { WebGPUDevice } from "../webgpu-device.js";
4
4
  import { WebGPUCommandBuffer } from "./webgpu-command-buffer.js";
5
5
  import { WebGPURenderPass } from "./webgpu-render-pass.js";
@@ -10,13 +10,13 @@ export declare class WebGPUCommandEncoder extends CommandEncoder {
10
10
  readonly handle: GPUCommandEncoder;
11
11
  constructor(device: WebGPUDevice, props?: CommandEncoderProps);
12
12
  destroy(): void;
13
- finish(props?: CommandEncoderProps): WebGPUCommandBuffer;
13
+ finish(props?: CommandBufferProps): WebGPUCommandBuffer;
14
14
  /**
15
15
  * Allows a render pass to begin against a canvas context
16
16
  * @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
17
17
  */
18
- beginRenderPass(props: RenderPassProps): WebGPURenderPass;
19
- beginComputePass(props: ComputePassProps): WebGPUComputePass;
18
+ beginRenderPass(props?: RenderPassProps): WebGPURenderPass;
19
+ beginComputePass(props?: ComputePassProps): WebGPUComputePass;
20
20
  copyBufferToBuffer(options: {
21
21
  sourceBuffer: Buffer;
22
22
  sourceOffset?: number;
@@ -24,17 +24,7 @@ export declare class WebGPUCommandEncoder extends CommandEncoder {
24
24
  destinationOffset?: number;
25
25
  size?: number;
26
26
  }): void;
27
- copyBufferToTexture(options: {
28
- sourceBuffer: Buffer;
29
- offset?: number;
30
- bytesPerRow: number;
31
- rowsPerImage: number;
32
- destinationTexture: Texture;
33
- mipLevel?: number;
34
- aspect?: 'all' | 'stencil-only' | 'depth-only';
35
- origin?: number[] | [number, number, number];
36
- extent?: number[] | [number, number, number];
37
- }): void;
27
+ copyBufferToTexture(options: CopyBufferToTextureOptions): void;
38
28
  copyTextureToBuffer(options: CopyTextureToBufferOptions): void;
39
29
  copyTextureToTexture(options: CopyTextureToTextureOptions): void;
40
30
  pushDebugGroup(groupLabel: string): void;
@@ -45,5 +35,6 @@ export declare class WebGPUCommandEncoder extends CommandEncoder {
45
35
  queryCount?: number;
46
36
  destinationOffset?: number;
47
37
  }): void;
38
+ writeTimestamp(querySet: WebGPUQuerySet, queryIndex: number): void;
48
39
  }
49
40
  //# sourceMappingURL=webgpu-command-encoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-command-encoder.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAElD,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEvB,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,mBAAwB;IAaxD,OAAO,IAAI,IAAI;IAExB,MAAM,CAAC,KAAK,CAAC,EAAE,mBAAmB,GAAG,mBAAmB;IAaxD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB;IAIzD,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB;IAO5D,kBAAkB,CAAC,OAAO,EAC1B;QACE,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAYR,mBAAmB,CAAC,OAAO,EAC3B;QACE,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QAErB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;QAE/C,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9C,GAAG,IAAI;IAyBR,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAW9D,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI;IAWvD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,eAAe,CACtB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GACA,IAAI;CAWR"}
1
+ {"version":3,"file":"webgpu-command-encoder.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD,OAAO,EAAC,cAAc,EAAC,8BAA2B;AAElD,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEvB,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,mBAAwB;IAaxD,OAAO,IAAI,IAAI;IAIxB,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,mBAAmB;IAcvD;;;OAGG;IACH,eAAe,CAAC,KAAK,GAAE,eAAoB,GAAG,gBAAgB;IAQ9D,gBAAgB,CAAC,KAAK,GAAE,gBAAqB,GAAG,iBAAiB;IAWjE,kBAAkB,CAAC,OAAO,EAAE;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAYR,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IA8B9D,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAgC9D,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI;IA2CvD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,eAAe,CACtB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GACA,IAAI;IAYP,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAqBnE"}
@@ -20,7 +20,9 @@ export class WebGPUCommandEncoder extends CommandEncoder {
20
20
  });
21
21
  this.handle.label = this.props.id;
22
22
  }
23
- destroy() { }
23
+ destroy() {
24
+ this.destroyResource();
25
+ }
24
26
  finish(props) {
25
27
  this.device.pushErrorScope('validation');
26
28
  const commandBuffer = new WebGPUCommandBuffer(this, {
@@ -31,64 +33,104 @@ export class WebGPUCommandEncoder extends CommandEncoder {
31
33
  this.device.reportError(new Error(message), this)();
32
34
  this.device.debug();
33
35
  });
36
+ this.destroy();
34
37
  return commandBuffer;
35
38
  }
36
39
  /**
37
40
  * Allows a render pass to begin against a canvas context
38
41
  * @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
39
42
  */
40
- beginRenderPass(props) {
41
- return new WebGPURenderPass(this.device, props);
43
+ beginRenderPass(props = {}) {
44
+ return new WebGPURenderPass(this.device, this._applyTimeProfilingToPassProps(props), this.handle);
42
45
  }
43
- beginComputePass(props) {
44
- return new WebGPUComputePass(this.device, props);
46
+ beginComputePass(props = {}) {
47
+ return new WebGPUComputePass(this.device, this._applyTimeProfilingToPassProps(props), this.handle);
45
48
  }
46
49
  // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
47
50
  // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
48
51
  copyBufferToBuffer(options) {
49
52
  const webgpuSourceBuffer = options.sourceBuffer;
50
- const WebGPUDestinationBuffer = options.destinationBuffer;
51
- this.handle.copyBufferToBuffer(webgpuSourceBuffer.handle, options.sourceOffset ?? 0, WebGPUDestinationBuffer.handle, options.destinationOffset ?? 0, options.size ?? 0);
53
+ const webgpuDestinationBuffer = options.destinationBuffer;
54
+ this.handle.copyBufferToBuffer(webgpuSourceBuffer.handle, options.sourceOffset ?? 0, webgpuDestinationBuffer.handle, options.destinationOffset ?? 0, options.size ?? 0);
52
55
  }
53
56
  copyBufferToTexture(options) {
54
57
  const webgpuSourceBuffer = options.sourceBuffer;
55
- const WebGPUDestinationTexture = options.destinationTexture;
58
+ const webgpuDestinationTexture = options.destinationTexture;
59
+ const copyOrigin = options.origin ?? [0, 0, 0];
60
+ const copySize = options.size;
56
61
  this.handle.copyBufferToTexture({
57
62
  buffer: webgpuSourceBuffer.handle,
58
- offset: options.offset ?? 0,
63
+ offset: options.byteOffset ?? 0,
59
64
  bytesPerRow: options.bytesPerRow,
60
65
  rowsPerImage: options.rowsPerImage
61
66
  }, {
62
- texture: WebGPUDestinationTexture.handle,
67
+ texture: webgpuDestinationTexture.handle,
63
68
  mipLevel: options.mipLevel ?? 0,
64
- origin: options.origin ?? {}
65
- // aspect: options.aspect
69
+ origin: {
70
+ x: copyOrigin[0] ?? 0,
71
+ y: copyOrigin[1] ?? 0,
72
+ z: copyOrigin[2] ?? 0
73
+ },
74
+ aspect: options.aspect
66
75
  }, {
67
- // @ts-ignore
68
- width: options.extent?.[0],
69
- height: options.extent?.[1],
70
- depthOrArrayLayers: options.extent?.[2]
76
+ width: copySize[0],
77
+ height: copySize[1],
78
+ depthOrArrayLayers: copySize[2]
71
79
  });
72
80
  }
73
81
  copyTextureToBuffer(options) {
74
- // this.handle.copyTextureToBuffer(
75
- // // source
76
- // {},
77
- // // destination
78
- // {},
79
- // // copySize
80
- // {}
81
- // );
82
+ const { sourceTexture, destinationBuffer, origin = [0, 0, 0], byteOffset = 0, width, height, depthOrArrayLayers, mipLevel, aspect } = options;
83
+ const webgpuSourceTexture = sourceTexture;
84
+ webgpuSourceTexture.copyToBuffer(this.handle, {
85
+ x: origin[0] ?? 0,
86
+ y: origin[1] ?? 0,
87
+ z: origin[2] ?? 0,
88
+ width,
89
+ height,
90
+ depthOrArrayLayers,
91
+ mipLevel,
92
+ aspect,
93
+ byteOffset,
94
+ bytesPerRow: options.bytesPerRow,
95
+ rowsPerImage: options.rowsPerImage
96
+ }, destinationBuffer);
82
97
  }
83
98
  copyTextureToTexture(options) {
84
- // this.handle.copyTextureToTexture(
85
- // // source
86
- // {},
87
- // // destination
88
- // {},
89
- // // copySize
90
- // {}
91
- // );
99
+ const webgpuSourceTexture = options.sourceTexture;
100
+ const webgpuDestinationTexture = options.destinationTexture;
101
+ const sourceRegion = webgpuSourceTexture._normalizeTextureReadOptions({
102
+ x: options.origin?.[0] ?? 0,
103
+ y: options.origin?.[1] ?? 0,
104
+ z: options.origin?.[2] ?? 0,
105
+ width: options.width,
106
+ height: options.height,
107
+ depthOrArrayLayers: options.depthOrArrayLayers,
108
+ mipLevel: options.mipLevel ?? 0,
109
+ aspect: options.aspect ?? 'all'
110
+ });
111
+ this.handle.copyTextureToTexture({
112
+ texture: webgpuSourceTexture.handle,
113
+ mipLevel: sourceRegion.mipLevel,
114
+ origin: {
115
+ x: sourceRegion.x,
116
+ y: sourceRegion.y,
117
+ z: sourceRegion.z
118
+ },
119
+ aspect: sourceRegion.aspect
120
+ }, {
121
+ texture: webgpuDestinationTexture.handle,
122
+ mipLevel: options.destinationMipLevel ?? 0,
123
+ origin: {
124
+ x: options.destinationOrigin?.[0] ?? 0,
125
+ y: options.destinationOrigin?.[1] ?? 0,
126
+ z: options.destinationOrigin?.[2] ?? 0
127
+ },
128
+ aspect: options.destinationAspect ?? sourceRegion.aspect
129
+ }, {
130
+ width: sourceRegion.width,
131
+ height: sourceRegion.height,
132
+ depthOrArrayLayers: sourceRegion.depthOrArrayLayers
133
+ });
92
134
  }
93
135
  pushDebugGroup(groupLabel) {
94
136
  this.handle.pushDebugGroup(groupLabel);
@@ -104,6 +146,21 @@ export class WebGPUCommandEncoder extends CommandEncoder {
104
146
  const webgpuBuffer = destination;
105
147
  this.handle.resolveQuerySet(webgpuQuerySet.handle, options?.firstQuery || 0, options?.queryCount || querySet.props.count - (options?.firstQuery || 0), webgpuBuffer.handle, options?.destinationOffset || 0);
106
148
  }
149
+ writeTimestamp(querySet, queryIndex) {
150
+ querySet._invalidateResults();
151
+ const writeTimestamp = this.handle.writeTimestamp;
152
+ if (writeTimestamp) {
153
+ writeTimestamp.call(this.handle, querySet.handle, queryIndex);
154
+ return;
155
+ }
156
+ const computePass = this.handle.beginComputePass({
157
+ timestampWrites: {
158
+ querySet: querySet.handle,
159
+ beginningOfPassWriteIndex: queryIndex
160
+ }
161
+ });
162
+ computePass.end();
163
+ }
107
164
  }
108
165
  /*
109
166
  // setDataFromTypedArray(data): this {
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-command-encoder.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-command-encoder.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAUpC,OAAO,EAAC,cAAc,EAA8B,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAC,mBAAmB,EAAC,mCAAgC;AAE5D,OAAO,EAAC,gBAAgB,EAAC,gCAA6B;AACtD,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAIxD,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAC7C,MAAM,CAAe;IACrB,MAAM,CAAoB;IAEnC,YAAY,MAAoB,EAAE,QAA6B,EAAE;QAC/D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM;YACT,KAAK,CAAC,MAAM;gBACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC;oBACtC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,qCAAqC;oBACrC,wDAAwD;iBACzD,CAAC,CAAC;QACL,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACpC,CAAC;IAEQ,OAAO;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE;YAClD,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,wBAAwB;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,GAAG,IAAI,sBAAsB,KAAK,CAAC,OAAO,8CAA8C,CAAC;YACzG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,QAAyB,EAAE;QACzC,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAC1C,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,QAA0B,EAAE;QAC3C,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAC1C,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,8FAA8F;IAE9F,kBAAkB,CAAC,OAMlB;QACC,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAA4B,CAAC;QAChE,MAAM,uBAAuB,GAAG,OAAO,CAAC,iBAAiC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAC5B,kBAAkB,CAAC,MAAM,EACzB,OAAO,CAAC,YAAY,IAAI,CAAC,EACzB,uBAAuB,CAAC,MAAM,EAC9B,OAAO,CAAC,iBAAiB,IAAI,CAAC,EAC9B,OAAO,CAAC,IAAI,IAAI,CAAC,CAClB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAmC;QACrD,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAA4B,CAAC;QAChE,MAAM,wBAAwB,GAAG,OAAO,CAAC,kBAAmC,CAAC;QAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC7B;YACE,MAAM,EAAE,kBAAkB,CAAC,MAAM;YACjC,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;YAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,EACD;YACE,OAAO,EAAE,wBAAwB,CAAC,MAAM;YACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;YAC/B,MAAM,EAAE;gBACN,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrB,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrB,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;aACtB;YACD,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,EACD;YACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YACnB,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;SAChC,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAmC;QACrD,MAAM,EACJ,aAAa,EACb,iBAAiB,EACjB,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClB,UAAU,GAAG,CAAC,EACd,KAAK,EACL,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACP,GAAG,OAAO,CAAC;QACZ,MAAM,mBAAmB,GAAG,aAA8B,CAAC;QAC3D,mBAAmB,CAAC,YAAY,CAC9B,IAAI,CAAC,MAAM,EACX;YACE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjB,KAAK;YACL,MAAM;YACN,kBAAkB;YAClB,QAAQ;YACR,MAAM;YACN,UAAU;YACV,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,EACD,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,OAAoC;QACvD,MAAM,mBAAmB,GAAG,OAAO,CAAC,aAA8B,CAAC;QACnE,MAAM,wBAAwB,GAAG,OAAO,CAAC,kBAAmC,CAAC;QAC7E,MAAM,YAAY,GAAG,mBAAmB,CAAC,4BAA4B,CAAC;YACpE,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAC9B;YACE,OAAO,EAAE,mBAAmB,CAAC,MAAM;YACnC,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,MAAM,EAAE;gBACN,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjB,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjB,CAAC,EAAE,YAAY,CAAC,CAAC;aAClB;YACD,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,EACD;YACE,OAAO,EAAE,wBAAwB,CAAC,MAAM;YACxC,QAAQ,EAAE,OAAO,CAAC,mBAAmB,IAAI,CAAC;YAC1C,MAAM,EAAE;gBACN,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACvC;YACD,MAAM,EAAE,OAAO,CAAC,iBAAiB,IAAI,YAAY,CAAC,MAAM;SACzD,EACD;YACE,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,kBAAkB,EAAE,YAAY,CAAC,kBAAkB;SACpD,CACF,CAAC;IACJ,CAAC;IAEQ,cAAc,CAAC,UAAkB;QACxC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEQ,aAAa;QACpB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAEQ,iBAAiB,CAAC,WAAmB;QAC5C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAEQ,eAAe,CACtB,QAAwB,EACxB,WAAmB,EACnB,OAIC;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC;QAChC,MAAM,YAAY,GAAG,WAA2B,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,eAAe,CACzB,cAAc,CAAC,MAAM,EACrB,OAAO,EAAE,UAAU,IAAI,CAAC,EACxB,OAAO,EAAE,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,EACxE,YAAY,CAAC,MAAM,EACnB,OAAO,EAAE,iBAAiB,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,QAAwB,EAAE,UAAkB;QACzD,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,MAAM,cAAc,GAClB,IAAI,CAAC,MAGN,CAAC,cAAc,CAAC;QAEjB,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC/C,eAAe,EAAE;gBACf,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,yBAAyB,EAAE,UAAU;aACtC;SACF,CAAC,CAAC;QACH,WAAW,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG"}
@@ -1,11 +1,11 @@
1
- import { ComputePass, ComputePassProps, ComputePipeline, Buffer, Binding } from '@luma.gl/core';
1
+ import { ComputePass, ComputePassProps, ComputePipeline, Buffer, Bindings, BindingsByGroup } from '@luma.gl/core';
2
2
  import { WebGPUDevice } from "../webgpu-device.js";
3
3
  import { WebGPUComputePipeline } from "./webgpu-compute-pipeline.js";
4
4
  export declare class WebGPUComputePass extends ComputePass {
5
5
  readonly device: WebGPUDevice;
6
6
  readonly handle: GPUComputePassEncoder;
7
7
  _webgpuPipeline: WebGPUComputePipeline | null;
8
- constructor(device: WebGPUDevice, props: ComputePassProps);
8
+ constructor(device: WebGPUDevice, props?: ComputePassProps, commandEncoder?: GPUCommandEncoder);
9
9
  /** @note no WebGPU destroy method, just gc */
10
10
  destroy(): void;
11
11
  end(): void;
@@ -14,7 +14,7 @@ export declare class WebGPUComputePass extends ComputePass {
14
14
  * Sets an array of bindings (uniform buffers, samplers, textures, ...)
15
15
  * TODO - still some API confusion - does this method go here or on the pipeline?
16
16
  */
17
- setBindings(bindings: Binding[]): void;
17
+ setBindings(bindings: Bindings | BindingsByGroup): void;
18
18
  /**
19
19
  * Dispatch work to be performed with the current ComputePipeline.
20
20
  * @param x X dimension of the grid of work groups to dispatch.
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,OAAO,EAAC,qBAAqB,EAAC,qCAAkC;AAGhE,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAQ;gBAEzC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB;IAyBzD,8CAA8C;IACrC,OAAO,IAAI,IAAI;IAExB,GAAG,IAAI,IAAI;IAIX,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAO5C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAMtC;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,kBAAkB,GAAE,MAAU,GAAG,IAAI;IAK9E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAG7C"}
1
+ {"version":3,"file":"webgpu-compute-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,QAAQ,EACR,eAAe,EAEhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,OAAO,EAAC,qBAAqB,EAAC,qCAAkC;AAGhE,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAQ;gBAGnD,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,gBAAqB,EAC5B,cAAc,GAAE,iBAAgD;IA4BlE,8CAA8C;IACrC,OAAO,IAAI,IAAI;IAIxB,GAAG,IAAI,IAAI;IAQX,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAgB5C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,IAAI;IAYvD;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,kBAAkB,GAAE,MAAU,GAAG,IAAI;IAK9E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,aAAa,IAAI,IAAI;IAIrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAG7C"}
@@ -1,52 +1,70 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { ComputePass } from '@luma.gl/core';
4
+ import { ComputePass, _getDefaultBindGroupFactory } from '@luma.gl/core';
5
5
  export class WebGPUComputePass extends ComputePass {
6
6
  device;
7
7
  handle;
8
8
  _webgpuPipeline = null;
9
- constructor(device, props) {
9
+ constructor(device, props = {}, commandEncoder = device.commandEncoder.handle) {
10
10
  super(device, props);
11
11
  this.device = device;
12
+ const { props: computePassProps } = this;
12
13
  // Set up queries
13
14
  let timestampWrites;
14
- if (device.features.has('timestamp-query')) {
15
- const webgpuQuerySet = props.timestampQuerySet;
15
+ if (computePassProps.timestampQuerySet) {
16
+ const webgpuQuerySet = computePassProps.timestampQuerySet;
16
17
  if (webgpuQuerySet) {
18
+ webgpuQuerySet._invalidateResults();
17
19
  timestampWrites = {
18
20
  querySet: webgpuQuerySet.handle,
19
- beginningOfPassWriteIndex: props.beginTimestampIndex,
20
- endOfPassWriteIndex: props.endTimestampIndex
21
+ beginningOfPassWriteIndex: computePassProps.beginTimestampIndex,
22
+ endOfPassWriteIndex: computePassProps.endTimestampIndex
21
23
  };
22
24
  }
23
25
  }
24
26
  this.handle =
25
27
  this.props.handle ||
26
- device.commandEncoder.handle.beginComputePass({
28
+ commandEncoder.beginComputePass({
27
29
  label: this.props.id,
28
30
  timestampWrites
29
31
  });
30
32
  }
31
33
  /** @note no WebGPU destroy method, just gc */
32
- destroy() { }
34
+ destroy() {
35
+ this.destroyResource();
36
+ }
33
37
  end() {
38
+ if (this.destroyed) {
39
+ return;
40
+ }
34
41
  this.handle.end();
42
+ this.destroy();
35
43
  }
36
44
  setPipeline(pipeline) {
37
45
  const wgpuPipeline = pipeline;
38
46
  this.handle.setPipeline(wgpuPipeline.handle);
39
47
  this._webgpuPipeline = wgpuPipeline;
40
- this.setBindings([]);
48
+ const bindGroups = _getDefaultBindGroupFactory(this.device).getBindGroups(this._webgpuPipeline, this._webgpuPipeline._getBindingsByGroupWebGPU(), this._webgpuPipeline._getBindGroupCacheKeysWebGPU());
49
+ for (const [group, bindGroup] of Object.entries(bindGroups)) {
50
+ if (bindGroup) {
51
+ this.handle.setBindGroup(Number(group), bindGroup);
52
+ }
53
+ }
41
54
  }
42
55
  /**
43
56
  * Sets an array of bindings (uniform buffers, samplers, textures, ...)
44
57
  * TODO - still some API confusion - does this method go here or on the pipeline?
45
58
  */
46
59
  setBindings(bindings) {
47
- // @ts-expect-error
48
- const bindGroup = this._webgpuPipeline._getBindGroup();
49
- this.handle.setBindGroup(0, bindGroup);
60
+ const bindGroups = (this._webgpuPipeline &&
61
+ _getDefaultBindGroupFactory(this.device).getBindGroups(this._webgpuPipeline, bindings)) ||
62
+ {};
63
+ for (const [group, bindGroup] of Object.entries(bindGroups)) {
64
+ if (bindGroup) {
65
+ this.handle.setBindGroup(Number(group), bindGroup);
66
+ }
67
+ }
50
68
  }
51
69
  /**
52
70
  * Dispatch work to be performed with the current ComputePipeline.
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pass.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,WAAW,EAAqD,MAAM,eAAe,CAAC;AAM9F,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACvC,MAAM,CAAe;IACrB,MAAM,CAAwB;IAEvC,eAAe,GAAiC,IAAI,CAAC;IAErD,YAAY,MAAoB,EAAE,KAAuB;QACvD,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,iBAAiB;QACjB,IAAI,eAA0D,CAAC;QAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAmC,CAAC;YACjE,IAAI,cAAc,EAAE,CAAC;gBACnB,eAAe,GAAG;oBAChB,QAAQ,EAAE,cAAc,CAAC,MAAM;oBAC/B,yBAAyB,EAAE,KAAK,CAAC,mBAAmB;oBACpD,mBAAmB,EAAE,KAAK,CAAC,iBAAiB;iBAC7C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,eAAe;iBAChB,CAAC,CAAC;IACP,CAAC;IAED,8CAA8C;IACrC,OAAO,KAAU,CAAC;IAE3B,GAAG;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,WAAW,CAAC,QAAyB;QACnC,MAAM,YAAY,GAAG,QAAiC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAmB;QAC7B,mBAAmB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,CAAS,EAAE,CAAU,EAAE,CAAU;QACxC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAsB,EAAE,qBAA6B,CAAC;QACrE,MAAM,YAAY,GAAG,cAA8B,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAClF,CAAC;IAED,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,iBAAiB,CAAC,WAAmB;QACnC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"webgpu-compute-pass.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,19 @@
1
- import { ComputePipeline, ComputePipelineProps, Binding } from '@luma.gl/core';
1
+ import { ComputePipeline, ComputePipelineProps, Bindings, BindingsByGroup } from '@luma.gl/core';
2
2
  import { WebGPUDevice } from "../webgpu-device.js";
3
3
  /** Creates a new compute pipeline when parameters change */
4
4
  export declare class WebGPUComputePipeline extends ComputePipeline {
5
5
  readonly device: WebGPUDevice;
6
6
  readonly handle: GPUComputePipeline;
7
- /** For internal use to create BindGroups */
8
- private _bindGroupLayout;
9
- private _bindGroup;
10
- /** For internal use to create BindGroups */
11
- private _bindings;
7
+ private _bindingsByGroup;
8
+ private _bindGroupCacheKeysByGroup;
12
9
  constructor(device: WebGPUDevice, props: ComputePipelineProps);
13
10
  /**
14
11
  * @todo Use renderpass.setBindings() ?
15
12
  * @todo Do we want to expose BindGroups in the API and remove this?
16
13
  */
17
- setBindings(bindings: Record<string, Binding>): void;
18
- /** Return a bind group created by setBindings */
19
- _getBindGroup(): GPUBindGroup;
14
+ setBindings(bindings: Bindings | BindingsByGroup): void;
15
+ _getBindGroups(bindings?: Bindings | BindingsByGroup, bindGroupCacheKeys?: Partial<Record<number, object>>): Partial<Record<number, unknown>>;
16
+ _getBindingsByGroupWebGPU(): BindingsByGroup;
17
+ _getBindGroupCacheKeysWebGPU(): Partial<Record<number, object>>;
20
18
  }
21
19
  //# sourceMappingURL=webgpu-compute-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAK9C,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC,4CAA4C;IAC5C,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,UAAU,CAA6B;IAC/C,4CAA4C;IAC5C,OAAO,CAAC,SAAS,CAA+B;gBAEpC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB;IAmB7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIpD,iDAAiD;IACjD,aAAa;CAWd"}
1
+ {"version":3,"file":"webgpu-compute-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,eAAe,EAGhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAO9C,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,0BAA0B,CAAkC;gBAExD,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB;IAsB7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,IAAI;IAoBvD,cAAc,CACZ,QAAQ,CAAC,EAAE,QAAQ,GAAG,eAAe,EACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACnD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IASnC,yBAAyB,IAAI,eAAe;IAI5C,4BAA4B,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAGhE"}
@@ -1,18 +1,15 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { ComputePipeline } from '@luma.gl/core';
5
- import { getBindGroup } from "../helpers/get-bind-group.js";
4
+ import { ComputePipeline, _getDefaultBindGroupFactory, normalizeBindingsByGroup } from '@luma.gl/core';
5
+ const EMPTY_BIND_GROUPS = {};
6
6
  // COMPUTE PIPELINE
7
7
  /** Creates a new compute pipeline when parameters change */
8
8
  export class WebGPUComputePipeline extends ComputePipeline {
9
9
  device;
10
10
  handle;
11
- /** For internal use to create BindGroups */
12
- _bindGroupLayout = null;
13
- _bindGroup = null;
14
- /** For internal use to create BindGroups */
15
- _bindings = {};
11
+ _bindingsByGroup;
12
+ _bindGroupCacheKeysByGroup;
16
13
  constructor(device, props) {
17
14
  super(device, props);
18
15
  this.device = device;
@@ -28,23 +25,39 @@ export class WebGPUComputePipeline extends ComputePipeline {
28
25
  },
29
26
  layout: 'auto'
30
27
  });
28
+ this._bindingsByGroup = EMPTY_BIND_GROUPS;
29
+ this._bindGroupCacheKeysByGroup = {};
31
30
  }
32
31
  /**
33
32
  * @todo Use renderpass.setBindings() ?
34
33
  * @todo Do we want to expose BindGroups in the API and remove this?
35
34
  */
36
35
  setBindings(bindings) {
37
- Object.assign(this._bindings, bindings);
36
+ const nextBindingsByGroup = normalizeBindingsByGroup(this.shaderLayout, bindings);
37
+ for (const [groupKey, groupBindings] of Object.entries(nextBindingsByGroup)) {
38
+ const group = Number(groupKey);
39
+ for (const [name, binding] of Object.entries(groupBindings || {})) {
40
+ const currentGroupBindings = this._bindingsByGroup[group] || {};
41
+ if (currentGroupBindings[name] !== binding) {
42
+ if (!this._bindingsByGroup[group] ||
43
+ this._bindingsByGroup[group] === currentGroupBindings) {
44
+ this._bindingsByGroup[group] = { ...currentGroupBindings };
45
+ }
46
+ this._bindingsByGroup[group][name] = binding;
47
+ this._bindGroupCacheKeysByGroup[group] = {};
48
+ }
49
+ }
50
+ }
38
51
  }
39
- /** Return a bind group created by setBindings */
40
- _getBindGroup() {
41
- // Get hold of the bind group layout. We don't want to do this unless we know there is at least one bind group
42
- this._bindGroupLayout = this._bindGroupLayout || this.handle.getBindGroupLayout(0);
43
- // Set up the bindings
44
- this._bindGroup =
45
- this._bindGroup ||
46
- getBindGroup(this.device.handle, this._bindGroupLayout, this.shaderLayout, this._bindings);
47
- return this._bindGroup;
52
+ _getBindGroups(bindings, bindGroupCacheKeys) {
53
+ const hasExplicitBindings = Boolean(bindings);
54
+ return _getDefaultBindGroupFactory(this.device).getBindGroups(this, hasExplicitBindings ? bindings : this._bindingsByGroup, hasExplicitBindings ? bindGroupCacheKeys : this._bindGroupCacheKeysByGroup);
55
+ }
56
+ _getBindingsByGroupWebGPU() {
57
+ return this._bindingsByGroup;
58
+ }
59
+ _getBindGroupCacheKeysWebGPU() {
60
+ return this._bindGroupCacheKeysByGroup;
48
61
  }
49
62
  }
50
63
  //# sourceMappingURL=webgpu-compute-pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pipeline.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,eAAe,EAAgC,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,qCAAkC;AAIvD,mBAAmB;AAEnB,4DAA4D;AAC5D,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAC/C,MAAM,CAAe;IACrB,MAAM,CAAqB;IAEpC,4CAA4C;IACpC,gBAAgB,GAA8B,IAAI,CAAC;IACnD,UAAU,GAAwB,IAAI,CAAC;IAC/C,4CAA4C;IACpC,SAAS,GAA4B,EAAE,CAAC;IAEhD,YAAY,MAAoB,EAAE,KAA2B;QAC3D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAsB,CAAC;QAEvD,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,OAAO,EAAE;wBACP,MAAM,EAAE,YAAY,CAAC,MAAM;wBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;wBACjC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;qBAChC;oBACD,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAiC;QAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,aAAa;QACX,8GAA8G;QAC9G,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEnF,sBAAsB;QACtB,IAAI,CAAC,UAAU;YACb,IAAI,CAAC,UAAU;gBACf,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7F,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"webgpu-compute-pipeline.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EACL,eAAe,EAIf,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAIvB,MAAM,iBAAiB,GAAoB,EAAE,CAAC;AAE9C,mBAAmB;AAEnB,4DAA4D;AAC5D,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAC/C,MAAM,CAAe;IACrB,MAAM,CAAqB;IAE5B,gBAAgB,CAAkB;IAClC,0BAA0B,CAAkC;IAEpE,YAAY,MAAoB,EAAE,KAA2B;QAC3D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAsB,CAAC;QAEvD,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,OAAO,EAAE;wBACP,MAAM,EAAE,YAAY,CAAC,MAAM;wBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;wBACjC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;qBAChC;oBACD,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;QAEL,IAAI,CAAC,gBAAgB,GAAG,iBAAiB,CAAC;QAC1C,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAoC;QAC9C,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAClF,KAAK,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClE,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;oBAC3C,IACE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;wBAC7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,oBAAoB,EACrD,CAAC;wBACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAC,GAAG,oBAAoB,EAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;oBAC7C,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,CACZ,QAAqC,EACrC,kBAAoD;QAEpD,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,aAAa,CAC3D,IAAI,EACJ,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EACtD,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAC3E,CAAC;IACJ,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,4BAA4B;QAC1B,OAAO,IAAI,CAAC,0BAA0B,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { Fence, type FenceProps } from '@luma.gl/core';
2
+ import { WebGPUDevice } from "../webgpu-device.js";
3
+ /** WebGPU fence implemented by waiting for submitted work */
4
+ export declare class WebGPUFence extends Fence {
5
+ readonly device: WebGPUDevice;
6
+ readonly handle: null;
7
+ readonly signaled: Promise<void>;
8
+ private _signaled;
9
+ constructor(device: WebGPUDevice, props?: FenceProps);
10
+ isSignaled(): boolean;
11
+ destroy(): void;
12
+ }
13
+ //# sourceMappingURL=webgpu-fence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-fence.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-fence.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,KAAK,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,6DAA6D;AAC7D,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAQ;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,UAAe;IAgBxD,UAAU,IAAI,OAAO;IAIZ,OAAO,IAAI,IAAI;CAGzB"}
@@ -0,0 +1,33 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Fence } from '@luma.gl/core';
5
+ /** WebGPU fence implemented by waiting for submitted work */
6
+ export class WebGPUFence extends Fence {
7
+ device;
8
+ handle = null;
9
+ signaled;
10
+ _signaled = false;
11
+ constructor(device, props = {}) {
12
+ super(device, {});
13
+ this.device = device;
14
+ this.signaled = device.handle.queue
15
+ .onSubmittedWorkDone()
16
+ .then(() => {
17
+ this._signaled = true;
18
+ })
19
+ .catch(error => {
20
+ if (this.device.shouldIgnoreDroppedInstanceError(error)) {
21
+ return;
22
+ }
23
+ throw error;
24
+ });
25
+ }
26
+ isSignaled() {
27
+ return this._signaled;
28
+ }
29
+ destroy() {
30
+ // Nothing to release for WebGPU fence
31
+ }
32
+ }
33
+ //# sourceMappingURL=webgpu-fence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-fence.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-fence.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,KAAK,EAAkB,MAAM,eAAe,CAAC;AAGrD,6DAA6D;AAC7D,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAe;IACrB,MAAM,GAAS,IAAI,CAAC;IACpB,QAAQ,CAAgB;IACzB,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,MAAoB,EAAE,QAAoB,EAAE;QACtD,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK;aAChC,mBAAmB,EAAE;aACrB,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,IAAI,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEQ,OAAO;QACd,sCAAsC;IACxC,CAAC;CACF"}
@@ -13,5 +13,11 @@ export declare class WebGPUFramebuffer extends Framebuffer {
13
13
  readonly depthStencilAttachment: WebGPUTextureView | null;
14
14
  constructor(device: WebGPUDevice, props: FramebufferProps);
15
15
  protected updateAttachments(): void;
16
+ /**
17
+ * Internal-only hook for the cached CanvasContext/PresentationContext swapchain path.
18
+ * Rebinds the long-lived default framebuffer wrapper to the current per-frame color view
19
+ * and optional depth attachment without allocating a new luma.gl Framebuffer object.
20
+ */
21
+ _reinitialize(colorAttachment: WebGPUTextureView, depthStencilAttachment: WebGPUTextureView | null): void;
16
22
  }
17
23
  //# sourceMappingURL=webgpu-framebuffer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-framebuffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,iBAAiB,EAAC,4CAAyC;AAEnE;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,OAAQ;IAEvB,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,CAAM;IACpD,QAAQ,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;gBAErD,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB;IAQzD,SAAS,CAAC,iBAAiB,IAAI,IAAI;CAGpC"}
1
+ {"version":3,"file":"webgpu-framebuffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAC9C,OAAO,EAAC,iBAAiB,EAAC,4CAAyC;AAEnE;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,OAAQ;IAEvB,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,CAAM;IACpD,QAAQ,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;gBAErD,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB;IAQzD,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAInC;;;;OAIG;IACH,aAAa,CACX,eAAe,EAAE,iBAAiB,EAClC,sBAAsB,EAAE,iBAAiB,GAAG,IAAI,GAC/C,IAAI;CAYR"}