@luma.gl/webgpu 9.0.0-alpha.52 → 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;
@@ -1993,7 +1993,7 @@ ${htmlLog}
1993
1993
  renderPipeline: null
1994
1994
  });
1995
1995
 
1996
- // ../core/src/lib/utils/cast.ts
1996
+ // ../core/src/utils/cast.ts
1997
1997
  function cast(value) {
1998
1998
  return value;
1999
1999
  }
@@ -2645,11 +2645,11 @@ ${htmlLog}
2645
2645
  constructor(device, props) {
2646
2646
  super(device, props);
2647
2647
  this.device = device;
2648
- const module = cast(this.props.cs).handle;
2648
+ const webgpuShader = this.props.cs;
2649
2649
  this.handle = this.props.handle || this.device.handle.createComputePipeline({
2650
2650
  label: this.props.id,
2651
2651
  compute: {
2652
- module,
2652
+ module: webgpuShader.handle,
2653
2653
  entryPoint: this.props.csEntryPoint
2654
2654
  },
2655
2655
  layout: "auto"
@@ -2786,7 +2786,7 @@ ${htmlLog}
2786
2786
  this.handle.end();
2787
2787
  }
2788
2788
  setPipeline(pipeline) {
2789
- const wgpuPipeline = cast(pipeline);
2789
+ const wgpuPipeline = pipeline;
2790
2790
  this.handle.setPipeline(wgpuPipeline.handle);
2791
2791
  this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();
2792
2792
  }
@@ -2797,7 +2797,8 @@ ${htmlLog}
2797
2797
  this.handle.dispatchWorkgroups(x, y, z);
2798
2798
  }
2799
2799
  dispatchIndirect(indirectBuffer, indirectOffset = 0) {
2800
- this.handle.dispatchWorkgroupsIndirect(cast(indirectBuffer).handle, indirectOffset);
2800
+ const webgpuBuffer = indirectBuffer;
2801
+ this.handle.dispatchWorkgroupsIndirect(webgpuBuffer.handle, indirectOffset);
2801
2802
  }
2802
2803
  pushDebugGroup(groupLabel) {
2803
2804
  this.handle.pushDebugGroup(groupLabel);
@@ -2946,7 +2947,7 @@ ${htmlLog}
2946
2947
  throw new Error("Failed to request WebGPU adapter");
2947
2948
  }
2948
2949
  const adapterInfo = await adapter.requestAdapterInfo();
2949
- log.probe(1, "Adapter available", adapterInfo)();
2950
+ log.probe(2, "Adapter available", adapterInfo)();
2950
2951
  const gpuDevice = await adapter.requestDevice({
2951
2952
  requiredFeatures: adapter.features
2952
2953
  });
@@ -2955,29 +2956,38 @@ ${htmlLog}
2955
2956
  await CanvasContext.pageLoaded;
2956
2957
  log.probe(1, "DOM is loaded")();
2957
2958
  }
2958
- const device = new _WebGPUDevice(gpuDevice, adapter, props);
2959
- 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")();
2960
2961
  log.table(1, device.info)();
2961
2962
  log.groupEnd(1)();
2962
2963
  return device;
2963
2964
  }
2964
- constructor(device, adapter, props) {
2965
+ constructor(device, adapter, adapterInfo, props) {
2965
2966
  super({
2966
2967
  ...props,
2967
2968
  id: props.id || uid("webgpu-device")
2968
2969
  });
2969
2970
  this.handle = device;
2970
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";
2971
2980
  this._info = {
2972
2981
  type: "webgpu",
2973
- vendor: this.adapter.__brand,
2974
- renderer: "",
2975
- version: "",
2976
- gpu: "unknown",
2982
+ vendor,
2983
+ renderer,
2984
+ version,
2985
+ gpu,
2986
+ gpuType,
2987
+ gpuBackend,
2988
+ gpuArchitecture,
2977
2989
  shadingLanguage: "wgsl",
2978
- shadingLanguageVersion: 100,
2979
- vendorMasked: "",
2980
- rendererMasked: ""
2990
+ shadingLanguageVersion: 100
2981
2991
  };
2982
2992
  this.lost = new Promise(async (resolve) => {
2983
2993
  const lostInfo = await this.handle.lost;