@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.
- package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
- package/dist/adapter/helpers/get-bind-group.js +11 -5
- package/dist/adapter/helpers/get-bind-group.js.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.d.ts +7 -0
- package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.js +39 -12
- package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-pipeline-layout.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-pipeline-layout.js +1 -2
- package/dist/adapter/resources/webgpu-pipeline-layout.js.map +1 -1
- package/dist/dist.dev.js +56 -28
- package/dist/dist.min.js +6 -6
- package/dist/index.cjs +51 -28
- package/dist/index.cjs.map +3 -3
- package/package.json +3 -3
- package/src/adapter/helpers/get-bind-group.ts +18 -5
- package/src/adapter/resources/webgpu-buffer.ts +43 -12
- package/src/adapter/resources/webgpu-pipeline-layout.ts +1 -2
|
@@ -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;
|
|
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 ${
|
|
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":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAC,MAAM,eAAe,CAAC;
|
|
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;
|
|
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 =
|
|
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.
|
|
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,
|
|
86
|
-
const
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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.
|
|
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,
|
|
126
|
-
const arrayBuffer = readBuffer.handle.getMappedRange(
|
|
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(
|
|
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;
|
|
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;
|
|
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 (
|
|
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":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EACL,GAAG,EACH,cAAc,EAIf,MAAM,eAAe,CAAC;AAGvB,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAC7C,MAAM,CAAe;IACrB,MAAM,CAAoB;IAEnC,YAAY,MAAoB,EAAE,KAA0B;QAC1D,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,gBAAgB,GAAG,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAElE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC;YACpD,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,yBAAyB;YAC7C,gBAAgB,EAAE;gBAChB,yDAAyD;gBACzD,8DAA8D;gBAC9D,mCAAmC;gBACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACvC,KAAK,EAAE,mBAAmB;oBAC1B,OAAO,EAAE,gBAAgB;iBAC1B,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAEQ,OAAO;QACd,8CAA8C;QAC9C,mBAAmB;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAES,iCAAiC;QACzC,6BAA6B;QAC7B,qFAAqF;QACrF,MAAM,gBAAgB,GAA8B,EAAE,CAAC;QAEvD,KAAK,
|
|
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
|
|
23
|
-
__defProp(target,
|
|
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 =
|
|
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.
|
|
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,
|
|
131
|
-
const
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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.
|
|
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,
|
|
169
|
-
const arrayBuffer = readBuffer.handle.getMappedRange(
|
|
170
|
-
const
|
|
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(
|
|
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 ${
|
|
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,
|
|
1038
|
-
const attribute = shaderLayout.attributes.find((attribute_) => attribute_.name ===
|
|
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: ${
|
|
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(
|
|
1045
|
-
throw new Error(`Found multiple entries for attribute: ${
|
|
1073
|
+
if (attributeNames.has(name)) {
|
|
1074
|
+
throw new Error(`Found multiple entries for attribute: ${name}`);
|
|
1046
1075
|
}
|
|
1047
|
-
attributeNames.add(
|
|
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 [
|
|
1112
|
-
if (this._bindings[
|
|
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 (
|
|
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": {
|