@luma.gl/webgpu 9.3.0-alpha.2 → 9.3.0-alpha.4

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 +1 @@
1
- {"version":3,"file":"get-bind-group.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAE,kBAAkB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAMpF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,OAAO,EAAE,GAClB,kBAAkB,CAMpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,kBAAkB,EACnC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAad;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAC,GACnC,kBAAkB,GAAG,IAAI,CAU3B"}
1
+ {"version":3,"file":"get-bind-group.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAE,kBAAkB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAOpF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,OAAO,EAAE,GAClB,kBAAkB,CAMpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,kBAAkB,EACnC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAad;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAC,GACnC,kBAAkB,GAAG,IAAI,CAU3B"}
@@ -1,7 +1,7 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { Buffer, Sampler, Texture, log } from '@luma.gl/core';
4
+ import { Buffer, Sampler, Texture, TextureView, log } from '@luma.gl/core';
5
5
  /**
6
6
  * Create a WebGPU "bind group layout" from an array of luma.gl bindings
7
7
  * @note bind groups can be automatically generated by WebGPU.
@@ -47,7 +47,7 @@ function getBindGroupEntries(bindings, shaderLayout) {
47
47
  for (const [bindingName, value] of Object.entries(bindings)) {
48
48
  let bindingLayout = getShaderLayoutBinding(shaderLayout, bindingName);
49
49
  if (bindingLayout) {
50
- const entry = getBindGroupEntry(value, bindingLayout.location);
50
+ const entry = getBindGroupEntry(value, bindingLayout.location, undefined, bindingName);
51
51
  if (entry) {
52
52
  entries.push(entry);
53
53
  }
@@ -58,7 +58,7 @@ function getBindGroupEntries(bindings, shaderLayout) {
58
58
  ignoreWarnings: true
59
59
  });
60
60
  if (bindingLayout) {
61
- const entry = getBindGroupEntry(value, bindingLayout.location, { sampler: true });
61
+ const entry = getBindGroupEntry(value, bindingLayout.location, { sampler: true }, bindingName);
62
62
  if (entry) {
63
63
  entries.push(entry);
64
64
  }
@@ -67,7 +67,7 @@ function getBindGroupEntries(bindings, shaderLayout) {
67
67
  }
68
68
  return entries;
69
69
  }
70
- function getBindGroupEntry(binding, index, options) {
70
+ function getBindGroupEntry(binding, index, options, bindingName = 'unknown') {
71
71
  if (binding instanceof Buffer) {
72
72
  return {
73
73
  binding: index,
@@ -82,6 +82,12 @@ function getBindGroupEntry(binding, index, options) {
82
82
  resource: binding.handle
83
83
  };
84
84
  }
85
+ if (binding instanceof TextureView) {
86
+ return {
87
+ binding: index,
88
+ resource: binding.handle
89
+ };
90
+ }
85
91
  if (binding instanceof Texture) {
86
92
  if (options?.sampler) {
87
93
  return {
@@ -94,7 +100,7 @@ function getBindGroupEntry(binding, index, options) {
94
100
  resource: binding.view.handle
95
101
  };
96
102
  }
97
- log.warn(`invalid binding ${name}`, binding);
103
+ log.warn(`invalid binding ${bindingName}`, binding);
98
104
  return null;
99
105
  }
100
106
  //# sourceMappingURL=get-bind-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-bind-group.js","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-bind-group.js","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
1
  import { Buffer, type BufferProps, type BufferMapCallback } from '@luma.gl/core';
2
2
  import { type WebGPUDevice } from "../webgpu-device.js";
3
+ /**
4
+ * WebGPU implementation of Buffer
5
+ * For byte alignment requirements see:
6
+ * @see https://www.w3.org/TR/webgpu/#dom-gpubuffer-mapasync
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/GPUBuffer/mapAsync
8
+ */
3
9
  export declare class WebGPUBuffer extends Buffer {
4
10
  readonly device: WebGPUDevice;
5
11
  readonly handle: GPUBuffer;
6
12
  readonly byteLength: number;
13
+ readonly paddedByteLength: number;
7
14
  constructor(device: WebGPUDevice, props: BufferProps);
8
15
  destroy(): void;
9
16
  write(data: ArrayBufferLike | ArrayBufferView | SharedArrayBuffer, byteOffset?: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAM,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,KAAK,YAAY,EAAC,4BAAyB;AAEnD,qBAAa,YAAa,SAAQ,MAAM;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW;IAmD3C,OAAO,IAAI,IAAI;IAMxB,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,iBAAiB,EAAE,UAAU,SAAI;IAoB3E,gBAAgB,CACpB,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,EACjC,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAqC,GAChD,OAAO,CAAC,IAAI,CAAC;IA+BV,SAAS,CACb,UAAU,GAAE,MAAU,EACtB,UAAU,SAA+B,GACxC,OAAO,CAAC,UAAU,CAAC;IAQhB,eAAe,CAAC,CAAC,EACrB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,UAAU,SAAI,EACd,UAAU,SAA+B,GACxC,OAAO,CAAC,CAAC,CAAC;IAsCb,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;IAMhF;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAC1B,KAAK,EAAE,MAAM,EAAE,sCAAsC;IACrD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,YAAY;IAOf,SAAS,CAAC,WAAW,CACnB,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAwB;CAmBvC"}
1
+ {"version":3,"file":"webgpu-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAM,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,KAAK,YAAY,EAAC,4BAAyB;AAEnD;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,MAAM;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEtB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW;IAoD3C,OAAO,IAAI,IAAI;IAMxB,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,iBAAiB,EAAE,UAAU,SAAI;IAoB3E,gBAAgB,CACpB,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,EACjC,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAqC,GAChD,OAAO,CAAC,IAAI,CAAC;IAkCV,SAAS,CACb,UAAU,GAAE,MAAU,EACtB,UAAU,SAA+B,GACxC,OAAO,CAAC,UAAU,CAAC;IAQhB,eAAe,CAAC,CAAC,EACrB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,UAAU,SAAI,EACd,UAAU,SAA+B,GACxC,OAAO,CAAC,CAAC,CAAC;IA0Db,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;IAMhF;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAC1B,KAAK,EAAE,MAAM,EAAE,sCAAsC;IACrD,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,YAAY;IAOf,SAAS,CAAC,WAAW,CACnB,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAwB;CAmBvC"}
@@ -2,17 +2,25 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { log, Buffer } from '@luma.gl/core';
5
+ /**
6
+ * WebGPU implementation of Buffer
7
+ * For byte alignment requirements see:
8
+ * @see https://www.w3.org/TR/webgpu/#dom-gpubuffer-mapasync
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/GPUBuffer/mapAsync
10
+ */
5
11
  export class WebGPUBuffer extends Buffer {
6
12
  device;
7
13
  handle;
8
14
  byteLength;
15
+ paddedByteLength;
9
16
  constructor(device, props) {
10
17
  super(device, props);
11
18
  this.device = device;
12
19
  this.byteLength = props.byteLength || props.data?.byteLength || 0;
20
+ this.paddedByteLength = Math.ceil(this.byteLength / 4) * 4;
13
21
  const mappedAtCreation = Boolean(this.props.onMapped || props.data);
14
22
  // WebGPU buffers must be aligned to 4 bytes
15
- const size = Math.ceil(this.byteLength / 4) * 4;
23
+ const size = this.paddedByteLength;
16
24
  this.device.pushErrorScope('out-of-memory');
17
25
  this.device.pushErrorScope('validation');
18
26
  this.handle =
@@ -71,10 +79,11 @@ export class WebGPUBuffer extends Buffer {
71
79
  });
72
80
  }
73
81
  async mapAndWriteAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
82
+ const alignedByteLength = Math.ceil(byteLength / 4) * 4;
74
83
  // Unless the application created and supplied a mappable buffer, a staging buffer is needed
75
84
  const isMappable = (this.usage & Buffer.MAP_WRITE) !== 0;
76
85
  const mappableBuffer = !isMappable
77
- ? this._getMappableBuffer(Buffer.MAP_WRITE | Buffer.COPY_SRC, 0, this.byteLength)
86
+ ? this._getMappableBuffer(Buffer.MAP_WRITE | Buffer.COPY_SRC, 0, this.paddedByteLength)
78
87
  : null;
79
88
  const writeBuffer = mappableBuffer || this;
80
89
  // const isWritable = this.usage & Buffer.MAP_WRITE;
@@ -82,13 +91,15 @@ export class WebGPUBuffer extends Buffer {
82
91
  this.device.pushErrorScope('validation');
83
92
  try {
84
93
  await this.device.handle.queue.onSubmittedWorkDone();
85
- await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset, byteLength);
86
- const arrayBuffer = writeBuffer.handle.getMappedRange(byteOffset, byteLength);
94
+ await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset, alignedByteLength);
95
+ const mappedRange = writeBuffer.handle.getMappedRange(byteOffset, alignedByteLength);
96
+ const arrayBuffer = mappedRange.slice(0, byteLength);
87
97
  // eslint-disable-next-line @typescript-eslint/await-thenable
88
98
  await callback(arrayBuffer, 'mapped');
99
+ new Uint8Array(mappedRange).set(new Uint8Array(arrayBuffer), 0);
89
100
  writeBuffer.handle.unmap();
90
101
  if (mappableBuffer) {
91
- this._copyBuffer(mappableBuffer, byteOffset, byteLength);
102
+ this._copyBuffer(mappableBuffer, byteOffset, alignedByteLength);
92
103
  }
93
104
  }
94
105
  finally {
@@ -103,16 +114,29 @@ export class WebGPUBuffer extends Buffer {
103
114
  return this.mapAndReadAsync(arrayBuffer => new Uint8Array(arrayBuffer.slice(0)), byteOffset, byteLength);
104
115
  }
105
116
  async mapAndReadAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
117
+ const requestedEnd = byteOffset + byteLength;
118
+ if (requestedEnd > this.byteLength) {
119
+ throw new Error('Mapping range exceeds buffer size');
120
+ }
121
+ let mappedByteOffset = byteOffset;
122
+ let mappedByteLength = byteLength;
123
+ let sliceByteOffset = 0;
124
+ let lifetime = 'mapped';
125
+ // WebGPU mapAsync requires 8-byte offsets and 4-byte lengths.
106
126
  if (byteOffset % 8 !== 0 || byteLength % 4 !== 0) {
107
- throw new Error('byteOffset must be multiple of 8 and byteLength multiple of 4');
127
+ mappedByteOffset = Math.floor(byteOffset / 8) * 8;
128
+ const alignedEnd = Math.ceil(requestedEnd / 4) * 4;
129
+ mappedByteLength = alignedEnd - mappedByteOffset;
130
+ sliceByteOffset = byteOffset - mappedByteOffset;
131
+ lifetime = 'copied';
108
132
  }
109
- if (byteOffset + byteLength > this.handle.size) {
133
+ if (mappedByteOffset + mappedByteLength > this.paddedByteLength) {
110
134
  throw new Error('Mapping range exceeds buffer size');
111
135
  }
112
136
  // Unless the application created and supplied a mappable buffer, a staging buffer is needed
113
137
  const isMappable = (this.usage & Buffer.MAP_READ) !== 0;
114
138
  const mappableBuffer = !isMappable
115
- ? this._getMappableBuffer(Buffer.MAP_READ | Buffer.COPY_DST, 0, this.byteLength)
139
+ ? this._getMappableBuffer(Buffer.MAP_READ | Buffer.COPY_DST, 0, this.paddedByteLength)
116
140
  : null;
117
141
  const readBuffer = mappableBuffer || this;
118
142
  // Map the temp buffer and read the data.
@@ -120,12 +144,15 @@ export class WebGPUBuffer extends Buffer {
120
144
  try {
121
145
  await this.device.handle.queue.onSubmittedWorkDone();
122
146
  if (mappableBuffer) {
123
- mappableBuffer._copyBuffer(this);
147
+ mappableBuffer._copyBuffer(this, mappedByteOffset, mappedByteLength);
124
148
  }
125
- await readBuffer.handle.mapAsync(GPUMapMode.READ, byteOffset, byteLength);
126
- const arrayBuffer = readBuffer.handle.getMappedRange(byteOffset, byteLength);
149
+ await readBuffer.handle.mapAsync(GPUMapMode.READ, mappedByteOffset, mappedByteLength);
150
+ const arrayBuffer = readBuffer.handle.getMappedRange(mappedByteOffset, mappedByteLength);
151
+ const mappedRange = lifetime === 'mapped'
152
+ ? arrayBuffer
153
+ : arrayBuffer.slice(sliceByteOffset, sliceByteOffset + byteLength);
127
154
  // eslint-disable-next-line @typescript-eslint/await-thenable
128
- const result = await callback(arrayBuffer, 'mapped');
155
+ const result = await callback(mappedRange, lifetime);
129
156
  readBuffer.handle.unmap();
130
157
  return result;
131
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,GAAG,EAAE,MAAM,EAA2C,MAAM,eAAe,CAAC;AAGpF,MAAM,OAAO,YAAa,SAAQ,MAAM;IAC7B,MAAM,CAAe;IACrB,MAAM,CAAY;IAClB,UAAU,CAAS;IAE5B,YAAY,MAAoB,EAAE,KAAkB;QAClD,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC;QAClE,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,KAAK,CAAC,MAAM;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACpB,2BAA2B;oBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ;oBAC1E,gBAAgB;oBAChB,IAAI;iBACL,CAAC,CAAC;QACL,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACtF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACjD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;oBAC9B,mBAAmB;oBACnB,IAAI,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAEQ,OAAO;QACd,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,4BAA4B;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAA2D,EAAE,UAAU,GAAG,CAAC;QAC/E,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEzC,4EAA4E;QAC5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAClC,IAAI,CAAC,MAAM,EACX,UAAU,EACV,WAAW,EACX,cAAc,EACd,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,QAAiC,EACjC,aAAqB,CAAC,EACtB,aAAqB,IAAI,CAAC,UAAU,GAAG,UAAU;QAEjD,4FAA4F;QAC5F,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,cAAc,GAAwB,CAAC,UAAU;YACrD,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;YACjF,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,WAAW,GAAG,cAAc,IAAI,IAAI,CAAC;QAE3C,oDAAoD;QACpD,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACrD,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5E,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC9E,6DAA6D;YAC7D,MAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACtC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;gBAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC1F,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,cAAc,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACb,aAAqB,CAAC,EACtB,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU;QAEzC,OAAO,IAAI,CAAC,eAAe,CACzB,WAAW,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACnD,UAAU,EACV,UAAU,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,QAA8B,EAC9B,UAAU,GAAG,CAAC,EACd,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU;QAEzC,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,4FAA4F;QAC5F,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,cAAc,GAAwB,CAAC,UAAU;YACrD,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;YAChF,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,UAAU,GAAG,cAAc,IAAI,IAAI,CAAC;QAE1C,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACrD,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7E,6DAA6D;YAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACrD,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;gBAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,cAAc,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,aAAa,CAAC,UAAmB,EAAE,UAAmB;QACpD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,mBAAmB;IAEnB;;;OAGG;IACO,kBAAkB,CAC1B,KAAa,EAAE,sCAAsC;IACrD,UAAkB,EAClB,UAAkB;QAElB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,+CAA+C,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC;QAE1E,OAAO,cAAc,CAAC;IACxB,CAAC;IAES,WAAW,CACnB,YAA0B,EAC1B,aAAqB,CAAC,EACtB,aAAqB,IAAI,CAAC,UAAU;QAEpC,oEAAoE;QACpE,mFAAmF;QACnF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACjE,cAAc,CAAC,kBAAkB,CAC/B,YAAY,CAAC,MAAM,EACnB,UAAU,EACV,IAAI,CAAC,MAAM,EACX,UAAU,EACV,UAAU,CACX,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAe,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YAC5F,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"webgpu-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-pipeline-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-pipeline-layout.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,cAAc,EACd,mBAAmB,EAGpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,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;IAqBnD,OAAO,IAAI,IAAI;IAMxB,SAAS,CAAC,iCAAiC,IAAI,uBAAuB,EAAE;CAgFzE"}
1
+ {"version":3,"file":"webgpu-pipeline-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-pipeline-layout.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,cAAc,EACd,mBAAmB,EAGpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,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;IAqBnD,OAAO,IAAI,IAAI;IAMxB,SAAS,CAAC,iCAAiC,IAAI,uBAAuB,EAAE;CA+EzE"}
@@ -31,8 +31,7 @@ export class WebGPUPipelineLayout extends PipelineLayout {
31
31
  // Set up the pipeline layout
32
32
  // TODO (kaapp): This only supports the first group, but so does the rest of the code
33
33
  const bindGroupEntries = [];
34
- for (let i = 0; i < this.props.shaderLayout.bindings.length; i++) {
35
- const binding = this.props.shaderLayout.bindings[i];
34
+ for (const binding of this.props.shaderLayout.bindings) {
36
35
  const bindingTypeInfo = {};
37
36
  switch (binding.type) {
38
37
  case 'uniform': {
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-pipeline-layout.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-pipeline-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-pipeline-layout.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-pipeline-layout.ts"],"names":[],"mappings":"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"}
package/dist/dist.dev.js CHANGED
@@ -19,8 +19,8 @@ var __exports__ = (() => {
19
19
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
20
20
  };
21
21
  var __export = (target, all) => {
22
- for (var name2 in all)
23
- __defProp(target, name2, { get: all[name2], enumerable: true });
22
+ for (var name in all)
23
+ __defProp(target, name, { get: all[name], enumerable: true });
24
24
  };
25
25
  var __copyProps = (to, from, except, desc) => {
26
26
  if (from && typeof from === "object" || typeof from === "function") {
@@ -58,12 +58,14 @@ var __exports__ = (() => {
58
58
  device;
59
59
  handle;
60
60
  byteLength;
61
+ paddedByteLength;
61
62
  constructor(device, props) {
62
63
  super(device, props);
63
64
  this.device = device;
64
65
  this.byteLength = props.byteLength || props.data?.byteLength || 0;
66
+ this.paddedByteLength = Math.ceil(this.byteLength / 4) * 4;
65
67
  const mappedAtCreation = Boolean(this.props.onMapped || props.data);
66
- const size = Math.ceil(this.byteLength / 4) * 4;
68
+ const size = this.paddedByteLength;
67
69
  this.device.pushErrorScope("out-of-memory");
68
70
  this.device.pushErrorScope("validation");
69
71
  this.handle = this.props.handle || this.device.handle.createBuffer({
@@ -121,18 +123,21 @@ var __exports__ = (() => {
121
123
  });
122
124
  }
123
125
  async mapAndWriteAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
126
+ const alignedByteLength = Math.ceil(byteLength / 4) * 4;
124
127
  const isMappable = (this.usage & import_core.Buffer.MAP_WRITE) !== 0;
125
- const mappableBuffer = !isMappable ? this._getMappableBuffer(import_core.Buffer.MAP_WRITE | import_core.Buffer.COPY_SRC, 0, this.byteLength) : null;
128
+ const mappableBuffer = !isMappable ? this._getMappableBuffer(import_core.Buffer.MAP_WRITE | import_core.Buffer.COPY_SRC, 0, this.paddedByteLength) : null;
126
129
  const writeBuffer = mappableBuffer || this;
127
130
  this.device.pushErrorScope("validation");
128
131
  try {
129
132
  await this.device.handle.queue.onSubmittedWorkDone();
130
- await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset, byteLength);
131
- const arrayBuffer = writeBuffer.handle.getMappedRange(byteOffset, byteLength);
133
+ await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset, alignedByteLength);
134
+ const mappedRange = writeBuffer.handle.getMappedRange(byteOffset, alignedByteLength);
135
+ const arrayBuffer = mappedRange.slice(0, byteLength);
132
136
  await callback(arrayBuffer, "mapped");
137
+ new Uint8Array(mappedRange).set(new Uint8Array(arrayBuffer), 0);
133
138
  writeBuffer.handle.unmap();
134
139
  if (mappableBuffer) {
135
- this._copyBuffer(mappableBuffer, byteOffset, byteLength);
140
+ this._copyBuffer(mappableBuffer, byteOffset, alignedByteLength);
136
141
  }
137
142
  } finally {
138
143
  this.device.popErrorScope((error) => {
@@ -150,24 +155,37 @@ var __exports__ = (() => {
150
155
  );
151
156
  }
152
157
  async mapAndReadAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
158
+ const requestedEnd = byteOffset + byteLength;
159
+ if (requestedEnd > this.byteLength) {
160
+ throw new Error("Mapping range exceeds buffer size");
161
+ }
162
+ let mappedByteOffset = byteOffset;
163
+ let mappedByteLength = byteLength;
164
+ let sliceByteOffset = 0;
165
+ let lifetime = "mapped";
153
166
  if (byteOffset % 8 !== 0 || byteLength % 4 !== 0) {
154
- throw new Error("byteOffset must be multiple of 8 and byteLength multiple of 4");
167
+ mappedByteOffset = Math.floor(byteOffset / 8) * 8;
168
+ const alignedEnd = Math.ceil(requestedEnd / 4) * 4;
169
+ mappedByteLength = alignedEnd - mappedByteOffset;
170
+ sliceByteOffset = byteOffset - mappedByteOffset;
171
+ lifetime = "copied";
155
172
  }
156
- if (byteOffset + byteLength > this.handle.size) {
173
+ if (mappedByteOffset + mappedByteLength > this.paddedByteLength) {
157
174
  throw new Error("Mapping range exceeds buffer size");
158
175
  }
159
176
  const isMappable = (this.usage & import_core.Buffer.MAP_READ) !== 0;
160
- const mappableBuffer = !isMappable ? this._getMappableBuffer(import_core.Buffer.MAP_READ | import_core.Buffer.COPY_DST, 0, this.byteLength) : null;
177
+ const mappableBuffer = !isMappable ? this._getMappableBuffer(import_core.Buffer.MAP_READ | import_core.Buffer.COPY_DST, 0, this.paddedByteLength) : null;
161
178
  const readBuffer = mappableBuffer || this;
162
179
  this.device.pushErrorScope("validation");
163
180
  try {
164
181
  await this.device.handle.queue.onSubmittedWorkDone();
165
182
  if (mappableBuffer) {
166
- mappableBuffer._copyBuffer(this);
183
+ mappableBuffer._copyBuffer(this, mappedByteOffset, mappedByteLength);
167
184
  }
168
- await readBuffer.handle.mapAsync(GPUMapMode.READ, byteOffset, byteLength);
169
- const arrayBuffer = readBuffer.handle.getMappedRange(byteOffset, byteLength);
170
- const result = await callback(arrayBuffer, "mapped");
185
+ await readBuffer.handle.mapAsync(GPUMapMode.READ, mappedByteOffset, mappedByteLength);
186
+ const arrayBuffer = readBuffer.handle.getMappedRange(mappedByteOffset, mappedByteLength);
187
+ const mappedRange = lifetime === "mapped" ? arrayBuffer : arrayBuffer.slice(sliceByteOffset, sliceByteOffset + byteLength);
188
+ const result = await callback(mappedRange, lifetime);
171
189
  readBuffer.handle.unmap();
172
190
  return result;
173
191
  } finally {
@@ -906,7 +924,7 @@ var __exports__ = (() => {
906
924
  for (const [bindingName, value] of Object.entries(bindings)) {
907
925
  let bindingLayout = getShaderLayoutBinding(shaderLayout, bindingName);
908
926
  if (bindingLayout) {
909
- const entry = getBindGroupEntry(value, bindingLayout.location);
927
+ const entry = getBindGroupEntry(value, bindingLayout.location, void 0, bindingName);
910
928
  if (entry) {
911
929
  entries.push(entry);
912
930
  }
@@ -916,7 +934,12 @@ var __exports__ = (() => {
916
934
  ignoreWarnings: true
917
935
  });
918
936
  if (bindingLayout) {
919
- const entry = getBindGroupEntry(value, bindingLayout.location, { sampler: true });
937
+ const entry = getBindGroupEntry(
938
+ value,
939
+ bindingLayout.location,
940
+ { sampler: true },
941
+ bindingName
942
+ );
920
943
  if (entry) {
921
944
  entries.push(entry);
922
945
  }
@@ -925,7 +948,7 @@ var __exports__ = (() => {
925
948
  }
926
949
  return entries;
927
950
  }
928
- function getBindGroupEntry(binding, index, options) {
951
+ function getBindGroupEntry(binding, index, options, bindingName = "unknown") {
929
952
  if (binding instanceof import_core8.Buffer) {
930
953
  return {
931
954
  binding: index,
@@ -940,6 +963,12 @@ var __exports__ = (() => {
940
963
  resource: binding.handle
941
964
  };
942
965
  }
966
+ if (binding instanceof import_core8.TextureView) {
967
+ return {
968
+ binding: index,
969
+ resource: binding.handle
970
+ };
971
+ }
943
972
  if (binding instanceof import_core8.Texture) {
944
973
  if (options?.sampler) {
945
974
  return {
@@ -952,7 +981,7 @@ var __exports__ = (() => {
952
981
  resource: binding.view.handle
953
982
  };
954
983
  }
955
- import_core8.log.warn(`invalid binding ${name}`, binding);
984
+ import_core8.log.warn(`invalid binding ${bindingName}`, binding);
956
985
  return null;
957
986
  }
958
987
  var import_core8;
@@ -1034,17 +1063,17 @@ var __exports__ = (() => {
1034
1063
  });
1035
1064
  return vertexBufferLayouts;
1036
1065
  }
1037
- function findAttributeLayout(shaderLayout, name2, attributeNames) {
1038
- const attribute = shaderLayout.attributes.find((attribute_) => attribute_.name === name2);
1066
+ function findAttributeLayout(shaderLayout, name, attributeNames) {
1067
+ const attribute = shaderLayout.attributes.find((attribute_) => attribute_.name === name);
1039
1068
  if (!attribute) {
1040
- import_core9.log.warn(`Supplied attribute not present in shader layout: ${name2}`)();
1069
+ import_core9.log.warn(`Supplied attribute not present in shader layout: ${name}`)();
1041
1070
  return null;
1042
1071
  }
1043
1072
  if (attributeNames) {
1044
- if (attributeNames.has(name2)) {
1045
- throw new Error(`Found multiple entries for attribute: ${name2}`);
1073
+ if (attributeNames.has(name)) {
1074
+ throw new Error(`Found multiple entries for attribute: ${name}`);
1046
1075
  }
1047
- attributeNames.add(name2);
1076
+ attributeNames.add(name);
1048
1077
  }
1049
1078
  return attribute;
1050
1079
  }
@@ -1108,8 +1137,8 @@ var __exports__ = (() => {
1108
1137
  * @todo Do we want to expose BindGroups in the API and remove this?
1109
1138
  */
1110
1139
  setBindings(bindings) {
1111
- for (const [name2, binding] of Object.entries(bindings)) {
1112
- if (this._bindings[name2] !== binding) {
1140
+ for (const [name, binding] of Object.entries(bindings)) {
1141
+ if (this._bindings[name] !== binding) {
1113
1142
  this._bindGroup = null;
1114
1143
  }
1115
1144
  }
@@ -1971,8 +2000,7 @@ var __exports__ = (() => {
1971
2000
  }
1972
2001
  mapShaderLayoutToBindGroupEntries() {
1973
2002
  const bindGroupEntries = [];
1974
- for (let i2 = 0; i2 < this.props.shaderLayout.bindings.length; i2++) {
1975
- const binding = this.props.shaderLayout.bindings[i2];
2003
+ for (const binding of this.props.shaderLayout.bindings) {
1976
2004
  const bindingTypeInfo = {};
1977
2005
  switch (binding.type) {
1978
2006
  case "uniform": {