@luma.gl/webgpu 9.1.1 → 9.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -29,10 +29,10 @@ __export(dist_exports, {
29
29
  module.exports = __toCommonJS(dist_exports);
30
30
 
31
31
  // dist/adapter/webgpu-adapter.js
32
- var import_core18 = require("@luma.gl/core");
32
+ var import_core19 = require("@luma.gl/core");
33
33
 
34
34
  // dist/adapter/webgpu-device.js
35
- var import_core17 = require("@luma.gl/core");
35
+ var import_core18 = require("@luma.gl/core");
36
36
 
37
37
  // dist/adapter/resources/webgpu-buffer.js
38
38
  var import_core = require("@luma.gl/core");
@@ -369,9 +369,10 @@ var WebGPUShader = class extends import_core6.Shader {
369
369
  };
370
370
 
371
371
  // dist/adapter/resources/webgpu-render-pipeline.js
372
- var import_core9 = require("@luma.gl/core");
372
+ var import_core10 = require("@luma.gl/core");
373
373
 
374
374
  // dist/adapter/helpers/webgpu-parameters.js
375
+ var import_core7 = require("@luma.gl/core");
375
376
  function addDepthStencil(descriptor) {
376
377
  descriptor.depthStencil = descriptor.depthStencil || {
377
378
  // required, set something
@@ -551,7 +552,8 @@ function setParameters(pipelineDescriptor, parameters) {
551
552
  for (const [key, value] of Object.entries(parameters)) {
552
553
  const setterFunction = PARAMETER_TABLE[key];
553
554
  if (!setterFunction) {
554
- throw new Error(`Illegal parameter ${key}`);
555
+ import_core7.log.warn(`Illegal parameter ${key}`)();
556
+ continue;
555
557
  }
556
558
  setterFunction(key, value, pipelineDescriptor);
557
559
  }
@@ -560,7 +562,7 @@ function addColorState(descriptor) {
560
562
  var _a, _b, _c, _d, _e, _f;
561
563
  descriptor.fragment.targets = ((_a = descriptor.fragment) == null ? void 0 : _a.targets) || [];
562
564
  if (!Array.isArray((_b = descriptor.fragment) == null ? void 0 : _b.targets)) {
563
- throw new Error("colorstate");
565
+ import_core7.log.warn("parameters: no targets array")();
564
566
  }
565
567
  if (((_d = (_c = descriptor.fragment) == null ? void 0 : _c.targets) == null ? void 0 : _d.length) === 0) {
566
568
  (_e = descriptor.fragment.targets) == null ? void 0 : _e.push({});
@@ -569,7 +571,7 @@ function addColorState(descriptor) {
569
571
  }
570
572
 
571
573
  // dist/adapter/helpers/get-bind-group.js
572
- var import_core7 = require("@luma.gl/core");
574
+ var import_core8 = require("@luma.gl/core");
573
575
  function getBindGroup(device, bindGroupLayout, shaderLayout, bindings) {
574
576
  const entries = getBindGroupEntries(bindings, shaderLayout);
575
577
  return device.createBindGroup({
@@ -580,7 +582,7 @@ function getBindGroup(device, bindGroupLayout, shaderLayout, bindings) {
580
582
  function getShaderLayoutBinding(shaderLayout, bindingName) {
581
583
  const bindingLayout = shaderLayout.bindings.find((binding) => binding.name === bindingName || `${binding.name}uniforms` === bindingName.toLocaleLowerCase());
582
584
  if (!bindingLayout) {
583
- import_core7.log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();
585
+ import_core8.log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();
584
586
  }
585
587
  return bindingLayout || null;
586
588
  }
@@ -599,7 +601,7 @@ function getBindGroupEntries(bindings, shaderLayout) {
599
601
  return entries;
600
602
  }
601
603
  function getBindGroupEntry(binding, index, options) {
602
- if (binding instanceof import_core7.Buffer) {
604
+ if (binding instanceof import_core8.Buffer) {
603
605
  return {
604
606
  binding: index,
605
607
  resource: {
@@ -607,12 +609,12 @@ function getBindGroupEntry(binding, index, options) {
607
609
  }
608
610
  };
609
611
  }
610
- if (binding instanceof import_core7.Sampler) {
612
+ if (binding instanceof import_core8.Sampler) {
611
613
  return {
612
614
  binding: index,
613
615
  resource: binding.handle
614
616
  };
615
- } else if (binding instanceof import_core7.Texture) {
617
+ } else if (binding instanceof import_core8.Texture) {
616
618
  if (options == null ? void 0 : options.sampler) {
617
619
  return {
618
620
  binding: index,
@@ -628,7 +630,7 @@ function getBindGroupEntry(binding, index, options) {
628
630
  }
629
631
 
630
632
  // dist/adapter/helpers/get-vertex-buffer-layout.js
631
- var import_core8 = require("@luma.gl/core");
633
+ var import_core9 = require("@luma.gl/core");
632
634
  function getWebGPUVertexFormat(format) {
633
635
  if (format.endsWith("-webgl")) {
634
636
  throw new Error(`WebGPU does not support vertex format ${format}`);
@@ -642,26 +644,27 @@ function getVertexBufferLayout(shaderLayout, bufferLayout) {
642
644
  const vertexAttributes = [];
643
645
  let stepMode = "vertex";
644
646
  let byteStride = 0;
645
- const format = mapping.format;
647
+ let format = mapping.format;
646
648
  if (mapping.attributes) {
647
649
  for (const attributeMapping of mapping.attributes) {
648
650
  const attributeName = attributeMapping.attribute;
649
651
  const attributeLayout = findAttributeLayout(shaderLayout, attributeName, usedAttributes);
650
652
  const location = attributeLayout == null ? void 0 : attributeLayout.location;
653
+ format = attributeMapping.format || mapping.format;
651
654
  stepMode = (attributeLayout == null ? void 0 : attributeLayout.stepMode) || ((attributeLayout == null ? void 0 : attributeLayout.name.startsWith("instance")) ? "instance" : "vertex");
652
655
  vertexAttributes.push({
653
- format: getWebGPUVertexFormat(attributeMapping.format || mapping.format),
656
+ format: getWebGPUVertexFormat(format),
654
657
  offset: attributeMapping.byteOffset,
655
658
  shaderLocation: location
656
659
  });
657
- byteStride += (0, import_core8.decodeVertexFormat)(format).byteLength;
660
+ byteStride += (0, import_core9.decodeVertexFormat)(format).byteLength;
658
661
  }
659
662
  } else {
660
663
  const attributeLayout = findAttributeLayout(shaderLayout, mapping.name, usedAttributes);
661
664
  if (!attributeLayout) {
662
665
  continue;
663
666
  }
664
- byteStride = (0, import_core8.decodeVertexFormat)(format).byteLength;
667
+ byteStride = (0, import_core9.decodeVertexFormat)(format).byteLength;
665
668
  stepMode = attributeLayout.stepMode || (attributeLayout.name.startsWith("instance") ? "instance" : "vertex");
666
669
  vertexAttributes.push({
667
670
  format: getWebGPUVertexFormat(format),
@@ -679,7 +682,7 @@ function getVertexBufferLayout(shaderLayout, bufferLayout) {
679
682
  for (const attribute of shaderLayout.attributes) {
680
683
  if (!usedAttributes.has(attribute.name)) {
681
684
  vertexBufferLayouts.push({
682
- arrayStride: (0, import_core8.decodeVertexFormat)("float32x3").byteLength,
685
+ arrayStride: (0, import_core9.decodeVertexFormat)("float32x3").byteLength,
683
686
  stepMode: attribute.stepMode || (attribute.name.startsWith("instance") ? "instance" : "vertex"),
684
687
  attributes: [
685
688
  {
@@ -696,7 +699,7 @@ function getVertexBufferLayout(shaderLayout, bufferLayout) {
696
699
  function findAttributeLayout(shaderLayout, name, attributeNames) {
697
700
  const attribute = shaderLayout.attributes.find((attribute_) => attribute_.name === name);
698
701
  if (!attribute) {
699
- import_core8.log.warn(`Unknown attribute ${name}`)();
702
+ import_core9.log.warn(`Unknown attribute ${name}`)();
700
703
  return null;
701
704
  }
702
705
  if (attributeNames.has(name)) {
@@ -707,7 +710,7 @@ function findAttributeLayout(shaderLayout, name, attributeNames) {
707
710
  }
708
711
 
709
712
  // dist/adapter/resources/webgpu-render-pipeline.js
710
- var WebGPURenderPipeline = class extends import_core9.RenderPipeline {
713
+ var WebGPURenderPipeline = class extends import_core10.RenderPipeline {
711
714
  device;
712
715
  handle;
713
716
  vs;
@@ -722,15 +725,15 @@ var WebGPURenderPipeline = class extends import_core9.RenderPipeline {
722
725
  this.handle = this.props.handle;
723
726
  if (!this.handle) {
724
727
  const descriptor = this._getRenderPipelineDescriptor();
725
- import_core9.log.groupCollapsed(1, `new WebGPURenderPipeline(${this.id})`)();
726
- import_core9.log.probe(1, JSON.stringify(descriptor, null, 2))();
727
- import_core9.log.groupEnd(1)();
728
+ import_core10.log.groupCollapsed(1, `new WebGPURenderPipeline(${this.id})`)();
729
+ import_core10.log.probe(1, JSON.stringify(descriptor, null, 2))();
730
+ import_core10.log.groupEnd(1)();
728
731
  this.device.handle.pushErrorScope("validation");
729
732
  this.handle = this.device.handle.createRenderPipeline(descriptor);
730
733
  this.device.handle.popErrorScope().then((error) => {
731
734
  var _a;
732
735
  if (error) {
733
- import_core9.log.error(`${this} creation failed:
736
+ import_core10.log.error(`${this} creation failed:
734
737
  "${error.message}"`, this, (_a = this.props.vs) == null ? void 0 : _a.source)();
735
738
  }
736
739
  });
@@ -757,7 +760,7 @@ var WebGPURenderPipeline = class extends import_core9.RenderPipeline {
757
760
  webgpuRenderPass.handle.setPipeline(this.handle);
758
761
  this.device.handle.popErrorScope().then((error) => {
759
762
  if (error) {
760
- import_core9.log.error(`${this} setPipeline failed:
763
+ import_core10.log.error(`${this} setPipeline failed:
761
764
  "${error.message}"`, this)();
762
765
  }
763
766
  });
@@ -815,14 +818,21 @@ var WebGPURenderPipeline = class extends import_core9.RenderPipeline {
815
818
  },
816
819
  layout: "auto"
817
820
  };
821
+ if (this.props.parameters.depthWriteEnabled && this.props.parameters.depthCompare) {
822
+ descriptor.depthStencil = {
823
+ format: "depth24plus",
824
+ depthWriteEnabled: this.props.parameters.depthWriteEnabled,
825
+ depthCompare: this.props.parameters.depthCompare
826
+ };
827
+ }
818
828
  applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);
819
829
  return descriptor;
820
830
  }
821
831
  };
822
832
 
823
833
  // dist/adapter/resources/webgpu-framebuffer.js
824
- var import_core10 = require("@luma.gl/core");
825
- var WebGPUFramebuffer = class extends import_core10.Framebuffer {
834
+ var import_core11 = require("@luma.gl/core");
835
+ var WebGPUFramebuffer = class extends import_core11.Framebuffer {
826
836
  device;
827
837
  colorAttachments = [];
828
838
  depthStencilAttachment = null;
@@ -836,8 +846,8 @@ var WebGPUFramebuffer = class extends import_core10.Framebuffer {
836
846
  };
837
847
 
838
848
  // dist/adapter/resources/webgpu-compute-pipeline.js
839
- var import_core11 = require("@luma.gl/core");
840
- var WebGPUComputePipeline = class extends import_core11.ComputePipeline {
849
+ var import_core12 = require("@luma.gl/core");
850
+ var WebGPUComputePipeline = class extends import_core12.ComputePipeline {
841
851
  device;
842
852
  handle;
843
853
  /** For internal use to create BindGroups */
@@ -875,8 +885,8 @@ var WebGPUComputePipeline = class extends import_core11.ComputePipeline {
875
885
  };
876
886
 
877
887
  // dist/adapter/resources/webgpu-render-pass.js
878
- var import_core12 = require("@luma.gl/core");
879
- var WebGPURenderPass = class extends import_core12.RenderPass {
888
+ var import_core13 = require("@luma.gl/core");
889
+ var WebGPURenderPass = class extends import_core13.RenderPass {
880
890
  device;
881
891
  handle;
882
892
  /** Active pipeline */
@@ -905,14 +915,14 @@ var WebGPURenderPass = class extends import_core12.RenderPass {
905
915
  this.handle = this.props.handle || device.commandEncoder.beginRenderPass(renderPassDescriptor);
906
916
  this.device.handle.popErrorScope().then((error) => {
907
917
  if (error) {
908
- import_core12.log.error(`${this} creation failed:
918
+ import_core13.log.error(`${this} creation failed:
909
919
  "${error.message}"`, this)();
910
920
  }
911
921
  });
912
922
  this.handle.label = this.props.id;
913
- import_core12.log.groupCollapsed(3, `new WebGPURenderPass(${this.id})`)();
914
- import_core12.log.probe(3, JSON.stringify(renderPassDescriptor, null, 2))();
915
- import_core12.log.groupEnd(3)();
923
+ import_core13.log.groupCollapsed(3, `new WebGPURenderPass(${this.id})`)();
924
+ import_core13.log.probe(3, JSON.stringify(renderPassDescriptor, null, 2))();
925
+ import_core13.log.groupEnd(3)();
916
926
  }
917
927
  destroy() {
918
928
  }
@@ -992,7 +1002,7 @@ var WebGPURenderPass = class extends import_core12.RenderPass {
992
1002
  return {
993
1003
  // clear values
994
1004
  loadOp: this.props.clearColor !== false ? "clear" : "load",
995
- colorClearValue: ((_a = this.props.clearColors) == null ? void 0 : _a[index]) || this.props.clearColor || import_core12.RenderPass.defaultClearColor,
1005
+ clearValue: convertColor(((_a = this.props.clearColors) == null ? void 0 : _a[index]) || this.props.clearColor || import_core13.RenderPass.defaultClearColor),
996
1006
  storeOp: this.props.discard ? "discard" : "store",
997
1007
  // ...colorAttachment,
998
1008
  view: colorAttachment.handle
@@ -1023,10 +1033,13 @@ var WebGPURenderPass = class extends import_core12.RenderPass {
1023
1033
  return renderPassDescriptor;
1024
1034
  }
1025
1035
  };
1036
+ function convertColor(color) {
1037
+ return { r: color[0], g: color[1], b: color[2], a: color[3] };
1038
+ }
1026
1039
 
1027
1040
  // dist/adapter/resources/webgpu-compute-pass.js
1028
- var import_core13 = require("@luma.gl/core");
1029
- var WebGPUComputePass = class extends import_core13.ComputePass {
1041
+ var import_core14 = require("@luma.gl/core");
1042
+ var WebGPUComputePass = class extends import_core14.ComputePass {
1030
1043
  device;
1031
1044
  handle;
1032
1045
  _webgpuPipeline = null;
@@ -1102,9 +1115,9 @@ var WebGPUComputePass = class extends import_core13.ComputePass {
1102
1115
  };
1103
1116
 
1104
1117
  // dist/adapter/resources/webgpu-vertex-array.js
1105
- var import_core14 = require("@luma.gl/core");
1118
+ var import_core15 = require("@luma.gl/core");
1106
1119
  var import_env = require("@probe.gl/env");
1107
- var WebGPUVertexArray = class extends import_core14.VertexArray {
1120
+ var WebGPUVertexArray = class extends import_core15.VertexArray {
1108
1121
  get [Symbol.toStringTag]() {
1109
1122
  return "WebGPUVertexArray";
1110
1123
  }
@@ -1133,7 +1146,7 @@ var WebGPUVertexArray = class extends import_core14.VertexArray {
1133
1146
  const webgpuRenderPass = renderPass;
1134
1147
  const webgpuIndexBuffer = this.indexBuffer;
1135
1148
  if (webgpuIndexBuffer == null ? void 0 : webgpuIndexBuffer.handle) {
1136
- import_core14.log.info(3, "setting index buffer", webgpuIndexBuffer == null ? void 0 : webgpuIndexBuffer.handle, webgpuIndexBuffer == null ? void 0 : webgpuIndexBuffer.indexType)();
1149
+ import_core15.log.info(3, "setting index buffer", webgpuIndexBuffer == null ? void 0 : webgpuIndexBuffer.handle, webgpuIndexBuffer == null ? void 0 : webgpuIndexBuffer.indexType)();
1137
1150
  webgpuRenderPass.handle.setIndexBuffer(
1138
1151
  webgpuIndexBuffer == null ? void 0 : webgpuIndexBuffer.handle,
1139
1152
  // @ts-expect-error TODO - we must enforce type
@@ -1143,7 +1156,7 @@ var WebGPUVertexArray = class extends import_core14.VertexArray {
1143
1156
  for (let location = 0; location < this.maxVertexAttributes; location++) {
1144
1157
  const webgpuBuffer = this.attributes[location];
1145
1158
  if (webgpuBuffer == null ? void 0 : webgpuBuffer.handle) {
1146
- import_core14.log.info(3, `setting vertex buffer ${location}`, webgpuBuffer == null ? void 0 : webgpuBuffer.handle)();
1159
+ import_core15.log.info(3, `setting vertex buffer ${location}`, webgpuBuffer == null ? void 0 : webgpuBuffer.handle)();
1147
1160
  webgpuRenderPass.handle.setVertexBuffer(location, webgpuBuffer == null ? void 0 : webgpuBuffer.handle);
1148
1161
  }
1149
1162
  }
@@ -1161,8 +1174,8 @@ var WebGPUVertexArray = class extends import_core14.VertexArray {
1161
1174
  };
1162
1175
 
1163
1176
  // dist/adapter/webgpu-canvas-context.js
1164
- var import_core15 = require("@luma.gl/core");
1165
- var WebGPUCanvasContext = class extends import_core15.CanvasContext {
1177
+ var import_core16 = require("@luma.gl/core");
1178
+ var WebGPUCanvasContext = class extends import_core16.CanvasContext {
1166
1179
  device;
1167
1180
  gpuCanvasContext;
1168
1181
  /** Format of returned textures: "bgra8unorm", "rgba8unorm", "rgba16float". */
@@ -1219,7 +1232,7 @@ var WebGPUCanvasContext = class extends import_core15.CanvasContext {
1219
1232
  colorSpace: this.props.colorSpace,
1220
1233
  alphaMode: this.props.alphaMode
1221
1234
  });
1222
- import_core15.log.log(1, `${this} Resized ${oldWidth}x${oldHeight} => ${newWidth}x${newHeight}px`)();
1235
+ import_core16.log.log(1, `${this} Resized ${oldWidth}x${oldHeight} => ${newWidth}x${newHeight}px`)();
1223
1236
  }
1224
1237
  }
1225
1238
  resize(options) {
@@ -1256,8 +1269,8 @@ var WebGPUCanvasContext = class extends import_core15.CanvasContext {
1256
1269
  };
1257
1270
 
1258
1271
  // dist/adapter/resources/webgpu-query-set.js
1259
- var import_core16 = require("@luma.gl/core");
1260
- var WebGPUQuerySet = class extends import_core16.QuerySet {
1272
+ var import_core17 = require("@luma.gl/core");
1273
+ var WebGPUQuerySet = class extends import_core17.QuerySet {
1261
1274
  device;
1262
1275
  handle;
1263
1276
  constructor(device, props) {
@@ -1277,7 +1290,7 @@ var WebGPUQuerySet = class extends import_core16.QuerySet {
1277
1290
  };
1278
1291
 
1279
1292
  // dist/adapter/webgpu-device.js
1280
- var WebGPUDevice = class extends import_core17.Device {
1293
+ var WebGPUDevice = class extends import_core18.Device {
1281
1294
  /** type of this device */
1282
1295
  type = "webgpu";
1283
1296
  /** The underlying WebGPU device */
@@ -1315,8 +1328,8 @@ var WebGPUDevice = class extends import_core17.Device {
1315
1328
  this._isLost = true;
1316
1329
  resolve({ reason: "destroyed", message: lostInfo.message });
1317
1330
  });
1318
- if (props.createCanvasContext) {
1319
- const canvasContextProps = props.createCanvasContext === true ? {} : props.createCanvasContext;
1331
+ const canvasContextProps = import_core18.Device._getCanvasContextProps(props);
1332
+ if (canvasContextProps) {
1320
1333
  this.canvasContext = new WebGPUCanvasContext(this, this.adapter, canvasContextProps);
1321
1334
  }
1322
1335
  }
@@ -1441,7 +1454,7 @@ var WebGPUDevice = class extends import_core17.Device {
1441
1454
  for (const feature of WEBGPU_ALWAYS_FEATURES) {
1442
1455
  features.add(feature);
1443
1456
  }
1444
- return new import_core17.DeviceFeatures(Array.from(features), this.props._disabledFeatures);
1457
+ return new import_core18.DeviceFeatures(Array.from(features), this.props._disabledFeatures);
1445
1458
  }
1446
1459
  _getDeviceSpecificTextureFormatCapabilities(capabilities) {
1447
1460
  const { format } = capabilities;
@@ -1494,7 +1507,7 @@ var WebGPUDevice = class extends import_core17.Device {
1494
1507
  };
1495
1508
 
1496
1509
  // dist/adapter/webgpu-adapter.js
1497
- var WebGPUAdapter = class extends import_core18.Adapter {
1510
+ var WebGPUAdapter = class extends import_core19.Adapter {
1498
1511
  /** type of device's created by this adapter */
1499
1512
  type = "webgpu";
1500
1513
  constructor() {
@@ -1510,7 +1523,7 @@ var WebGPUAdapter = class extends import_core18.Adapter {
1510
1523
  if (!navigator.gpu) {
1511
1524
  throw new Error("WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu");
1512
1525
  }
1513
- import_core18.log.groupCollapsed(1, "WebGPUDevice created")();
1526
+ import_core19.log.groupCollapsed(1, "WebGPUDevice created")();
1514
1527
  const adapter = await navigator.gpu.requestAdapter({
1515
1528
  powerPreference: "high-performance"
1516
1529
  // forceSoftware: false
@@ -1520,7 +1533,7 @@ var WebGPUAdapter = class extends import_core18.Adapter {
1520
1533
  }
1521
1534
  const adapterInfo = adapter.info || // @ts-ignore Chrome has removed this function
1522
1535
  await ((_a = adapter.requestAdapterInfo) == null ? void 0 : _a.call(adapter));
1523
- import_core18.log.probe(2, "Adapter available", adapterInfo)();
1536
+ import_core19.log.probe(2, "Adapter available", adapterInfo)();
1524
1537
  const requiredFeatures = [];
1525
1538
  const requiredLimits = {};
1526
1539
  if (props._requestMaxLimits) {
@@ -1538,11 +1551,11 @@ var WebGPUAdapter = class extends import_core18.Adapter {
1538
1551
  requiredFeatures,
1539
1552
  requiredLimits
1540
1553
  });
1541
- import_core18.log.probe(1, "GPUDevice available")();
1554
+ import_core19.log.probe(1, "GPUDevice available")();
1542
1555
  const device = new WebGPUDevice(props, gpuDevice, adapter, adapterInfo);
1543
- import_core18.log.probe(1, "Device created. For more info, set chrome://flags/#enable-webgpu-developer-features")();
1544
- import_core18.log.table(1, device.info)();
1545
- import_core18.log.groupEnd(1)();
1556
+ import_core19.log.probe(1, "Device created. For more info, set chrome://flags/#enable-webgpu-developer-features")();
1557
+ import_core19.log.table(1, device.info)();
1558
+ import_core19.log.groupEnd(1)();
1546
1559
  return device;
1547
1560
  }
1548
1561
  async attach(handle) {