@luma.gl/webgpu 9.0.0-alpha.51 → 9.0.0-alpha.53

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.
@@ -1,5 +1,6 @@
1
1
  /// <reference types="dist" />
2
- import { CommandEncoder, CommandEncoderProps, Buffer, Texture, CopyTextureToTextureOptions, CopyTextureToBufferOptions } from '@luma.gl/core';
2
+ import { CommandEncoder, CommandEncoderProps, Buffer, Texture } from '@luma.gl/core';
3
+ import type { CopyTextureToTextureOptions, CopyTextureToBufferOptions } from '@luma.gl/core';
3
4
  import { WebGPUDevice } from '../webgpu-device';
4
5
  export declare class WebGPUCommandEncoder extends CommandEncoder {
5
6
  readonly device: WebGPUDevice;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-command-encoder.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAC1D,2BAA2B,EAC3B,0BAA0B,EAG3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAI9C,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEvB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB;IAUnD,OAAO,IAAI,IAAI;IAExB,MAAM,CAAC,OAAO,CAAC,EAAE;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,gBAAgB;IAOjD,kBAAkB,CAAC,OAAO,EACxB;QACE,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GACA,IAAI;IAUP,mBAAmB,CAAC,OAAO,EACzB;QACA,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QAErB,WAAW,EAAE,OAAO,CAAC;QACrB,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,CAAA;KAC7C,GACE,IAAI;IAuBP,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;CAatD"}
1
+ {"version":3,"file":"webgpu-command-encoder.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAI9C,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAEvB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB;IAYnD,OAAO,IAAI,IAAI;IAExB,MAAM,CAAC,OAAO,CAAC,EAAE;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,gBAAgB;IAOjD,kBAAkB,CAAC,OAAO,EAC1B;QACE,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAYR,mBAAmB,CAAC,OAAO,EAC3B;QACE,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QAErB,WAAW,EAAE,OAAO,CAAC;QACrB,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;CAatD"}
@@ -1,4 +1,4 @@
1
- import { CommandEncoder, cast } from '@luma.gl/core';
1
+ import { CommandEncoder } from '@luma.gl/core';
2
2
  export class WebGPUCommandEncoder extends CommandEncoder {
3
3
  constructor(device, props) {
4
4
  super(device, props);
@@ -14,17 +14,21 @@ export class WebGPUCommandEncoder extends CommandEncoder {
14
14
  }
15
15
  copyBufferToBuffer(options) {
16
16
  var _options$sourceOffset, _options$destinationO, _options$size;
17
- this.handle.copyBufferToBuffer(cast(options.source).handle, (_options$sourceOffset = options.sourceOffset) !== null && _options$sourceOffset !== void 0 ? _options$sourceOffset : 0, cast(options.destination).handle, (_options$destinationO = options.destinationOffset) !== null && _options$destinationO !== void 0 ? _options$destinationO : 0, (_options$size = options.size) !== null && _options$size !== void 0 ? _options$size : 0);
17
+ const webgpuSourceBuffer = options.source;
18
+ const WebGPUDestinationBuffer = options.destination;
19
+ this.handle.copyBufferToBuffer(webgpuSourceBuffer.handle, (_options$sourceOffset = options.sourceOffset) !== null && _options$sourceOffset !== void 0 ? _options$sourceOffset : 0, WebGPUDestinationBuffer.handle, (_options$destinationO = options.destinationOffset) !== null && _options$destinationO !== void 0 ? _options$destinationO : 0, (_options$size = options.size) !== null && _options$size !== void 0 ? _options$size : 0);
18
20
  }
19
21
  copyBufferToTexture(options) {
20
22
  var _options$offset, _options$mipLevel, _options$origin;
23
+ const webgpuSourceBuffer = options.source;
24
+ const WebGPUDestinationTexture = options.destination;
21
25
  this.handle.copyBufferToTexture({
22
- buffer: cast(options.source).handle,
26
+ buffer: webgpuSourceBuffer.handle,
23
27
  offset: (_options$offset = options.offset) !== null && _options$offset !== void 0 ? _options$offset : 0,
24
28
  bytesPerRow: options.bytesPerRow,
25
29
  rowsPerImage: options.rowsPerImage
26
30
  }, {
27
- texture: cast(options.destination).handle,
31
+ texture: WebGPUDestinationTexture.handle,
28
32
  mipLevel: (_options$mipLevel = options.mipLevel) !== null && _options$mipLevel !== void 0 ? _options$mipLevel : 0,
29
33
  origin: (_options$origin = options.origin) !== null && _options$origin !== void 0 ? _options$origin : {}
30
34
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-command-encoder.js","names":["CommandEncoder","cast","WebGPUCommandEncoder","constructor","device","props","handle","createCommandEncoder","label","id","destroy","finish","options","copyBufferToBuffer","_options$sourceOffset","_options$destinationO","_options$size","source","sourceOffset","destination","destinationOffset","size","copyBufferToTexture","_options$offset","_options$mipLevel","_options$origin","buffer","offset","bytesPerRow","rowsPerImage","texture","mipLevel","origin","width","extent","height","depthOrArrayLayers","copyTextureToBuffer","copyTextureToTexture","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"sourcesContent":["import {CommandEncoder, CommandEncoderProps, Buffer, Texture, cast, \n CopyTextureToTextureOptions, \n CopyTextureToBufferOptions\n // CopyBufferToTextureOptions,\n // CopyBufferToBufferOptions,\n} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\nimport {WebGPUTexture} from './webgpu-texture';\n\nexport class WebGPUCommandEncoder extends CommandEncoder {\n readonly device: WebGPUDevice;\n readonly handle: GPUCommandEncoder;\n\n constructor(device: WebGPUDevice, props: CommandEncoderProps) {\n super(device, props);\n this.device = device;\n this.handle = props.handle || this.device.handle.createCommandEncoder({\n // TODO was this removed in standard?\n // measureExecutionTime: this.props.measureExecutionTime\n });\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {}\n\n finish(options?: {id?: string}): GPUCommandBuffer {\n return this.finish(options);\n }\n\n // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;\n // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;\n\n copyBufferToBuffer(options: // CopyBufferToBufferOptions\n {\n source: Buffer,\n sourceOffset?: number,\n destination: Buffer,\n destinationOffset?: number,\n size?: number\n }\n ): void {\n this.handle.copyBufferToBuffer(\n cast<WebGPUBuffer>(options.source).handle,\n options.sourceOffset ?? 0,\n cast<WebGPUBuffer>(options.destination).handle,\n options.destinationOffset ?? 0,\n options.size ?? 0\n );\n }\n\n copyBufferToTexture(options: // CopyBufferToTextureOptions\n {\n source: Buffer,\n offset?: number,\n bytesPerRow: number,\n rowsPerImage: number,\n\n destination: Texture,\n mipLevel?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only',\n\n origin?: number[] | [number, number, number],\n extent?: number[] | [number, number, number]\n }\n ): void {\n this.handle.copyBufferToTexture(\n {\n buffer: cast<WebGPUBuffer>(options.source).handle,\n offset: options.offset ?? 0,\n bytesPerRow: options.bytesPerRow,\n rowsPerImage: options.rowsPerImage,\n },\n {\n texture: cast<WebGPUTexture>(options.destination).handle,\n mipLevel: options.mipLevel ?? 0,\n origin: options.origin ?? {},\n // aspect: options.aspect\n },\n {\n // TODO exclamation mark hack\n width: options.extent[0],\n height: options.extent[1],\n depthOrArrayLayers: options.extent[2]\n }\n );\n }\n\n copyTextureToBuffer(options: CopyTextureToBufferOptions): void {\n // this.handle.copyTextureToBuffer(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n copyTextureToTexture(options: CopyTextureToTextureOptions): void {\n // this.handle.copyTextureToTexture(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n override pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n\n override popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n\n override insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: Query, queryIndex: number): void {}\n\n // resolveQuerySet(options: {\n // querySet: GPUQuerySet,\n // firstQuery: number,\n // queryCount: number,\n // destination: Buffer,\n // destinationOffset?: number;\n // }): void;\n}"],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-command-encoder.js","names":["CommandEncoder","WebGPUCommandEncoder","constructor","device","props","handle","createCommandEncoder","label","id","destroy","finish","options","copyBufferToBuffer","_options$sourceOffset","_options$destinationO","_options$size","webgpuSourceBuffer","source","WebGPUDestinationBuffer","destination","sourceOffset","destinationOffset","size","copyBufferToTexture","_options$offset","_options$mipLevel","_options$origin","WebGPUDestinationTexture","buffer","offset","bytesPerRow","rowsPerImage","texture","mipLevel","origin","width","extent","height","depthOrArrayLayers","copyTextureToBuffer","copyTextureToTexture","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"sourcesContent":["import {CommandEncoder, CommandEncoderProps, Buffer, Texture} from '@luma.gl/core';\nimport type {CopyTextureToTextureOptions, CopyTextureToBufferOptions} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\nimport {WebGPUTexture} from './webgpu-texture';\n\nexport class WebGPUCommandEncoder extends CommandEncoder {\n readonly device: WebGPUDevice;\n readonly handle: GPUCommandEncoder;\n\n constructor(device: WebGPUDevice, props: CommandEncoderProps) {\n super(device, props);\n this.device = device;\n this.handle =\n props.handle ||\n this.device.handle.createCommandEncoder({\n // TODO was this removed in standard?\n // measureExecutionTime: this.props.measureExecutionTime\n });\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {}\n\n finish(options?: {id?: string}): GPUCommandBuffer {\n return this.finish(options);\n }\n\n // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;\n // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;\n\n copyBufferToBuffer(options: // CopyBufferToBufferOptions\n {\n source: Buffer;\n sourceOffset?: number;\n destination: Buffer;\n destinationOffset?: number;\n size?: number;\n }): void {\n const webgpuSourceBuffer = options.source as WebGPUBuffer;\n const WebGPUDestinationBuffer = options.destination as WebGPUBuffer;\n this.handle.copyBufferToBuffer(\n webgpuSourceBuffer.handle,\n options.sourceOffset ?? 0,\n WebGPUDestinationBuffer.handle,\n options.destinationOffset ?? 0,\n options.size ?? 0\n );\n }\n\n copyBufferToTexture(options: // CopyBufferToTextureOptions\n {\n source: Buffer;\n offset?: number;\n bytesPerRow: number;\n rowsPerImage: number;\n\n destination: Texture;\n mipLevel?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only';\n\n origin?: number[] | [number, number, number];\n extent?: number[] | [number, number, number];\n }): void {\n const webgpuSourceBuffer = options.source as WebGPUBuffer;\n const WebGPUDestinationTexture = options.destination as WebGPUTexture;\n this.handle.copyBufferToTexture(\n {\n buffer: webgpuSourceBuffer.handle,\n offset: options.offset ?? 0,\n bytesPerRow: options.bytesPerRow,\n rowsPerImage: options.rowsPerImage\n },\n {\n texture: WebGPUDestinationTexture.handle,\n mipLevel: options.mipLevel ?? 0,\n origin: options.origin ?? {}\n // aspect: options.aspect\n },\n {\n // TODO exclamation mark hack\n width: options.extent[0],\n height: options.extent[1],\n depthOrArrayLayers: options.extent[2]\n }\n );\n }\n\n copyTextureToBuffer(options: CopyTextureToBufferOptions): void {\n // this.handle.copyTextureToBuffer(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n copyTextureToTexture(options: CopyTextureToTextureOptions): void {\n // this.handle.copyTextureToTexture(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n override pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n\n override popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n\n override insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: Query, queryIndex: number): void {}\n\n // resolveQuerySet(options: {\n // querySet: GPUQuerySet,\n // firstQuery: number,\n // queryCount: number,\n // destination: Buffer,\n // destinationOffset?: number;\n // }): void;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAO,MAAM,eAAe,CAAC;AACpG,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAK9C,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAQ;gBAEvC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB;IAUzD,8CAA8C;IACrC,OAAO,IAAI,IAAI;IAExB,GAAG,IAAI,IAAI;IAIX,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAM5C,2EAA2E;IAC3E,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;;;;OAIG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,GAAE,MAAU,GAAG,IAAI;IAI1E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAGxC,aAAa,IAAI,IAAI;IAGrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAO7C"}
1
+ {"version":3,"file":"webgpu-compute-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAK9C,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAQ;gBAEvC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB;IAUzD,8CAA8C;IACrC,OAAO,IAAI,IAAI;IAExB,GAAG,IAAI,IAAI;IAIX,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAM5C,2EAA2E;IAC3E,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;;;;OAIG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,GAAE,MAAU,GAAG,IAAI;IAK1E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAGxC,aAAa,IAAI,IAAI;IAGrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAO7C"}
@@ -1,4 +1,4 @@
1
- import { ComputePass, cast } from '@luma.gl/core';
1
+ import { ComputePass } from '@luma.gl/core';
2
2
  export class WebGPUComputePass extends ComputePass {
3
3
  constructor(device, props) {
4
4
  var _device$commandEncode;
@@ -16,7 +16,7 @@ export class WebGPUComputePass extends ComputePass {
16
16
  this.handle.end();
17
17
  }
18
18
  setPipeline(pipeline) {
19
- const wgpuPipeline = cast(pipeline);
19
+ const wgpuPipeline = pipeline;
20
20
  this.handle.setPipeline(wgpuPipeline.handle);
21
21
  this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();
22
22
  }
@@ -28,7 +28,8 @@ export class WebGPUComputePass extends ComputePass {
28
28
  }
29
29
  dispatchIndirect(indirectBuffer) {
30
30
  let indirectOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
31
- this.handle.dispatchWorkgroupsIndirect(cast(indirectBuffer).handle, indirectOffset);
31
+ const webgpuBuffer = indirectBuffer;
32
+ this.handle.dispatchWorkgroupsIndirect(webgpuBuffer.handle, indirectOffset);
32
33
  }
33
34
  pushDebugGroup(groupLabel) {
34
35
  this.handle.pushDebugGroup(groupLabel);
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pass.js","names":["ComputePass","cast","WebGPUComputePass","constructor","device","props","_device$commandEncode","handle","_bindGroupLayout","commandEncoder","beginComputePass","label","id","destroy","end","setPipeline","pipeline","wgpuPipeline","_getBindGroupLayout","setBindings","bindings","Error","dispatch","x","y","z","dispatchWorkgroups","dispatchIndirect","indirectBuffer","indirectOffset","arguments","length","undefined","dispatchWorkgroupsIndirect","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"sourcesContent":["import {ComputePass, ComputePassProps, ComputePipeline, Buffer, Binding, cast} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\n// import {WebGPUCommandEncoder} from './webgpu-command-encoder';\nimport {WebGPUComputePipeline} from './webgpu-compute-pipeline';\n\nexport class WebGPUComputePass extends ComputePass {\n readonly device: WebGPUDevice;\n readonly handle: GPUComputePassEncoder;\n _bindGroupLayout: GPUBindGroupLayout | null = null;\n\n constructor(device: WebGPUDevice, props: ComputePassProps) {\n super(device, props);\n this.device = device;\n\n this.handle = this.props.handle || device.commandEncoder?.beginComputePass({\n label: this.props.id,\n // timestampWrites?: GPUComputePassTimestampWrites;\n });\n }\n\n /** @note no WebGPU destroy method, just gc */\n override destroy(): void {}\n\n end(): void {\n this.handle.end();\n }\n\n setPipeline(pipeline: ComputePipeline): void {\n const wgpuPipeline = cast<WebGPUComputePipeline>(pipeline);\n this.handle.setPipeline(wgpuPipeline.handle);\n this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Binding[]): void {\n throw new Error('fix me');\n // const bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.bindings);\n // this.handle.setBindGroup(0, bindGroup);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param x X dimension of the grid of workgroups to dispatch.\n * @param y Y dimension of the grid of workgroups to dispatch.\n * @param z Z dimension of the grid of workgroups to dispatch.\n */\n dispatch(x: number, y?: number, z?: number): void {\n this.handle.dispatchWorkgroups(x, y, z);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param indirectBuffer buffer must be a tightly packed block of three 32-bit unsigned integer values (12 bytes total), given in the same order as the arguments for dispatch()\n * @param indirectOffset\n */\n dispatchIndirect(indirectBuffer: Buffer, indirectOffset: number = 0): void {\n this.handle.dispatchWorkgroupsIndirect(cast<WebGPUBuffer>(indirectBuffer).handle, indirectOffset);\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n}\n"],"mappings":"AAAA,SAAQA,WAAW,EAAsDC,IAAI,QAAO,eAAe;AAMnG,OAAO,MAAMC,iBAAiB,SAASF,WAAW,CAAC;EAKjDG,WAAWA,CAACC,MAAoB,EAAEC,KAAuB,EAAE;IAAA,IAAAC,qBAAA;IACzD,KAAK,CAACF,MAAM,EAAEC,KAAK,CAAC;IAAC,KALdD,MAAM;IAAA,KACNG,MAAM;IAAA,KACfC,gBAAgB,GAA8B,IAAI;IAIhD,IAAI,CAACJ,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACG,MAAM,GAAG,IAAI,CAACF,KAAK,CAACE,MAAM,MAAAD,qBAAA,GAAIF,MAAM,CAACK,cAAc,cAAAH,qBAAA,uBAArBA,qBAAA,CAAuBI,gBAAgB,CAAC;MACzEC,KAAK,EAAE,IAAI,CAACN,KAAK,CAACO;IAEpB,CAAC,CAAC;EACJ;EAGSC,OAAOA,CAAA,EAAS,CAAC;EAE1BC,GAAGA,CAAA,EAAS;IACV,IAAI,CAACP,MAAM,CAACO,GAAG,CAAC,CAAC;EACnB;EAEAC,WAAWA,CAACC,QAAyB,EAAQ;IAC3C,MAAMC,YAAY,GAAGhB,IAAI,CAAwBe,QAAQ,CAAC;IAC1D,IAAI,CAACT,MAAM,CAACQ,WAAW,CAACE,YAAY,CAACV,MAAM,CAAC;IAC5C,IAAI,CAACC,gBAAgB,GAAGS,YAAY,CAACC,mBAAmB,CAAC,CAAC;EAC5D;EAGAC,WAAWA,CAACC,QAAmB,EAAQ;IACrC,MAAM,IAAIC,KAAK,CAAC,QAAQ,CAAC;EAG3B;EAQAC,QAAQA,CAACC,CAAS,EAAEC,CAAU,EAAEC,CAAU,EAAQ;IAChD,IAAI,CAAClB,MAAM,CAACmB,kBAAkB,CAACH,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC;EACzC;EAOAE,gBAAgBA,CAACC,cAAsB,EAAoC;IAAA,IAAlCC,cAAsB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IACjE,IAAI,CAACvB,MAAM,CAAC0B,0BAA0B,CAAChC,IAAI,CAAe2B,cAAc,CAAC,CAACrB,MAAM,EAAEsB,cAAc,CAAC;EACnG;EAEAK,cAAcA,CAACC,UAAkB,EAAQ;IACvC,IAAI,CAAC5B,MAAM,CAAC2B,cAAc,CAACC,UAAU,CAAC;EACxC;EACAC,aAAaA,CAAA,EAAS;IACpB,IAAI,CAAC7B,MAAM,CAAC6B,aAAa,CAAC,CAAC;EAC7B;EACAC,iBAAiBA,CAACC,WAAmB,EAAQ;IAC3C,IAAI,CAAC/B,MAAM,CAAC8B,iBAAiB,CAACC,WAAW,CAAC;EAC5C;AAKF"}
1
+ {"version":3,"file":"webgpu-compute-pass.js","names":["ComputePass","WebGPUComputePass","constructor","device","props","_device$commandEncode","handle","_bindGroupLayout","commandEncoder","beginComputePass","label","id","destroy","end","setPipeline","pipeline","wgpuPipeline","_getBindGroupLayout","setBindings","bindings","Error","dispatch","x","y","z","dispatchWorkgroups","dispatchIndirect","indirectBuffer","indirectOffset","arguments","length","undefined","webgpuBuffer","dispatchWorkgroupsIndirect","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"sourcesContent":["import {ComputePass, ComputePassProps, ComputePipeline, Buffer, Binding} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\n// import {WebGPUCommandEncoder} from './webgpu-command-encoder';\nimport {WebGPUComputePipeline} from './webgpu-compute-pipeline';\n\nexport class WebGPUComputePass extends ComputePass {\n readonly device: WebGPUDevice;\n readonly handle: GPUComputePassEncoder;\n _bindGroupLayout: GPUBindGroupLayout | null = null;\n\n constructor(device: WebGPUDevice, props: ComputePassProps) {\n super(device, props);\n this.device = device;\n\n this.handle = this.props.handle || device.commandEncoder?.beginComputePass({\n label: this.props.id,\n // timestampWrites?: GPUComputePassTimestampWrites;\n });\n }\n\n /** @note no WebGPU destroy method, just gc */\n override destroy(): void {}\n\n end(): void {\n this.handle.end();\n }\n\n setPipeline(pipeline: ComputePipeline): void {\n const wgpuPipeline = pipeline as WebGPUComputePipeline;\n this.handle.setPipeline(wgpuPipeline.handle);\n this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Binding[]): void {\n throw new Error('fix me');\n // const bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.bindings);\n // this.handle.setBindGroup(0, bindGroup);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param x X dimension of the grid of workgroups to dispatch.\n * @param y Y dimension of the grid of workgroups to dispatch.\n * @param z Z dimension of the grid of workgroups to dispatch.\n */\n dispatch(x: number, y?: number, z?: number): void {\n this.handle.dispatchWorkgroups(x, y, z);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param indirectBuffer buffer must be a tightly packed block of three 32-bit unsigned integer values (12 bytes total), given in the same order as the arguments for dispatch()\n * @param indirectOffset\n */\n dispatchIndirect(indirectBuffer: Buffer, indirectOffset: number = 0): void {\n const webgpuBuffer = indirectBuffer as WebGPUBuffer;\n this.handle.dispatchWorkgroupsIndirect(webgpuBuffer.handle, indirectOffset);\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n}\n"],"mappings":"AAAA,SAAQA,WAAW,QAA2D,eAAe;AAM7F,OAAO,MAAMC,iBAAiB,SAASD,WAAW,CAAC;EAKjDE,WAAWA,CAACC,MAAoB,EAAEC,KAAuB,EAAE;IAAA,IAAAC,qBAAA;IACzD,KAAK,CAACF,MAAM,EAAEC,KAAK,CAAC;IAAC,KALdD,MAAM;IAAA,KACNG,MAAM;IAAA,KACfC,gBAAgB,GAA8B,IAAI;IAIhD,IAAI,CAACJ,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACG,MAAM,GAAG,IAAI,CAACF,KAAK,CAACE,MAAM,MAAAD,qBAAA,GAAIF,MAAM,CAACK,cAAc,cAAAH,qBAAA,uBAArBA,qBAAA,CAAuBI,gBAAgB,CAAC;MACzEC,KAAK,EAAE,IAAI,CAACN,KAAK,CAACO;IAEpB,CAAC,CAAC;EACJ;EAGSC,OAAOA,CAAA,EAAS,CAAC;EAE1BC,GAAGA,CAAA,EAAS;IACV,IAAI,CAACP,MAAM,CAACO,GAAG,CAAC,CAAC;EACnB;EAEAC,WAAWA,CAACC,QAAyB,EAAQ;IAC3C,MAAMC,YAAY,GAAGD,QAAiC;IACtD,IAAI,CAACT,MAAM,CAACQ,WAAW,CAACE,YAAY,CAACV,MAAM,CAAC;IAC5C,IAAI,CAACC,gBAAgB,GAAGS,YAAY,CAACC,mBAAmB,CAAC,CAAC;EAC5D;EAGAC,WAAWA,CAACC,QAAmB,EAAQ;IACrC,MAAM,IAAIC,KAAK,CAAC,QAAQ,CAAC;EAG3B;EAQAC,QAAQA,CAACC,CAAS,EAAEC,CAAU,EAAEC,CAAU,EAAQ;IAChD,IAAI,CAAClB,MAAM,CAACmB,kBAAkB,CAACH,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC;EACzC;EAOAE,gBAAgBA,CAACC,cAAsB,EAAoC;IAAA,IAAlCC,cAAsB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IACjE,MAAMG,YAAY,GAAGL,cAA8B;IACnD,IAAI,CAACrB,MAAM,CAAC2B,0BAA0B,CAACD,YAAY,CAAC1B,MAAM,EAAEsB,cAAc,CAAC;EAC7E;EAEAM,cAAcA,CAACC,UAAkB,EAAQ;IACvC,IAAI,CAAC7B,MAAM,CAAC4B,cAAc,CAACC,UAAU,CAAC;EACxC;EACAC,aAAaA,CAAA,EAAS;IACpB,IAAI,CAAC9B,MAAM,CAAC8B,aAAa,CAAC,CAAC;EAC7B;EACAC,iBAAiBA,CAACC,WAAmB,EAAQ;IAC3C,IAAI,CAAChC,MAAM,CAAC+B,iBAAiB,CAACC,WAAW,CAAC;EAC5C;AAKF"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAO,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAK9C,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;gBAEf,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB;IAgB7D,wCAAwC;IACxC,mBAAmB;CAIpB"}
1
+ {"version":3,"file":"webgpu-compute-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAK9C,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;gBAEf,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB;IAgB7D,wCAAwC;IACxC,mBAAmB;CAIpB"}
@@ -1,15 +1,15 @@
1
- import { ComputePipeline, cast } from '@luma.gl/core';
1
+ import { ComputePipeline } from '@luma.gl/core';
2
2
  export class WebGPUComputePipeline extends ComputePipeline {
3
3
  constructor(device, props) {
4
4
  super(device, props);
5
5
  this.device = void 0;
6
6
  this.handle = void 0;
7
7
  this.device = device;
8
- const module = cast(this.props.cs).handle;
8
+ const webgpuShader = this.props.cs;
9
9
  this.handle = this.props.handle || this.device.handle.createComputePipeline({
10
10
  label: this.props.id,
11
11
  compute: {
12
- module,
12
+ module: webgpuShader.handle,
13
13
  entryPoint: this.props.csEntryPoint
14
14
  },
15
15
  layout: 'auto'
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pipeline.js","names":["ComputePipeline","cast","WebGPUComputePipeline","constructor","device","props","handle","module","cs","createComputePipeline","label","id","compute","entryPoint","csEntryPoint","layout","_getBindGroupLayout","getBindGroupLayout"],"sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"sourcesContent":["// prettier-ignore\nimport {ComputePipeline, ComputePipelineProps, cast} from '@luma.gl/core';\n\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUShader} from './webgpu-shader';\n\n// COMPUTE PIPELINE\n\n/** Creates a new compute pipeline when parameters change */\nexport class WebGPUComputePipeline extends ComputePipeline {\n device: WebGPUDevice;\n handle: GPUComputePipeline;\n\n constructor(device: WebGPUDevice, props: ComputePipelineProps) {\n super(device, props);\n this.device = device;\n\n const module = cast<WebGPUShader>(this.props.cs).handle;\n this.handle = this.props.handle || this.device.handle.createComputePipeline({\n label: this.props.id,\n compute: {\n module,\n entryPoint: this.props.csEntryPoint,\n // constants: this.props.csConstants\n },\n layout: 'auto'\n });\n }\n\n /** For internal use in render passes */\n _getBindGroupLayout() {\n // TODO: Cache?\n return this.handle.getBindGroupLayout(0);\n }\n}\n"],"mappings":"AACA,SAAQA,eAAe,EAAwBC,IAAI,QAAO,eAAe;AAQzE,OAAO,MAAMC,qBAAqB,SAASF,eAAe,CAAC;EAIzDG,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KAJvBD,MAAM;IAAA,KACNE,MAAM;IAIJ,IAAI,CAACF,MAAM,GAAGA,MAAM;IAEpB,MAAMG,MAAM,GAAGN,IAAI,CAAe,IAAI,CAACI,KAAK,CAACG,EAAE,CAAC,CAACF,MAAM;IACvD,IAAI,CAACA,MAAM,GAAG,IAAI,CAACD,KAAK,CAACC,MAAM,IAAI,IAAI,CAACF,MAAM,CAACE,MAAM,CAACG,qBAAqB,CAAC;MAC1EC,KAAK,EAAE,IAAI,CAACL,KAAK,CAACM,EAAE;MACpBC,OAAO,EAAE;QACPL,MAAM;QACNM,UAAU,EAAE,IAAI,CAACR,KAAK,CAACS;MAEzB,CAAC;MACDC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ;EAGAC,mBAAmBA,CAAA,EAAG;IAEpB,OAAO,IAAI,CAACV,MAAM,CAACW,kBAAkB,CAAC,CAAC,CAAC;EAC1C;AACF"}
1
+ {"version":3,"file":"webgpu-compute-pipeline.js","names":["ComputePipeline","WebGPUComputePipeline","constructor","device","props","handle","webgpuShader","cs","createComputePipeline","label","id","compute","module","entryPoint","csEntryPoint","layout","_getBindGroupLayout","getBindGroupLayout"],"sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"sourcesContent":["// prettier-ignore\nimport {ComputePipeline, ComputePipelineProps} from '@luma.gl/core';\n\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUShader} from './webgpu-shader';\n\n// COMPUTE PIPELINE\n\n/** Creates a new compute pipeline when parameters change */\nexport class WebGPUComputePipeline extends ComputePipeline {\n device: WebGPUDevice;\n handle: GPUComputePipeline;\n\n constructor(device: WebGPUDevice, props: ComputePipelineProps) {\n super(device, props);\n this.device = device;\n\n const webgpuShader = this.props.cs as WebGPUShader;\n this.handle = this.props.handle || this.device.handle.createComputePipeline({\n label: this.props.id,\n compute: {\n module: webgpuShader.handle,\n entryPoint: this.props.csEntryPoint,\n // constants: this.props.csConstants\n },\n layout: 'auto'\n });\n }\n\n /** For internal use in render passes */\n _getBindGroupLayout() {\n // TODO: Cache?\n return this.handle.getBindGroupLayout(0);\n }\n}\n"],"mappings":"AACA,SAAQA,eAAe,QAA6B,eAAe;AAQnE,OAAO,MAAMC,qBAAqB,SAASD,eAAe,CAAC;EAIzDE,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KAJvBD,MAAM;IAAA,KACNE,MAAM;IAIJ,IAAI,CAACF,MAAM,GAAGA,MAAM;IAEpB,MAAMG,YAAY,GAAG,IAAI,CAACF,KAAK,CAACG,EAAkB;IAClD,IAAI,CAACF,MAAM,GAAG,IAAI,CAACD,KAAK,CAACC,MAAM,IAAI,IAAI,CAACF,MAAM,CAACE,MAAM,CAACG,qBAAqB,CAAC;MAC1EC,KAAK,EAAE,IAAI,CAACL,KAAK,CAACM,EAAE;MACpBC,OAAO,EAAE;QACPC,MAAM,EAAEN,YAAY,CAACD,MAAM;QAC3BQ,UAAU,EAAE,IAAI,CAACT,KAAK,CAACU;MAEzB,CAAC;MACDC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ;EAGAC,mBAAmBA,CAAA,EAAG;IAEpB,OAAO,IAAI,CAACX,MAAM,CAACY,kBAAkB,CAAC,CAAC,CAAC;EAC1C;AACF"}
@@ -30,7 +30,7 @@ export declare class WebGPUDevice extends Device {
30
30
  /** Check if WebGPU is available */
31
31
  static isSupported(): boolean;
32
32
  static create(props: DeviceProps): Promise<WebGPUDevice>;
33
- constructor(device: GPUDevice, adapter: GPUAdapter, props: DeviceProps);
33
+ constructor(device: GPUDevice, adapter: GPUAdapter, adapterInfo: GPUAdapterInfo, props: DeviceProps);
34
34
  destroy(): void;
35
35
  get info(): DeviceInfo;
36
36
  features: Set<DeviceFeature>;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-device.d.ts","sourceRoot":"","sources":["../../src/adapter/webgpu-device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-device.d.ts","sourceRoot":"","sources":["../../src/adapter/webgpu-device.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export class WebGPUDevice extends Device {
26
26
  throw new Error('Failed to request WebGPU adapter');
27
27
  }
28
28
  const adapterInfo = await adapter.requestAdapterInfo();
29
- log.probe(1, 'Adapter available', adapterInfo)();
29
+ log.probe(2, 'Adapter available', adapterInfo)();
30
30
  const gpuDevice = await adapter.requestDevice({
31
31
  requiredFeatures: adapter.features
32
32
  });
@@ -35,13 +35,13 @@ export class WebGPUDevice extends Device {
35
35
  await CanvasContext.pageLoaded;
36
36
  log.probe(1, 'DOM is loaded')();
37
37
  }
38
- const device = new WebGPUDevice(gpuDevice, adapter, props);
39
- log.probe(1, 'Device created', device.info)();
38
+ const device = new WebGPUDevice(gpuDevice, adapter, adapterInfo, props);
39
+ log.probe(1, 'Device created. For more info, set chrome://flags/#enable-webgpu-developer-features')();
40
40
  log.table(1, device.info)();
41
41
  log.groupEnd(1)();
42
42
  return device;
43
43
  }
44
- constructor(device, adapter, props) {
44
+ constructor(device, adapter, adapterInfo, props) {
45
45
  super({
46
46
  ...props,
47
47
  id: props.id || uid('webgpu-device')
@@ -57,16 +57,25 @@ export class WebGPUDevice extends Device {
57
57
  this.features = void 0;
58
58
  this.handle = device;
59
59
  this.adapter = adapter;
60
+ const [driver, driverVersion] = (adapterInfo.driver || '').split(' Version ');
61
+ const vendor = adapterInfo.vendor || this.adapter.__brand || 'unknown';
62
+ const renderer = driver || '';
63
+ const version = driverVersion || '';
64
+ const gpu = vendor === 'apple' ? 'apple' : 'unknown';
65
+ const gpuArchitecture = adapterInfo.architecture || 'unknown';
66
+ const gpuBackend = adapterInfo.backend || 'unknown';
67
+ const gpuType = (adapterInfo.type || '').split(' ')[0].toLowerCase() || 'unknown';
60
68
  this._info = {
61
69
  type: 'webgpu',
62
- vendor: this.adapter.__brand,
63
- renderer: '',
64
- version: '',
65
- gpu: 'unknown',
70
+ vendor,
71
+ renderer,
72
+ version,
73
+ gpu,
74
+ gpuType,
75
+ gpuBackend,
76
+ gpuArchitecture,
66
77
  shadingLanguage: 'wgsl',
67
- shadingLanguageVersion: 100,
68
- vendorMasked: '',
69
- rendererMasked: ''
78
+ shadingLanguageVersion: 100
70
79
  };
71
80
  this.lost = new Promise(async resolve => {
72
81
  const lostInfo = await this.handle.lost;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-device.js","names":["Device","CanvasContext","log","uid","WebGPUBuffer","WebGPUTexture","WebGPUExternalTexture","WebGPUSampler","WebGPUShader","WebGPURenderPipeline","WebGPUComputePipeline","WebGPURenderPass","WebGPUComputePass","WebGPUVertexArray","WebGPUCanvasContext","WebGPUDevice","isSupported","Boolean","navigator","gpu","create","props","Error","groupCollapsed","adapter","requestAdapter","powerPreference","adapterInfo","requestAdapterInfo","probe","gpuDevice","requestDevice","requiredFeatures","features","canvas","pageLoaded","device","info","table","groupEnd","constructor","id","handle","lost","canvasContext","commandEncoder","renderPass","_info","_isLost","type","vendor","__brand","renderer","version","shadingLanguage","shadingLanguageVersion","vendorMasked","rendererMasked","Promise","resolve","lostInfo","reason","message","height","width","container","_getFeatures","destroy","limits","isTextureFormatSupported","format","includes","isTextureFormatFilterable","isTextureFormatRenderable","isLost","createBuffer","newProps","_getBufferProps","_createTexture","createExternalTexture","createShader","createSampler","createRenderPipeline","createFramebuffer","createComputePipeline","createVertexArray","beginRenderPass","createCommandEncoder","beginComputePass","createTransformFeedback","createCanvasContext","getDefaultRenderPass","submit","_this$commandEncoder","commandBuffer","finish","queue","Set","has","delete","add","copyExternalImageToTexture","options","_this$handle","source","sourceX","sourceY","texture","mipLevel","aspect","colorSpace","premultipliedAlpha","depth","webGpuTexture","origin"],"sources":["../../src/adapter/webgpu-device.ts"],"sourcesContent":["// prettier-ignore\n// / <reference types=\"@webgpu/types\" />\n\nimport type {\n DeviceProps,\n DeviceInfo,\n DeviceLimits,\n DeviceFeature,\n CanvasContextProps,\n BufferProps,\n SamplerProps,\n ShaderProps,\n Texture,\n TextureProps,\n TextureFormat,\n ExternalTextureProps,\n FramebufferProps,\n RenderPipelineProps,\n ComputePipelineProps,\n RenderPassProps,\n ComputePassProps,\n // CommandEncoderProps,\n VertexArrayProps,\n TransformFeedback,\n TransformFeedbackProps\n} from '@luma.gl/core';\nimport {Device, CanvasContext, log, uid} from '@luma.gl/core';\nimport {WebGPUBuffer} from './resources/webgpu-buffer';\nimport {WebGPUTexture} from './resources/webgpu-texture';\nimport {WebGPUExternalTexture} from './resources/webgpu-external-texture';\nimport {WebGPUSampler} from './resources/webgpu-sampler';\nimport {WebGPUShader} from './resources/webgpu-shader';\nimport {WebGPURenderPipeline} from './resources/webgpu-render-pipeline';\nimport {WebGPUFramebuffer} from './resources/webgpu-framebuffer';\nimport {WebGPUComputePipeline} from './resources/webgpu-compute-pipeline';\nimport {WebGPURenderPass} from './resources/webgpu-render-pass';\nimport {WebGPUComputePass} from './resources/webgpu-compute-pass';\n// import {WebGPUCommandEncoder} from './resources/webgpu-command-encoder';\nimport {WebGPUVertexArray} from './resources/webgpu-vertex-array';\n\nimport {WebGPUCanvasContext} from './webgpu-canvas-context';\n// import {loadGlslangModule} from '../glsl/glslang';\n\n/** WebGPU Device implementation */\nexport class WebGPUDevice extends Device {\n readonly handle: GPUDevice;\n readonly adapter: GPUAdapter;\n readonly lost: Promise<{reason: 'destroyed'; message: string}>;\n canvasContext: WebGPUCanvasContext | null = null;\n\n commandEncoder: GPUCommandEncoder | null = null;\n renderPass: WebGPURenderPass | null = null;\n\n private _info: DeviceInfo;\n private _isLost: boolean = false;\n\n static type: string = 'webgpu';\n\n /** Check if WebGPU is available */\n static isSupported(): boolean {\n return Boolean(typeof navigator !== 'undefined' && navigator.gpu);\n }\n\n static async create(props: DeviceProps): Promise<WebGPUDevice> {\n if (!navigator.gpu) {\n throw new Error(\n 'WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu'\n );\n }\n log.groupCollapsed(1, 'WebGPUDevice created')();\n const adapter = await navigator.gpu.requestAdapter({\n powerPreference: 'high-performance'\n // forceSoftware: false\n });\n if (!adapter) {\n throw new Error('Failed to request WebGPU adapter');\n }\n\n const adapterInfo = await adapter.requestAdapterInfo();\n log.probe(1, 'Adapter available', adapterInfo)();\n\n const gpuDevice = await adapter.requestDevice({\n requiredFeatures: adapter.features as ReadonlySet<GPUFeatureName>\n // TODO ensure we obtain best limits\n // requiredLimits: adapter.limits\n });\n log.probe(1, 'GPUDevice available')();\n\n if (typeof props.canvas === 'string') {\n await CanvasContext.pageLoaded;\n log.probe(1, 'DOM is loaded')();\n }\n\n const device = new WebGPUDevice(gpuDevice, adapter, props);\n log.probe(1, 'Device created', device.info)();\n log.table(1, device.info)();\n log.groupEnd(1)();\n return device;\n }\n\n constructor(device: GPUDevice, adapter: GPUAdapter, props: DeviceProps) {\n super({...props, id: props.id || uid('webgpu-device')});\n this.handle = device;\n this.adapter = adapter;\n\n this._info = {\n type: 'webgpu',\n vendor: this.adapter.__brand,\n renderer: '',\n version: '',\n gpu: 'unknown', // 'nvidia' | 'amd' | 'intel' | 'apple' | 'unknown',\n shadingLanguage: 'wgsl',\n shadingLanguageVersion: 100,\n vendorMasked: '',\n rendererMasked: ''\n };\n\n // \"Context\" loss handling\n this.lost = new Promise<{reason: 'destroyed'; message: string}>(async resolve => {\n const lostInfo = await this.handle.lost;\n this._isLost = true;\n resolve({reason: 'destroyed', message: lostInfo.message});\n });\n\n // Note: WebGPU devices can be created without a canvas, for compute shader purposes\n // if (props.canvas) {\n this.canvasContext = new WebGPUCanvasContext(this, this.adapter, {\n canvas: props.canvas,\n height: props.height,\n width: props.width,\n container: props.container\n });\n // }\n\n this.features = this._getFeatures();\n }\n\n // TODO\n // Load the glslang module now so that it is available synchronously when compiling shaders\n // const {glsl = true} = props;\n // this.glslang = glsl && await loadGlslangModule();\n\n destroy(): void {\n this.handle.destroy();\n }\n\n get info(): DeviceInfo {\n return this._info;\n }\n\n features: Set<DeviceFeature>;\n\n get limits(): DeviceLimits {\n return this.handle.limits;\n }\n\n isTextureFormatSupported(format: TextureFormat): boolean {\n return !format.includes('webgl');\n }\n\n /** @todo implement proper check? */\n isTextureFormatFilterable(format: TextureFormat): boolean {\n return this.isTextureFormatSupported(format);\n }\n\n /** @todo implement proper check? */\n isTextureFormatRenderable(format: TextureFormat): boolean {\n return this.isTextureFormatSupported(format);\n }\n\n get isLost(): boolean {\n return this._isLost;\n }\n\n createBuffer(props: BufferProps | ArrayBuffer | ArrayBufferView): WebGPUBuffer {\n const newProps = this._getBufferProps(props);\n return new WebGPUBuffer(this, newProps);\n }\n\n _createTexture(props: TextureProps): WebGPUTexture {\n return new WebGPUTexture(this, props);\n }\n\n createExternalTexture(props: ExternalTextureProps): WebGPUExternalTexture {\n return new WebGPUExternalTexture(this, props);\n }\n\n createShader(props: ShaderProps): WebGPUShader {\n return new WebGPUShader(this, props);\n }\n\n createSampler(props: SamplerProps): WebGPUSampler {\n return new WebGPUSampler(this, props);\n }\n\n createRenderPipeline(props: RenderPipelineProps): WebGPURenderPipeline {\n return new WebGPURenderPipeline(this, props);\n }\n\n createFramebuffer(props: FramebufferProps): WebGPUFramebuffer {\n throw new Error('Not implemented');\n }\n\n createComputePipeline(props: ComputePipelineProps): WebGPUComputePipeline {\n return new WebGPUComputePipeline(this, props);\n }\n\n createVertexArray(props: VertexArrayProps): WebGPUVertexArray {\n return new WebGPUVertexArray(this, props);\n }\n\n // WebGPU specifics\n\n /**\n * Allows a render pass to begin against a canvas context\n * @todo need to support a \"Framebuffer\" equivalent (aka preconfigured RenderPassDescriptors?).\n */\n beginRenderPass(props: RenderPassProps): WebGPURenderPass {\n this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();\n return new WebGPURenderPass(this, props);\n }\n\n beginComputePass(props: ComputePassProps): WebGPUComputePass {\n this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();\n return new WebGPUComputePass(this, props);\n }\n\n // createCommandEncoder(props: CommandEncoderProps): WebGPUCommandEncoder {\n // return new WebGPUCommandEncoder(this, props);\n // }\n\n createTransformFeedback(props: TransformFeedbackProps): TransformFeedback {\n throw new Error('Transform feedback not supported in WebGPU');\n }\n\n createCanvasContext(props: CanvasContextProps): WebGPUCanvasContext {\n return new WebGPUCanvasContext(this, this.adapter, props);\n }\n\n /**\n * Gets default renderpass encoder.\n * Creates a new encoder against default canvasContext if not already created\n * @note Called internally by Model.\n * @deprecated Create explicit pass with device.beginRenderPass\n */\n getDefaultRenderPass(): WebGPURenderPass {\n // this.renderPass =\n // this.renderPass ||\n // this.beginRenderPass({\n // framebuffer: this.canvasContext?.getCurrentFramebuffer()\n // });\n // return this.renderPass;\n throw new Error('a');\n }\n\n submit(): void {\n // this.renderPass?.end();\n const commandBuffer = this.commandEncoder?.finish();\n if (commandBuffer) {\n this.handle.queue.submit([commandBuffer]);\n }\n this.commandEncoder = null;\n // this.renderPass = null;\n }\n\n _getFeatures() {\n // WebGPU Features\n const features = new Set<DeviceFeature>(this.handle.features as Set<DeviceFeature>);\n\n // Fixups for pre-standard names: https://github.com/webgpu-native/webgpu-headers/issues/133\n // @ts-expect-error Chrome Canary v99\n if (features.has('depth-clamping')) {\n // @ts-expect-error Chrome Canary v99\n features.delete('depth-clamping');\n features.add('depth-clip-control');\n }\n\n // Add subsets\n if (features.has('texture-compression-bc')) {\n features.add('texture-compression-bc5-webgl');\n }\n\n features.add('webgpu');\n\n features.add('timer-query-webgl');\n\n // WEBGL1 SUPPORT\n features.add('vertex-array-object-webgl1');\n features.add('instanced-rendering-webgl1');\n features.add('multiple-render-targets-webgl1');\n features.add('index-uint32-webgl1');\n features.add('blend-minmax-webgl1');\n features.add('texture-blend-float-webgl1');\n\n // TEXTURES, RENDERBUFFERS\n features.add('texture-formats-srgb-webgl1');\n\n // TEXTURES\n features.add('texture-formats-depth-webgl1');\n features.add('texture-formats-float32-webgl1');\n features.add('texture-formats-float16-webgl1');\n\n features.add('texture-filter-linear-float32-webgl');\n features.add('texture-filter-linear-float16-webgl');\n features.add('texture-filter-anisotropic-webgl');\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n features.add('texture-renderable-rgba32float-webgl');\n features.add('texture-renderable-float32-webgl');\n features.add('texture-renderable-float16-webgl');\n\n // GLSL extensions\n features.add('glsl-frag-data');\n features.add('glsl-frag-depth');\n features.add('glsl-derivatives');\n features.add('glsl-texture-lod');\n\n return features;\n }\n\n copyExternalImageToTexture(options: {\n texture: Texture;\n mipLevel?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only';\n colorSpace?: 'display-p3' | 'srgb';\n premultipliedAlpha?: boolean;\n\n source: ImageBitmap | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas;\n sourceX?: number;\n sourceY?: number;\n\n width?: number;\n height?: number;\n depth?: number;\n }): void {\n const {\n source,\n sourceX = 0,\n sourceY = 0,\n\n texture,\n mipLevel = 0,\n aspect = 'all',\n colorSpace = 'display-p3',\n premultipliedAlpha = false,\n // destinationX,\n // destinationY,\n // desitnationZ,\n\n width = texture.width,\n height = texture.height,\n depth = 1\n } = options;\n\n const webGpuTexture = texture as WebGPUTexture;\n\n this.handle?.queue.copyExternalImageToTexture(\n // source: GPUImageCopyExternalImage\n {\n source,\n origin: [sourceX, sourceY]\n },\n // destination: GPUImageCopyTextureTagged\n {\n texture: webGpuTexture.handle,\n origin: [0, 0, 0], // [x, y, z],\n mipLevel,\n aspect,\n colorSpace,\n premultipliedAlpha\n },\n // copySize: GPUExtent3D\n [width, height, depth]\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-device.js","names":["Device","CanvasContext","log","uid","WebGPUBuffer","WebGPUTexture","WebGPUExternalTexture","WebGPUSampler","WebGPUShader","WebGPURenderPipeline","WebGPUComputePipeline","WebGPURenderPass","WebGPUComputePass","WebGPUVertexArray","WebGPUCanvasContext","WebGPUDevice","isSupported","Boolean","navigator","gpu","create","props","Error","groupCollapsed","adapter","requestAdapter","powerPreference","adapterInfo","requestAdapterInfo","probe","gpuDevice","requestDevice","requiredFeatures","features","canvas","pageLoaded","device","table","info","groupEnd","constructor","id","handle","lost","canvasContext","commandEncoder","renderPass","_info","_isLost","driver","driverVersion","split","vendor","__brand","renderer","version","gpuArchitecture","architecture","gpuBackend","backend","gpuType","type","toLowerCase","shadingLanguage","shadingLanguageVersion","Promise","resolve","lostInfo","reason","message","height","width","container","_getFeatures","destroy","limits","isTextureFormatSupported","format","includes","isTextureFormatFilterable","isTextureFormatRenderable","isLost","createBuffer","newProps","_getBufferProps","_createTexture","createExternalTexture","createShader","createSampler","createRenderPipeline","createFramebuffer","createComputePipeline","createVertexArray","beginRenderPass","createCommandEncoder","beginComputePass","createTransformFeedback","createCanvasContext","getDefaultRenderPass","submit","_this$commandEncoder","commandBuffer","finish","queue","Set","has","delete","add","copyExternalImageToTexture","options","_this$handle","source","sourceX","sourceY","texture","mipLevel","aspect","colorSpace","premultipliedAlpha","depth","webGpuTexture","origin"],"sources":["../../src/adapter/webgpu-device.ts"],"sourcesContent":["// prettier-ignore\n// / <reference types=\"@webgpu/types\" />\n\nimport type {\n DeviceProps,\n DeviceInfo,\n DeviceLimits,\n DeviceFeature,\n CanvasContextProps,\n BufferProps,\n SamplerProps,\n ShaderProps,\n Texture,\n TextureProps,\n TextureFormat,\n ExternalTextureProps,\n FramebufferProps,\n RenderPipelineProps,\n ComputePipelineProps,\n RenderPassProps,\n ComputePassProps,\n // CommandEncoderProps,\n VertexArrayProps,\n TransformFeedback,\n TransformFeedbackProps\n} from '@luma.gl/core';\nimport {Device, CanvasContext, log, uid} from '@luma.gl/core';\nimport {WebGPUBuffer} from './resources/webgpu-buffer';\nimport {WebGPUTexture} from './resources/webgpu-texture';\nimport {WebGPUExternalTexture} from './resources/webgpu-external-texture';\nimport {WebGPUSampler} from './resources/webgpu-sampler';\nimport {WebGPUShader} from './resources/webgpu-shader';\nimport {WebGPURenderPipeline} from './resources/webgpu-render-pipeline';\nimport {WebGPUFramebuffer} from './resources/webgpu-framebuffer';\nimport {WebGPUComputePipeline} from './resources/webgpu-compute-pipeline';\nimport {WebGPURenderPass} from './resources/webgpu-render-pass';\nimport {WebGPUComputePass} from './resources/webgpu-compute-pass';\n// import {WebGPUCommandEncoder} from './resources/webgpu-command-encoder';\nimport {WebGPUVertexArray} from './resources/webgpu-vertex-array';\n\nimport {WebGPUCanvasContext} from './webgpu-canvas-context';\n// import {loadGlslangModule} from '../glsl/glslang';\n\n/** WebGPU Device implementation */\nexport class WebGPUDevice extends Device {\n readonly handle: GPUDevice;\n readonly adapter: GPUAdapter;\n readonly lost: Promise<{reason: 'destroyed'; message: string}>;\n canvasContext: WebGPUCanvasContext | null = null;\n\n commandEncoder: GPUCommandEncoder | null = null;\n renderPass: WebGPURenderPass | null = null;\n\n private _info: DeviceInfo;\n private _isLost: boolean = false;\n\n static type: string = 'webgpu';\n\n /** Check if WebGPU is available */\n static isSupported(): boolean {\n return Boolean(typeof navigator !== 'undefined' && navigator.gpu);\n }\n\n static async create(props: DeviceProps): Promise<WebGPUDevice> {\n if (!navigator.gpu) {\n throw new Error(\n 'WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu'\n );\n }\n log.groupCollapsed(1, 'WebGPUDevice created')();\n const adapter = await navigator.gpu.requestAdapter({\n powerPreference: 'high-performance'\n // forceSoftware: false\n });\n if (!adapter) {\n throw new Error('Failed to request WebGPU adapter');\n }\n\n const adapterInfo = await adapter.requestAdapterInfo();\n log.probe(2, 'Adapter available', adapterInfo)();\n\n const gpuDevice = await adapter.requestDevice({\n requiredFeatures: adapter.features as ReadonlySet<GPUFeatureName>\n // TODO ensure we obtain best limits\n // requiredLimits: adapter.limits\n });\n log.probe(1, 'GPUDevice available')();\n\n if (typeof props.canvas === 'string') {\n await CanvasContext.pageLoaded;\n log.probe(1, 'DOM is loaded')();\n }\n\n const device = new WebGPUDevice(gpuDevice, adapter, adapterInfo, props);\n\n log.probe(1, 'Device created. For more info, set chrome://flags/#enable-webgpu-developer-features')();\n log.table(1, device.info)();\n log.groupEnd(1)();\n return device;\n }\n\n constructor(device: GPUDevice, adapter: GPUAdapter, adapterInfo: GPUAdapterInfo, props: DeviceProps) {\n super({...props, id: props.id || uid('webgpu-device')});\n this.handle = device;\n this.adapter = adapter;\n\n const [driver, driverVersion] = ((adapterInfo as any).driver || '').split(' Version ');\n\n // See https://developer.chrome.com/blog/new-in-webgpu-120#adapter_information_updates\n const vendor = adapterInfo.vendor || this.adapter.__brand || 'unknown';\n const renderer = driver || '';\n const version = driverVersion || '';\n\n const gpu = vendor === 'apple' ? 'apple' : 'unknown'; // 'nvidia' | 'amd' | 'intel' | 'apple' | 'unknown',\n const gpuArchitecture = adapterInfo.architecture || 'unknown';\n const gpuBackend = (adapterInfo as any).backend || 'unknown';\n const gpuType = ((adapterInfo as any).type || '').split(' ')[0].toLowerCase() || 'unknown'\n\n this._info = {\n type: 'webgpu',\n vendor,\n renderer,\n version,\n gpu, \n gpuType,\n gpuBackend,\n gpuArchitecture,\n shadingLanguage: 'wgsl',\n shadingLanguageVersion: 100\n };\n\n // \"Context\" loss handling\n this.lost = new Promise<{reason: 'destroyed'; message: string}>(async resolve => {\n const lostInfo = await this.handle.lost;\n this._isLost = true;\n resolve({reason: 'destroyed', message: lostInfo.message});\n });\n\n // Note: WebGPU devices can be created without a canvas, for compute shader purposes\n // if (props.canvas) {\n this.canvasContext = new WebGPUCanvasContext(this, this.adapter, {\n canvas: props.canvas,\n height: props.height,\n width: props.width,\n container: props.container\n });\n // }\n\n this.features = this._getFeatures();\n }\n\n // TODO\n // Load the glslang module now so that it is available synchronously when compiling shaders\n // const {glsl = true} = props;\n // this.glslang = glsl && await loadGlslangModule();\n\n destroy(): void {\n this.handle.destroy();\n }\n\n get info(): DeviceInfo {\n return this._info;\n }\n\n features: Set<DeviceFeature>;\n\n get limits(): DeviceLimits {\n return this.handle.limits;\n }\n\n isTextureFormatSupported(format: TextureFormat): boolean {\n return !format.includes('webgl');\n }\n\n /** @todo implement proper check? */\n isTextureFormatFilterable(format: TextureFormat): boolean {\n return this.isTextureFormatSupported(format);\n }\n\n /** @todo implement proper check? */\n isTextureFormatRenderable(format: TextureFormat): boolean {\n return this.isTextureFormatSupported(format);\n }\n\n get isLost(): boolean {\n return this._isLost;\n }\n\n createBuffer(props: BufferProps | ArrayBuffer | ArrayBufferView): WebGPUBuffer {\n const newProps = this._getBufferProps(props);\n return new WebGPUBuffer(this, newProps);\n }\n\n _createTexture(props: TextureProps): WebGPUTexture {\n return new WebGPUTexture(this, props);\n }\n\n createExternalTexture(props: ExternalTextureProps): WebGPUExternalTexture {\n return new WebGPUExternalTexture(this, props);\n }\n\n createShader(props: ShaderProps): WebGPUShader {\n return new WebGPUShader(this, props);\n }\n\n createSampler(props: SamplerProps): WebGPUSampler {\n return new WebGPUSampler(this, props);\n }\n\n createRenderPipeline(props: RenderPipelineProps): WebGPURenderPipeline {\n return new WebGPURenderPipeline(this, props);\n }\n\n createFramebuffer(props: FramebufferProps): WebGPUFramebuffer {\n throw new Error('Not implemented');\n }\n\n createComputePipeline(props: ComputePipelineProps): WebGPUComputePipeline {\n return new WebGPUComputePipeline(this, props);\n }\n\n createVertexArray(props: VertexArrayProps): WebGPUVertexArray {\n return new WebGPUVertexArray(this, props);\n }\n\n // WebGPU specifics\n\n /**\n * Allows a render pass to begin against a canvas context\n * @todo need to support a \"Framebuffer\" equivalent (aka preconfigured RenderPassDescriptors?).\n */\n beginRenderPass(props: RenderPassProps): WebGPURenderPass {\n this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();\n return new WebGPURenderPass(this, props);\n }\n\n beginComputePass(props: ComputePassProps): WebGPUComputePass {\n this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();\n return new WebGPUComputePass(this, props);\n }\n\n // createCommandEncoder(props: CommandEncoderProps): WebGPUCommandEncoder {\n // return new WebGPUCommandEncoder(this, props);\n // }\n\n createTransformFeedback(props: TransformFeedbackProps): TransformFeedback {\n throw new Error('Transform feedback not supported in WebGPU');\n }\n\n createCanvasContext(props: CanvasContextProps): WebGPUCanvasContext {\n return new WebGPUCanvasContext(this, this.adapter, props);\n }\n\n /**\n * Gets default renderpass encoder.\n * Creates a new encoder against default canvasContext if not already created\n * @note Called internally by Model.\n * @deprecated Create explicit pass with device.beginRenderPass\n */\n getDefaultRenderPass(): WebGPURenderPass {\n // this.renderPass =\n // this.renderPass ||\n // this.beginRenderPass({\n // framebuffer: this.canvasContext?.getCurrentFramebuffer()\n // });\n // return this.renderPass;\n throw new Error('a');\n }\n\n submit(): void {\n // this.renderPass?.end();\n const commandBuffer = this.commandEncoder?.finish();\n if (commandBuffer) {\n this.handle.queue.submit([commandBuffer]);\n }\n this.commandEncoder = null;\n // this.renderPass = null;\n }\n\n _getFeatures() {\n // WebGPU Features\n const features = new Set<DeviceFeature>(this.handle.features as Set<DeviceFeature>);\n\n // Fixups for pre-standard names: https://github.com/webgpu-native/webgpu-headers/issues/133\n // @ts-expect-error Chrome Canary v99\n if (features.has('depth-clamping')) {\n // @ts-expect-error Chrome Canary v99\n features.delete('depth-clamping');\n features.add('depth-clip-control');\n }\n\n // Add subsets\n if (features.has('texture-compression-bc')) {\n features.add('texture-compression-bc5-webgl');\n }\n\n features.add('webgpu');\n\n features.add('timer-query-webgl');\n\n // WEBGL1 SUPPORT\n features.add('vertex-array-object-webgl1');\n features.add('instanced-rendering-webgl1');\n features.add('multiple-render-targets-webgl1');\n features.add('index-uint32-webgl1');\n features.add('blend-minmax-webgl1');\n features.add('texture-blend-float-webgl1');\n\n // TEXTURES, RENDERBUFFERS\n features.add('texture-formats-srgb-webgl1');\n\n // TEXTURES\n features.add('texture-formats-depth-webgl1');\n features.add('texture-formats-float32-webgl1');\n features.add('texture-formats-float16-webgl1');\n\n features.add('texture-filter-linear-float32-webgl');\n features.add('texture-filter-linear-float16-webgl');\n features.add('texture-filter-anisotropic-webgl');\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n features.add('texture-renderable-rgba32float-webgl');\n features.add('texture-renderable-float32-webgl');\n features.add('texture-renderable-float16-webgl');\n\n // GLSL extensions\n features.add('glsl-frag-data');\n features.add('glsl-frag-depth');\n features.add('glsl-derivatives');\n features.add('glsl-texture-lod');\n\n return features;\n }\n\n copyExternalImageToTexture(options: {\n texture: Texture;\n mipLevel?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only';\n colorSpace?: 'display-p3' | 'srgb';\n premultipliedAlpha?: boolean;\n\n source: ImageBitmap | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas;\n sourceX?: number;\n sourceY?: number;\n\n width?: number;\n height?: number;\n depth?: number;\n }): void {\n const {\n source,\n sourceX = 0,\n sourceY = 0,\n\n texture,\n mipLevel = 0,\n aspect = 'all',\n colorSpace = 'display-p3',\n premultipliedAlpha = false,\n // destinationX,\n // destinationY,\n // desitnationZ,\n\n width = texture.width,\n height = texture.height,\n depth = 1\n } = options;\n\n const webGpuTexture = texture as WebGPUTexture;\n\n this.handle?.queue.copyExternalImageToTexture(\n // source: GPUImageCopyExternalImage\n {\n source,\n origin: [sourceX, sourceY]\n },\n // destination: GPUImageCopyTextureTagged\n {\n texture: webGpuTexture.handle,\n origin: [0, 0, 0], // [x, y, z],\n mipLevel,\n aspect,\n colorSpace,\n premultipliedAlpha\n },\n // copySize: GPUExtent3D\n [width, height, depth]\n );\n }\n}\n"],"mappings":"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"}
package/dist/dist.dev.js CHANGED
@@ -596,7 +596,7 @@ var __exports__ = (() => {
596
596
  id: "@probe.gl/log"
597
597
  });
598
598
 
599
- // ../core/src/lib/utils/log.ts
599
+ // ../core/src/utils/log.ts
600
600
  var log = new Log({
601
601
  id: "luma.gl"
602
602
  });
@@ -792,7 +792,7 @@ var __exports__ = (() => {
792
792
  }
793
793
  };
794
794
 
795
- // ../core/src/lib/utils/stats-manager.ts
795
+ // ../core/src/utils/stats-manager.ts
796
796
  var StatsManager = class {
797
797
  stats = /* @__PURE__ */ new Map();
798
798
  getStats(name2) {
@@ -811,14 +811,14 @@ var __exports__ = (() => {
811
811
 
812
812
  // ../core/src/init.ts
813
813
  function initializeLuma() {
814
- const VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
814
+ const VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "running from source";
815
815
  const STARTUP_MESSAGE = "set luma.log.level=1 (or higher) to trace rendering";
816
816
  if (globalThis.luma && globalThis.luma.VERSION !== VERSION3) {
817
817
  throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION3}`);
818
818
  }
819
819
  if (!globalThis.luma) {
820
820
  if (isBrowser()) {
821
- log.log(1, `luma.gl ${VERSION3} - ${STARTUP_MESSAGE}`)();
821
+ log.log(1, `${VERSION3} - ${STARTUP_MESSAGE}`)();
822
822
  }
823
823
  globalThis.luma = globalThis.luma || {
824
824
  VERSION: VERSION3,
@@ -831,7 +831,7 @@ var __exports__ = (() => {
831
831
  }
832
832
  var VERSION2 = initializeLuma();
833
833
 
834
- // ../core/src/lib/utils/utils.ts
834
+ // ../core/src/utils/utils.ts
835
835
  var uidCounters = {};
836
836
  function uid(id = "id") {
837
837
  uidCounters[id] = uidCounters[id] || 1;
@@ -1506,7 +1506,10 @@ ${htmlLog}
1506
1506
  button.style.width = "100%";
1507
1507
  button.style.textAlign = "left";
1508
1508
  document.body.appendChild(button);
1509
- document.getElementsByClassName("luma-compiler-log-error")[0]?.scrollIntoView();
1509
+ const errors = document.getElementsByClassName("luma-compiler-log-error");
1510
+ if (errors[0]?.scrollIntoView) {
1511
+ errors[0].scrollIntoView();
1512
+ }
1510
1513
  button.onclick = () => {
1511
1514
  const dataURI = `data:text/plain,${encodeURIComponent(this.source)}`;
1512
1515
  navigator.clipboard.writeText(dataURI);
@@ -1990,7 +1993,7 @@ ${htmlLog}
1990
1993
  renderPipeline: null
1991
1994
  });
1992
1995
 
1993
- // ../core/src/lib/utils/cast.ts
1996
+ // ../core/src/utils/cast.ts
1994
1997
  function cast(value) {
1995
1998
  return value;
1996
1999
  }
@@ -2642,11 +2645,11 @@ ${htmlLog}
2642
2645
  constructor(device, props) {
2643
2646
  super(device, props);
2644
2647
  this.device = device;
2645
- const module = cast(this.props.cs).handle;
2648
+ const webgpuShader = this.props.cs;
2646
2649
  this.handle = this.props.handle || this.device.handle.createComputePipeline({
2647
2650
  label: this.props.id,
2648
2651
  compute: {
2649
- module,
2652
+ module: webgpuShader.handle,
2650
2653
  entryPoint: this.props.csEntryPoint
2651
2654
  },
2652
2655
  layout: "auto"
@@ -2783,7 +2786,7 @@ ${htmlLog}
2783
2786
  this.handle.end();
2784
2787
  }
2785
2788
  setPipeline(pipeline) {
2786
- const wgpuPipeline = cast(pipeline);
2789
+ const wgpuPipeline = pipeline;
2787
2790
  this.handle.setPipeline(wgpuPipeline.handle);
2788
2791
  this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();
2789
2792
  }
@@ -2794,7 +2797,8 @@ ${htmlLog}
2794
2797
  this.handle.dispatchWorkgroups(x, y, z);
2795
2798
  }
2796
2799
  dispatchIndirect(indirectBuffer, indirectOffset = 0) {
2797
- this.handle.dispatchWorkgroupsIndirect(cast(indirectBuffer).handle, indirectOffset);
2800
+ const webgpuBuffer = indirectBuffer;
2801
+ this.handle.dispatchWorkgroupsIndirect(webgpuBuffer.handle, indirectOffset);
2798
2802
  }
2799
2803
  pushDebugGroup(groupLabel) {
2800
2804
  this.handle.pushDebugGroup(groupLabel);
@@ -2943,7 +2947,7 @@ ${htmlLog}
2943
2947
  throw new Error("Failed to request WebGPU adapter");
2944
2948
  }
2945
2949
  const adapterInfo = await adapter.requestAdapterInfo();
2946
- log.probe(1, "Adapter available", adapterInfo)();
2950
+ log.probe(2, "Adapter available", adapterInfo)();
2947
2951
  const gpuDevice = await adapter.requestDevice({
2948
2952
  requiredFeatures: adapter.features
2949
2953
  });
@@ -2952,29 +2956,38 @@ ${htmlLog}
2952
2956
  await CanvasContext.pageLoaded;
2953
2957
  log.probe(1, "DOM is loaded")();
2954
2958
  }
2955
- const device = new _WebGPUDevice(gpuDevice, adapter, props);
2956
- log.probe(1, "Device created", device.info)();
2959
+ const device = new _WebGPUDevice(gpuDevice, adapter, adapterInfo, props);
2960
+ log.probe(1, "Device created. For more info, set chrome://flags/#enable-webgpu-developer-features")();
2957
2961
  log.table(1, device.info)();
2958
2962
  log.groupEnd(1)();
2959
2963
  return device;
2960
2964
  }
2961
- constructor(device, adapter, props) {
2965
+ constructor(device, adapter, adapterInfo, props) {
2962
2966
  super({
2963
2967
  ...props,
2964
2968
  id: props.id || uid("webgpu-device")
2965
2969
  });
2966
2970
  this.handle = device;
2967
2971
  this.adapter = adapter;
2972
+ const [driver, driverVersion] = (adapterInfo.driver || "").split(" Version ");
2973
+ const vendor = adapterInfo.vendor || this.adapter.__brand || "unknown";
2974
+ const renderer = driver || "";
2975
+ const version = driverVersion || "";
2976
+ const gpu = vendor === "apple" ? "apple" : "unknown";
2977
+ const gpuArchitecture = adapterInfo.architecture || "unknown";
2978
+ const gpuBackend = adapterInfo.backend || "unknown";
2979
+ const gpuType = (adapterInfo.type || "").split(" ")[0].toLowerCase() || "unknown";
2968
2980
  this._info = {
2969
2981
  type: "webgpu",
2970
- vendor: this.adapter.__brand,
2971
- renderer: "",
2972
- version: "",
2973
- gpu: "unknown",
2982
+ vendor,
2983
+ renderer,
2984
+ version,
2985
+ gpu,
2986
+ gpuType,
2987
+ gpuBackend,
2988
+ gpuArchitecture,
2974
2989
  shadingLanguage: "wgsl",
2975
- shadingLanguageVersion: 100,
2976
- vendorMasked: "",
2977
- rendererMasked: ""
2990
+ shadingLanguageVersion: 100
2978
2991
  };
2979
2992
  this.lost = new Promise(async (resolve) => {
2980
2993
  const lostInfo = await this.handle.lost;