@luma.gl/webgpu 9.2.0-alpha.1 → 9.2.0-alpha.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/adapter/helpers/get-bind-group.d.ts.map +1 -1
- package/dist/adapter/helpers/get-bind-group.js +3 -2
- package/dist/adapter/helpers/get-bind-group.js.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.js +17 -6
- package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.js +27 -7
- package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.d.ts +13 -16
- package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.js +130 -103
- package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-buffer.d.ts +2 -2
- package/dist/adapter/resources/webgpu-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +8 -1
- package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +2 -2
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.d.ts +2 -2
- package/dist/adapter/resources/webgpu-external-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.d.ts +3 -2
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +1 -0
- package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-pipeline-layout.d.ts +10 -0
- package/dist/adapter/resources/webgpu-pipeline-layout.d.ts.map +1 -0
- package/dist/adapter/resources/webgpu-pipeline-layout.js +104 -0
- package/dist/adapter/resources/webgpu-pipeline-layout.js.map +1 -0
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +14 -7
- package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts +4 -4
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +12 -11
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-shader.js +7 -8
- package/dist/adapter/resources/webgpu-shader.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture-view.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture-view.js +3 -4
- package/dist/adapter/resources/webgpu-texture-view.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +19 -22
- package/dist/adapter/resources/webgpu-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-vertex-array.js.map +1 -1
- package/dist/adapter/webgpu-adapter.d.ts.map +1 -1
- package/dist/adapter/webgpu-adapter.js +40 -36
- package/dist/adapter/webgpu-adapter.js.map +1 -1
- package/dist/adapter/webgpu-canvas-context.d.ts +3 -3
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +1 -0
- package/dist/adapter/webgpu-canvas-context.js.map +1 -1
- package/dist/adapter/webgpu-device.d.ts +10 -4
- package/dist/adapter/webgpu-device.d.ts.map +1 -1
- package/dist/adapter/webgpu-device.js +30 -17
- package/dist/adapter/webgpu-device.js.map +1 -1
- package/dist/dist.dev.js +470 -232
- package/dist/dist.min.js +6 -5
- package/dist/index.cjs +449 -228
- package/dist/index.cjs.map +4 -4
- package/package.json +3 -3
- package/src/adapter/helpers/get-bind-group.ts +3 -2
- package/src/adapter/helpers/get-vertex-buffer-layout.ts +20 -7
- package/src/adapter/helpers/webgpu-parameters.ts +32 -8
- package/src/adapter/resources/webgpu-buffer.ts +161 -112
- package/src/adapter/resources/webgpu-command-buffer.ts +2 -2
- package/src/adapter/resources/webgpu-command-encoder.ts +8 -1
- package/src/adapter/resources/webgpu-compute-pipeline.ts +2 -2
- package/src/adapter/resources/webgpu-external-texture.ts +2 -2
- package/src/adapter/resources/webgpu-framebuffer.ts +3 -2
- package/src/adapter/resources/webgpu-pipeline-layout.ts +131 -0
- package/src/adapter/resources/webgpu-render-pass.ts +19 -9
- package/src/adapter/resources/webgpu-render-pipeline.ts +17 -15
- package/src/adapter/resources/webgpu-shader.ts +11 -8
- package/src/adapter/resources/webgpu-texture-view.ts +3 -4
- package/src/adapter/resources/webgpu-texture.ts +23 -25
- package/src/adapter/resources/webgpu-vertex-array.ts +1 -1
- package/src/adapter/webgpu-adapter.ts +51 -47
- package/src/adapter/webgpu-canvas-context.ts +5 -4
- package/src/adapter/webgpu-device.ts +39 -19
|
@@ -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,
|
|
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"}
|
|
@@ -25,13 +25,14 @@ export function getBindGroup(device, bindGroupLayout, shaderLayout, bindings) {
|
|
|
25
25
|
});
|
|
26
26
|
device.popErrorScope().then((error) => {
|
|
27
27
|
if (error) {
|
|
28
|
-
log.error(`
|
|
28
|
+
log.error(`bindGroup creation: ${error.message}`, bindGroup)();
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
31
|
return bindGroup;
|
|
32
32
|
}
|
|
33
33
|
export function getShaderLayoutBinding(shaderLayout, bindingName, options) {
|
|
34
|
-
const bindingLayout = shaderLayout.bindings.find(binding => binding.name === bindingName ||
|
|
34
|
+
const bindingLayout = shaderLayout.bindings.find(binding => binding.name === bindingName ||
|
|
35
|
+
`${binding.name.toLocaleLowerCase()}uniforms` === bindingName.toLocaleLowerCase());
|
|
35
36
|
if (!bindingLayout && !options?.ignoreWarnings) {
|
|
36
37
|
log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();
|
|
37
38
|
}
|
|
@@ -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;AAK5D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,MAA0B,EAC1B,QAAmB;IAEnB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACnC,wCAAwC;IACxC,YAAY;IACZ,2CAA2C;IAC3C,KAAK;AACP,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAiB,EACjB,eAAmC,EACnC,YAAiC,EACjC,QAAiC;IAEjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;QACvC,MAAM,EAAE,eAAe;QACvB,OAAO;KACR,CAAC,CAAC;IACH,MAAM,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,KAAsB,EAAE,EAAE;QACrD,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,KAAK,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-vertex-buffer-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAqC,MAAM,eAAe,CAAC;AAYlG;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"get-vertex-buffer-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAqC,MAAM,eAAe,CAAC;AAYlG;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,qBAAqB,EAAE,CA6FzB;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BxB"}
|
|
@@ -28,7 +28,7 @@ export function getVertexBufferLayout(shaderLayout, bufferLayout) {
|
|
|
28
28
|
let stepMode = 'vertex';
|
|
29
29
|
let byteStride = 0;
|
|
30
30
|
// @ts-ignore
|
|
31
|
-
|
|
31
|
+
let format = mapping.format;
|
|
32
32
|
// interleaved mapping {..., attributes: [{...}, ...]}
|
|
33
33
|
if (mapping.attributes) {
|
|
34
34
|
// const arrayStride = mapping.byteStride; TODO
|
|
@@ -37,11 +37,12 @@ export function getVertexBufferLayout(shaderLayout, bufferLayout) {
|
|
|
37
37
|
const attributeLayout = findAttributeLayout(shaderLayout, attributeName, usedAttributes);
|
|
38
38
|
// @ts-ignore
|
|
39
39
|
const location = attributeLayout?.location;
|
|
40
|
+
format = attributeMapping.format || mapping.format;
|
|
40
41
|
stepMode =
|
|
41
42
|
attributeLayout?.stepMode ||
|
|
42
43
|
(attributeLayout?.name.startsWith('instance') ? 'instance' : 'vertex');
|
|
43
44
|
vertexAttributes.push({
|
|
44
|
-
format: getWebGPUVertexFormat(
|
|
45
|
+
format: getWebGPUVertexFormat(format),
|
|
45
46
|
offset: attributeMapping.byteOffset,
|
|
46
47
|
shaderLocation: location
|
|
47
48
|
});
|
|
@@ -88,6 +89,14 @@ export function getVertexBufferLayout(shaderLayout, bufferLayout) {
|
|
|
88
89
|
});
|
|
89
90
|
}
|
|
90
91
|
}
|
|
92
|
+
// it's important that the VertexBufferLayout order matches the
|
|
93
|
+
// @location order of the attribute struct otherwise the buffers
|
|
94
|
+
// will not contain the data the shader expects them to.
|
|
95
|
+
vertexBufferLayouts.sort((a, b) => {
|
|
96
|
+
const minLocationA = Math.min(...Array.from(a.attributes, attr => attr.shaderLocation));
|
|
97
|
+
const minLocationB = Math.min(...Array.from(b.attributes, attr => attr.shaderLocation));
|
|
98
|
+
return minLocationA - minLocationB;
|
|
99
|
+
});
|
|
91
100
|
return vertexBufferLayouts;
|
|
92
101
|
}
|
|
93
102
|
export function getBufferSlots(shaderLayout, bufferLayout) {
|
|
@@ -119,7 +128,7 @@ export function getBufferSlots(shaderLayout, bufferLayout) {
|
|
|
119
128
|
/**
|
|
120
129
|
* Looks up an attribute in the ShaderLayout.
|
|
121
130
|
* @throws if name is not in ShaderLayout
|
|
122
|
-
* @throws if name has already been referenced
|
|
131
|
+
* @throws if name has already been referenced and attributeNames is provided
|
|
123
132
|
*/
|
|
124
133
|
function findAttributeLayout(shaderLayout, name, attributeNames) {
|
|
125
134
|
const attribute = shaderLayout.attributes.find(attribute_ => attribute_.name === name);
|
|
@@ -127,10 +136,12 @@ function findAttributeLayout(shaderLayout, name, attributeNames) {
|
|
|
127
136
|
log.warn(`Supplied attribute not present in shader layout: ${name}`)();
|
|
128
137
|
return null;
|
|
129
138
|
}
|
|
130
|
-
if (attributeNames
|
|
131
|
-
|
|
139
|
+
if (attributeNames) {
|
|
140
|
+
if (attributeNames.has(name)) {
|
|
141
|
+
throw new Error(`Found multiple entries for attribute: ${name}`);
|
|
142
|
+
}
|
|
143
|
+
attributeNames.add(name);
|
|
132
144
|
}
|
|
133
|
-
attributeNames.add(name);
|
|
134
145
|
return attribute;
|
|
135
146
|
}
|
|
136
147
|
//# sourceMappingURL=get-vertex-buffer-layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-vertex-buffer-layout.js","sourceRoot":"","sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,GAAG,EAAE,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACvD,8DAA8D;AAE9D,mDAAmD;AACnD,SAAS,qBAAqB,CAAC,MAAoB;IACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAyB,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAA0B,EAC1B,YAA4B;IAE5B,MAAM,mBAAmB,GAA4B,EAAE,CAAC;IACxD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,uDAAuD;IACvD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,yCAAyC;QACzC,MAAM,gBAAgB,GAAyB,EAAE,CAAC;QAElD,6DAA6D;QAC7D,IAAI,QAAQ,GAA0B,QAAQ,CAAC;QAC/C,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,aAAa;QACb,
|
|
1
|
+
{"version":3,"file":"get-vertex-buffer-layout.js","sourceRoot":"","sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"webgpu-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAM,MAAM,eAAe,CAAC;AA2B9C;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,UAAU,EAAE,QAAQ,CAgN9D,CAAC;AAwCF,wBAAgB,yCAAyC,CACvD,kBAAkB,EAAE,2BAA2B,EAC/C,UAAU,GAAE,UAAe,GAC1B,IAAI,CAIN"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// luma.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { log } from '@luma.gl/core';
|
|
4
5
|
function addDepthStencil(descriptor) {
|
|
5
6
|
descriptor.depthStencil = descriptor.depthStencil || {
|
|
6
7
|
// required, set something
|
|
@@ -27,7 +28,6 @@ function addDepthStencilBack(descriptor) {
|
|
|
27
28
|
* Supports for luma.gl's flat parameter space
|
|
28
29
|
* Populates the corresponding sub-objects in a GPURenderPipelineDescriptor
|
|
29
30
|
*/
|
|
30
|
-
// @ts-expect-error
|
|
31
31
|
export const PARAMETER_TABLE = {
|
|
32
32
|
// RASTERIZATION PARAMETERS
|
|
33
33
|
cullMode: (_, value, descriptor) => {
|
|
@@ -149,8 +149,23 @@ export const PARAMETER_TABLE = {
|
|
|
149
149
|
const blend = addBlendState(descriptor, 0);
|
|
150
150
|
blend.alpha = blend.alpha || {};
|
|
151
151
|
blend.alpha.dstFactor = value;
|
|
152
|
-
}
|
|
152
|
+
},
|
|
153
|
+
unclippedDepth: notSupported,
|
|
154
|
+
provokingVertex: notSupported,
|
|
155
|
+
polygonMode: notSupported,
|
|
156
|
+
polygonOffsetLine: notSupported,
|
|
157
|
+
clipDistance0: notSupported,
|
|
158
|
+
clipDistance1: notSupported,
|
|
159
|
+
clipDistance2: notSupported,
|
|
160
|
+
clipDistance3: notSupported,
|
|
161
|
+
clipDistance4: notSupported,
|
|
162
|
+
clipDistance5: notSupported,
|
|
163
|
+
clipDistance6: notSupported,
|
|
164
|
+
clipDistance7: notSupported
|
|
153
165
|
};
|
|
166
|
+
function notSupported(key, value, descriptor) {
|
|
167
|
+
log.warn(`${key} parameter not supported in WebGPU`)();
|
|
168
|
+
}
|
|
154
169
|
const DEFAULT_PIPELINE_DESCRIPTOR = {
|
|
155
170
|
// depthStencil: {
|
|
156
171
|
// stencilFront: {},
|
|
@@ -185,10 +200,12 @@ export function applyParametersToRenderPipelineDescriptor(pipelineDescriptor, pa
|
|
|
185
200
|
function setParameters(pipelineDescriptor, parameters) {
|
|
186
201
|
for (const [key, value] of Object.entries(parameters)) {
|
|
187
202
|
const setterFunction = PARAMETER_TABLE[key];
|
|
188
|
-
if (
|
|
189
|
-
|
|
203
|
+
if (setterFunction) {
|
|
204
|
+
setterFunction(key, value, pipelineDescriptor);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
log.error(`Illegal parameter ${key} in WebGPU`)();
|
|
190
208
|
}
|
|
191
|
-
setterFunction(key, value, pipelineDescriptor);
|
|
192
209
|
}
|
|
193
210
|
}
|
|
194
211
|
/** @todo - support multiple color targets... */
|
|
@@ -196,12 +213,15 @@ function addColorState(descriptor, attachment) {
|
|
|
196
213
|
// @ts-ignore
|
|
197
214
|
descriptor.fragment.targets = descriptor.fragment?.targets || [];
|
|
198
215
|
if (!Array.isArray(descriptor.fragment?.targets)) {
|
|
199
|
-
|
|
216
|
+
log.warn('parameters: no targets array')();
|
|
200
217
|
}
|
|
218
|
+
// @ts-expect-error GPU types as iterator
|
|
201
219
|
if (descriptor.fragment?.targets?.length === 0) {
|
|
220
|
+
// @ts-expect-error GPU types as iterator
|
|
202
221
|
descriptor.fragment.targets?.push({});
|
|
203
222
|
}
|
|
204
|
-
|
|
223
|
+
// @ts-expect-error GPU types as iterator
|
|
224
|
+
return descriptor.fragment?.targets?.[0];
|
|
205
225
|
}
|
|
206
226
|
function addBlendState(descriptor, attachment) {
|
|
207
227
|
const target = addColorState(descriptor, attachment);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-parameters.js","sourceRoot":"","sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;
|
|
1
|
+
{"version":3,"file":"webgpu-parameters.js","sourceRoot":"","sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import { Buffer, BufferProps } from '@luma.gl/core';
|
|
2
|
-
import type
|
|
1
|
+
import { Buffer, type BufferProps, type BufferMapCallback } from '@luma.gl/core';
|
|
2
|
+
import { type WebGPUDevice } from "../webgpu-device.js";
|
|
3
3
|
export declare class WebGPUBuffer extends Buffer {
|
|
4
4
|
readonly device: WebGPUDevice;
|
|
5
5
|
readonly handle: GPUBuffer;
|
|
6
6
|
readonly byteLength: number;
|
|
7
7
|
constructor(device: WebGPUDevice, props: BufferProps);
|
|
8
8
|
destroy(): void;
|
|
9
|
-
write(data: ArrayBufferView, byteOffset?: number): void;
|
|
9
|
+
write(data: ArrayBufferLike | ArrayBufferView | SharedArrayBuffer, byteOffset?: number): void;
|
|
10
|
+
mapAndWriteAsync(callback: BufferMapCallback<void>, byteOffset?: number, byteLength?: number): Promise<void>;
|
|
10
11
|
readAsync(byteOffset?: number, byteLength?: number): Promise<Uint8Array>;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
mapAndReadAsync<T>(callback: BufferMapCallback<T>, byteOffset?: number, byteLength?: number): Promise<T>;
|
|
13
|
+
readSyncWebGL(byteOffset?: number, byteLength?: number): Uint8Array<ArrayBuffer>;
|
|
14
|
+
/**
|
|
15
|
+
* @todo - A small set of mappable buffers could be cached on the device,
|
|
16
|
+
* however this goes against the goal of keeping core as a thin GPU API layer.
|
|
17
|
+
*/
|
|
18
|
+
protected _getMappableBuffer(usage: number, // Buffer.MAP_READ | Buffer.MAP_WRITE,
|
|
19
|
+
byteOffset: number, byteLength: number): WebGPUBuffer;
|
|
20
|
+
protected _copyBuffer(sourceBuffer: WebGPUBuffer, byteOffset?: number, byteLength?: number): void;
|
|
15
21
|
}
|
|
16
|
-
/** Maps the memory so that it can be read *
|
|
17
|
-
// abstract mapAsync(mode, byteOffset, byteLength): Promise<void>
|
|
18
|
-
|
|
19
|
-
/** Get the mapped range of data for reading or writing *
|
|
20
|
-
// abstract getMappedRange(byteOffset, byteLength): ArrayBuffer;
|
|
21
|
-
|
|
22
|
-
/** unmap makes the contents of the buffer available to the GPU again *
|
|
23
|
-
// abstract unmap(): void;
|
|
24
|
-
*/
|
|
25
22
|
//# sourceMappingURL=webgpu-buffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
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,10 +1,7 @@
|
|
|
1
1
|
// luma.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
-
import { Buffer } from '@luma.gl/core';
|
|
5
|
-
function getByteLength(props) {
|
|
6
|
-
return props.byteLength || props.data?.byteLength || 0;
|
|
7
|
-
}
|
|
4
|
+
import { log, Buffer } from '@luma.gl/core';
|
|
8
5
|
export class WebGPUBuffer extends Buffer {
|
|
9
6
|
device;
|
|
10
7
|
handle;
|
|
@@ -12,129 +9,159 @@ export class WebGPUBuffer extends Buffer {
|
|
|
12
9
|
constructor(device, props) {
|
|
13
10
|
super(device, props);
|
|
14
11
|
this.device = device;
|
|
15
|
-
this.byteLength =
|
|
16
|
-
const
|
|
12
|
+
this.byteLength = props.byteLength || props.data?.byteLength || 0;
|
|
13
|
+
const mappedAtCreation = Boolean(this.props.onMapped || props.data);
|
|
17
14
|
// WebGPU buffers must be aligned to 4 bytes
|
|
18
15
|
const size = Math.ceil(this.byteLength / 4) * 4;
|
|
19
|
-
this.device.
|
|
20
|
-
this.device.
|
|
16
|
+
this.device.pushErrorScope('out-of-memory');
|
|
17
|
+
this.device.pushErrorScope('validation');
|
|
21
18
|
this.handle =
|
|
22
19
|
this.props.handle ||
|
|
23
20
|
this.device.handle.createBuffer({
|
|
24
|
-
|
|
21
|
+
label: this.props.id,
|
|
25
22
|
// usage defaults to vertex
|
|
26
23
|
usage: this.props.usage || GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
27
|
-
mappedAtCreation
|
|
28
|
-
|
|
24
|
+
mappedAtCreation,
|
|
25
|
+
size
|
|
29
26
|
});
|
|
30
|
-
this.device.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
27
|
+
this.device.popErrorScope((error) => {
|
|
28
|
+
this.device.reportError(new Error(`${this} creation failed ${error.message}`), this)();
|
|
29
|
+
this.device.debug();
|
|
34
30
|
});
|
|
35
|
-
this.device.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
31
|
+
this.device.popErrorScope((error) => {
|
|
32
|
+
this.device.reportError(new Error(`${this} out of memory: ${error.message}`), this)();
|
|
33
|
+
this.device.debug();
|
|
39
34
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
this.device.pushErrorScope('validation');
|
|
36
|
+
if (props.data || props.onMapped) {
|
|
37
|
+
try {
|
|
38
|
+
const arrayBuffer = this.handle.getMappedRange();
|
|
39
|
+
if (props.data) {
|
|
40
|
+
const typedArray = props.data;
|
|
41
|
+
// @ts-expect-error
|
|
42
|
+
new typedArray.constructor(arrayBuffer).set(typedArray);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
props.onMapped?.(arrayBuffer, 'mapped');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
this.handle.unmap();
|
|
50
|
+
}
|
|
46
51
|
}
|
|
52
|
+
this.device.popErrorScope((error) => {
|
|
53
|
+
this.device.reportError(new Error(`${this} creation failed ${error.message}`), this)();
|
|
54
|
+
this.device.debug();
|
|
55
|
+
});
|
|
47
56
|
}
|
|
48
57
|
destroy() {
|
|
49
58
|
this.handle?.destroy();
|
|
50
59
|
// @ts-expect-error readonly
|
|
51
60
|
this.handle = null;
|
|
52
61
|
}
|
|
53
|
-
// WebGPU provides multiple ways to write a buffer...
|
|
54
62
|
write(data, byteOffset = 0) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
const arrayBuffer = ArrayBuffer.isView(data) ? data.buffer : data;
|
|
64
|
+
const dataByteOffset = ArrayBuffer.isView(data) ? data.byteOffset : 0;
|
|
65
|
+
this.device.pushErrorScope('validation');
|
|
66
|
+
// WebGPU provides multiple ways to write a buffer, this is the simplest API
|
|
67
|
+
this.device.handle.queue.writeBuffer(this.handle, byteOffset, arrayBuffer, dataByteOffset, data.byteLength);
|
|
68
|
+
this.device.popErrorScope((error) => {
|
|
69
|
+
this.device.reportError(new Error(`${this}.write() ${error.message}`), this)();
|
|
70
|
+
this.device.debug();
|
|
62
71
|
});
|
|
63
|
-
// Now do a GPU-side copy into the temp buffer we can actually read.
|
|
64
|
-
// TODO - we are spinning up an independent command queue here, what does this mean
|
|
65
|
-
const commandEncoder = this.device.handle.createCommandEncoder();
|
|
66
|
-
commandEncoder.copyBufferToBuffer(this.handle, byteOffset, tempBuffer.handle, 0, byteLength);
|
|
67
|
-
this.device.handle.queue.submit([commandEncoder.finish()]);
|
|
68
|
-
// Map the temp buffer and read the data.
|
|
69
|
-
await tempBuffer.handle.mapAsync(GPUMapMode.READ, byteOffset, byteLength);
|
|
70
|
-
const arrayBuffer = tempBuffer.handle.getMappedRange().slice(0);
|
|
71
|
-
tempBuffer.handle.unmap();
|
|
72
|
-
tempBuffer.destroy();
|
|
73
|
-
return new Uint8Array(arrayBuffer);
|
|
74
|
-
}
|
|
75
|
-
_writeMapped(typedArray) {
|
|
76
|
-
const arrayBuffer = this.handle.getMappedRange();
|
|
77
|
-
// @ts-expect-error
|
|
78
|
-
new typedArray.constructor(arrayBuffer).set(typedArray);
|
|
79
72
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
73
|
+
async mapAndWriteAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
|
|
74
|
+
// Unless the application created and supplied a mappable buffer, a staging buffer is needed
|
|
75
|
+
const isMappable = (this.usage & Buffer.MAP_WRITE) !== 0;
|
|
76
|
+
const mappableBuffer = !isMappable
|
|
77
|
+
? this._getMappableBuffer(Buffer.MAP_WRITE | Buffer.COPY_SRC, 0, this.byteLength)
|
|
78
|
+
: null;
|
|
79
|
+
const writeBuffer = mappableBuffer || this;
|
|
80
|
+
// const isWritable = this.usage & Buffer.MAP_WRITE;
|
|
81
|
+
// Map the temp buffer and read the data.
|
|
82
|
+
this.device.pushErrorScope('validation');
|
|
83
|
+
try {
|
|
84
|
+
await this.device.handle.queue.onSubmittedWorkDone();
|
|
85
|
+
await writeBuffer.handle.mapAsync(GPUMapMode.WRITE, byteOffset, byteLength);
|
|
86
|
+
const arrayBuffer = writeBuffer.handle.getMappedRange(byteOffset, byteLength);
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
88
|
+
await callback(arrayBuffer, 'mapped');
|
|
89
|
+
writeBuffer.handle.unmap();
|
|
90
|
+
if (mappableBuffer) {
|
|
91
|
+
this._copyBuffer(mappableBuffer, byteOffset, byteLength);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
this.device.popErrorScope((error) => {
|
|
96
|
+
this.device.reportError(new Error(`${this}.mapAndWriteAsync() ${error.message}`), this)();
|
|
97
|
+
this.device.debug();
|
|
98
|
+
});
|
|
99
|
+
mappableBuffer?.destroy();
|
|
100
|
+
}
|
|
86
101
|
}
|
|
87
|
-
|
|
88
|
-
this.
|
|
102
|
+
async readAsync(byteOffset = 0, byteLength = this.byteLength - byteOffset) {
|
|
103
|
+
return this.mapAndReadAsync(arrayBuffer => new Uint8Array(arrayBuffer.slice(0)), byteOffset, byteLength);
|
|
89
104
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
async mapAndReadAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
|
|
106
|
+
if (byteOffset % 8 !== 0 || byteLength % 4 !== 0) {
|
|
107
|
+
throw new Error('byteOffset must be multiple of 8 and byteLength multiple of 4');
|
|
108
|
+
}
|
|
109
|
+
if (byteOffset + byteLength > this.handle.size) {
|
|
110
|
+
throw new Error('Mapping range exceeds buffer size');
|
|
111
|
+
}
|
|
112
|
+
// Unless the application created and supplied a mappable buffer, a staging buffer is needed
|
|
113
|
+
const isMappable = (this.usage & Buffer.MAP_READ) !== 0;
|
|
114
|
+
const mappableBuffer = !isMappable
|
|
115
|
+
? this._getMappableBuffer(Buffer.MAP_READ | Buffer.COPY_DST, 0, this.byteLength)
|
|
116
|
+
: null;
|
|
117
|
+
const readBuffer = mappableBuffer || this;
|
|
118
|
+
// Map the temp buffer and read the data.
|
|
119
|
+
this.device.pushErrorScope('validation');
|
|
120
|
+
try {
|
|
121
|
+
await this.device.handle.queue.onSubmittedWorkDone();
|
|
122
|
+
if (mappableBuffer) {
|
|
123
|
+
mappableBuffer._copyBuffer(this);
|
|
124
|
+
}
|
|
125
|
+
await readBuffer.handle.mapAsync(GPUMapMode.READ, byteOffset, byteLength);
|
|
126
|
+
const arrayBuffer = readBuffer.handle.getMappedRange(byteOffset, byteLength);
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
128
|
+
const result = await callback(arrayBuffer, 'mapped');
|
|
129
|
+
readBuffer.handle.unmap();
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
this.device.popErrorScope((error) => {
|
|
134
|
+
this.device.reportError(new Error(`${this}.mapAndReadAsync() ${error.message}`), this)();
|
|
135
|
+
this.device.debug();
|
|
136
|
+
});
|
|
137
|
+
mappableBuffer?.destroy();
|
|
138
|
+
}
|
|
102
139
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
this.unmap();
|
|
140
|
+
readSyncWebGL(byteOffset, byteLength) {
|
|
141
|
+
throw new Error('Not implemented');
|
|
106
142
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
byteOffset
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}): Promise<void> {
|
|
118
|
-
if (options.map ?? true) {
|
|
119
|
-
await this.mapAsync(Buffer.MAP_WRITE, options.byteOffset, options.byteLength);
|
|
143
|
+
// INTERNAL METHODS
|
|
144
|
+
/**
|
|
145
|
+
* @todo - A small set of mappable buffers could be cached on the device,
|
|
146
|
+
* however this goes against the goal of keeping core as a thin GPU API layer.
|
|
147
|
+
*/
|
|
148
|
+
_getMappableBuffer(usage, // Buffer.MAP_READ | Buffer.MAP_WRITE,
|
|
149
|
+
byteOffset, byteLength) {
|
|
150
|
+
log.warn(`${this} is not readable, creating a temporary Buffer`);
|
|
151
|
+
const readableBuffer = new WebGPUBuffer(this.device, { usage, byteLength });
|
|
152
|
+
return readableBuffer;
|
|
120
153
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
154
|
+
_copyBuffer(sourceBuffer, byteOffset = 0, byteLength = this.byteLength) {
|
|
155
|
+
// Now do a GPU-side copy into the temp buffer we can actually read.
|
|
156
|
+
// TODO - we are spinning up an independent command queue here, what does this mean
|
|
157
|
+
this.device.pushErrorScope('validation');
|
|
158
|
+
const commandEncoder = this.device.handle.createCommandEncoder();
|
|
159
|
+
commandEncoder.copyBufferToBuffer(sourceBuffer.handle, byteOffset, this.handle, byteOffset, byteLength);
|
|
160
|
+
this.device.handle.queue.submit([commandEncoder.finish()]);
|
|
161
|
+
this.device.popErrorScope((error) => {
|
|
162
|
+
this.device.reportError(new Error(`${this}._getReadableBuffer() ${error.message}`), this)();
|
|
163
|
+
this.device.debug();
|
|
164
|
+
});
|
|
127
165
|
}
|
|
128
|
-
|
|
129
|
-
*/
|
|
130
|
-
// Mapped API (WebGPU)
|
|
131
|
-
/** Maps the memory so that it can be read *
|
|
132
|
-
// abstract mapAsync(mode, byteOffset, byteLength): Promise<void>
|
|
133
|
-
|
|
134
|
-
/** Get the mapped range of data for reading or writing *
|
|
135
|
-
// abstract getMappedRange(byteOffset, byteLength): ArrayBuffer;
|
|
136
|
-
|
|
137
|
-
/** unmap makes the contents of the buffer available to the GPU again *
|
|
138
|
-
// abstract unmap(): void;
|
|
139
|
-
*/
|
|
166
|
+
}
|
|
140
167
|
//# sourceMappingURL=webgpu-buffer.js.map
|
|
@@ -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,MAAM,
|
|
1
|
+
{"version":3,"file":"webgpu-buffer.js","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { CommandBuffer } from '@luma.gl/core';
|
|
|
3
3
|
import { WebGPUDevice } from "../webgpu-device.js";
|
|
4
4
|
import type { WebGPUCommandEncoder } from "./webgpu-command-encoder.js";
|
|
5
5
|
export declare class WebGPUCommandBuffer extends CommandBuffer {
|
|
6
|
-
device: WebGPUDevice;
|
|
7
|
-
handle: GPUCommandBuffer;
|
|
6
|
+
readonly device: WebGPUDevice;
|
|
7
|
+
readonly handle: GPUCommandBuffer;
|
|
8
8
|
constructor(commandEncoder: WebGPUCommandEncoder, props: CommandBufferProps);
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=webgpu-command-buffer.d.ts.map
|