@luma.gl/webgpu 9.0.0-beta.3 → 9.0.0-beta.5

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.
Files changed (60) hide show
  1. package/dist/adapter/helpers/accessor-to-format.js +99 -1
  2. package/dist/adapter/helpers/convert-texture-format.js +5 -5
  3. package/dist/adapter/helpers/generate-mipmaps.js +76 -82
  4. package/dist/adapter/helpers/get-bind-group.js +54 -41
  5. package/dist/adapter/helpers/get-vertex-buffer-layout.js +110 -80
  6. package/dist/adapter/helpers/webgpu-parameters.js +182 -125
  7. package/dist/adapter/resources/webgpu-buffer.js +110 -62
  8. package/dist/adapter/resources/webgpu-command-encoder.js +73 -49
  9. package/dist/adapter/resources/webgpu-compute-pass.js +54 -41
  10. package/dist/adapter/resources/webgpu-compute-pipeline.js +24 -19
  11. package/dist/adapter/resources/webgpu-external-texture.js +29 -19
  12. package/dist/adapter/resources/webgpu-framebuffer.js +11 -7
  13. package/dist/adapter/resources/webgpu-query.js +42 -1
  14. package/dist/adapter/resources/webgpu-render-pass.js +115 -105
  15. package/dist/adapter/resources/webgpu-render-pipeline.js +148 -83
  16. package/dist/adapter/resources/webgpu-sampler.js +18 -15
  17. package/dist/adapter/resources/webgpu-shader.js +55 -45
  18. package/dist/adapter/resources/webgpu-texture.js +129 -109
  19. package/dist/adapter/resources/webgpu-vertex-array.d.ts +4 -1
  20. package/dist/adapter/resources/webgpu-vertex-array.d.ts.map +1 -1
  21. package/dist/adapter/resources/webgpu-vertex-array.js +64 -41
  22. package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
  23. package/dist/adapter/webgpu-canvas-context.js +100 -69
  24. package/dist/adapter/webgpu-device.d.ts.map +1 -1
  25. package/dist/adapter/webgpu-device.js +257 -230
  26. package/dist/adapter/webgpu-types.js +0 -2
  27. package/dist/dist.dev.js +661 -2178
  28. package/dist/glsl/glsllang.js +9 -6
  29. package/dist/index.cjs +58 -239
  30. package/dist/index.cjs.map +7 -0
  31. package/dist/index.js +9 -6
  32. package/dist.min.js +1 -22
  33. package/package.json +9 -7
  34. package/src/adapter/resources/webgpu-vertex-array.ts +5 -2
  35. package/src/adapter/webgpu-canvas-context.ts +1 -0
  36. package/src/adapter/webgpu-device.ts +16 -36
  37. package/dist/adapter/helpers/accessor-to-format.js.map +0 -1
  38. package/dist/adapter/helpers/convert-texture-format.js.map +0 -1
  39. package/dist/adapter/helpers/generate-mipmaps.js.map +0 -1
  40. package/dist/adapter/helpers/get-bind-group.js.map +0 -1
  41. package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +0 -1
  42. package/dist/adapter/helpers/webgpu-parameters.js.map +0 -1
  43. package/dist/adapter/resources/webgpu-buffer.js.map +0 -1
  44. package/dist/adapter/resources/webgpu-command-encoder.js.map +0 -1
  45. package/dist/adapter/resources/webgpu-compute-pass.js.map +0 -1
  46. package/dist/adapter/resources/webgpu-compute-pipeline.js.map +0 -1
  47. package/dist/adapter/resources/webgpu-external-texture.js.map +0 -1
  48. package/dist/adapter/resources/webgpu-framebuffer.js.map +0 -1
  49. package/dist/adapter/resources/webgpu-query.js.map +0 -1
  50. package/dist/adapter/resources/webgpu-render-pass.js.map +0 -1
  51. package/dist/adapter/resources/webgpu-render-pipeline.js.map +0 -1
  52. package/dist/adapter/resources/webgpu-sampler.js.map +0 -1
  53. package/dist/adapter/resources/webgpu-shader.js.map +0 -1
  54. package/dist/adapter/resources/webgpu-texture.js.map +0 -1
  55. package/dist/adapter/resources/webgpu-vertex-array.js.map +0 -1
  56. package/dist/adapter/webgpu-canvas-context.js.map +0 -1
  57. package/dist/adapter/webgpu-device.js.map +0 -1
  58. package/dist/adapter/webgpu-types.js.map +0 -1
  59. package/dist/glsl/glsllang.js.map +0 -1
  60. package/dist/index.js.map +0 -1
@@ -1,233 +1,260 @@
1
+ // prettier-ignore
2
+ // / <reference types="@webgpu/types" />
1
3
  import { Device, CanvasContext, log, uid } from '@luma.gl/core';
2
- import { WebGPUBuffer } from "./resources/webgpu-buffer.js";
3
- import { WebGPUTexture } from "./resources/webgpu-texture.js";
4
- import { WebGPUExternalTexture } from "./resources/webgpu-external-texture.js";
5
- import { WebGPUSampler } from "./resources/webgpu-sampler.js";
6
- import { WebGPUShader } from "./resources/webgpu-shader.js";
7
- import { WebGPURenderPipeline } from "./resources/webgpu-render-pipeline.js";
8
- import { WebGPUComputePipeline } from "./resources/webgpu-compute-pipeline.js";
9
- import { WebGPURenderPass } from "./resources/webgpu-render-pass.js";
10
- import { WebGPUComputePass } from "./resources/webgpu-compute-pass.js";
11
- import { WebGPUVertexArray } from "./resources/webgpu-vertex-array.js";
12
- import { WebGPUCanvasContext } from "./webgpu-canvas-context.js";
4
+ import { WebGPUBuffer } from './resources/webgpu-buffer';
5
+ import { WebGPUTexture } from './resources/webgpu-texture';
6
+ import { WebGPUExternalTexture } from './resources/webgpu-external-texture';
7
+ import { WebGPUSampler } from './resources/webgpu-sampler';
8
+ import { WebGPUShader } from './resources/webgpu-shader';
9
+ import { WebGPURenderPipeline } from './resources/webgpu-render-pipeline';
10
+ import { WebGPUComputePipeline } from './resources/webgpu-compute-pipeline';
11
+ import { WebGPURenderPass } from './resources/webgpu-render-pass';
12
+ import { WebGPUComputePass } from './resources/webgpu-compute-pass';
13
+ // import {WebGPUCommandEncoder} from './resources/webgpu-command-encoder';
14
+ import { WebGPUVertexArray } from './resources/webgpu-vertex-array';
15
+ import { WebGPUCanvasContext } from './webgpu-canvas-context';
16
+ // import {loadGlslangModule} from '../glsl/glslang';
17
+ /** WebGPU Device implementation */
13
18
  export class WebGPUDevice extends Device {
14
- static isSupported() {
15
- return Boolean(typeof navigator !== 'undefined' && navigator.gpu);
16
- }
17
- static async create(props) {
18
- if (!navigator.gpu) {
19
- throw new Error('WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu');
20
- }
21
- log.groupCollapsed(1, 'WebGPUDevice created')();
22
- const adapter = await navigator.gpu.requestAdapter({
23
- powerPreference: 'high-performance'
24
- });
25
- if (!adapter) {
26
- throw new Error('Failed to request WebGPU adapter');
27
- }
28
- const adapterInfo = await adapter.requestAdapterInfo();
29
- log.probe(2, 'Adapter available', adapterInfo)();
30
- const gpuDevice = await adapter.requestDevice({
31
- requiredFeatures: adapter.features
32
- });
33
- log.probe(1, 'GPUDevice available')();
34
- if (typeof props.canvas === 'string') {
35
- await CanvasContext.pageLoaded;
36
- log.probe(1, 'DOM is loaded')();
37
- }
38
- const device = new WebGPUDevice(gpuDevice, adapter, adapterInfo, props);
39
- log.probe(1, 'Device created. For more info, set chrome://flags/#enable-webgpu-developer-features')();
40
- log.table(1, device.info)();
41
- log.groupEnd(1)();
42
- return device;
43
- }
44
- constructor(device, adapter, adapterInfo, props) {
45
- super({
46
- ...props,
47
- id: props.id || uid('webgpu-device')
48
- });
49
- this.handle = void 0;
50
- this.adapter = void 0;
51
- this.lost = void 0;
52
- this.canvasContext = null;
53
- this.commandEncoder = null;
54
- this.renderPass = null;
55
- this._info = void 0;
56
- this._isLost = false;
57
- this.features = void 0;
58
- this.handle = device;
59
- this.adapter = adapter;
60
- const [driver, driverVersion] = (adapterInfo.driver || '').split(' Version ');
61
- const vendor = adapterInfo.vendor || this.adapter.__brand || 'unknown';
62
- const renderer = driver || '';
63
- const version = driverVersion || '';
64
- const gpu = vendor === 'apple' ? 'apple' : 'unknown';
65
- const gpuArchitecture = adapterInfo.architecture || 'unknown';
66
- const gpuBackend = adapterInfo.backend || 'unknown';
67
- const gpuType = (adapterInfo.type || '').split(' ')[0].toLowerCase() || 'unknown';
68
- this._info = {
69
- type: 'webgpu',
70
- vendor,
71
- renderer,
72
- version,
73
- gpu,
74
- gpuType,
75
- gpuBackend,
76
- gpuArchitecture,
77
- shadingLanguage: 'wgsl',
78
- shadingLanguageVersion: 100
79
- };
80
- this.lost = new Promise(async resolve => {
81
- const lostInfo = await this.handle.lost;
82
- this._isLost = true;
83
- resolve({
84
- reason: 'destroyed',
85
- message: lostInfo.message
86
- });
87
- });
88
- this.canvasContext = new WebGPUCanvasContext(this, this.adapter, {
89
- canvas: props.canvas,
90
- height: props.height,
91
- width: props.width,
92
- container: props.container
93
- });
94
- this.features = this._getFeatures();
95
- }
96
- destroy() {
97
- this.handle.destroy();
98
- }
99
- get info() {
100
- return this._info;
101
- }
102
- get limits() {
103
- return this.handle.limits;
104
- }
105
- isTextureFormatSupported(format) {
106
- return !format.includes('webgl');
107
- }
108
- isTextureFormatFilterable(format) {
109
- return this.isTextureFormatSupported(format);
110
- }
111
- isTextureFormatRenderable(format) {
112
- return this.isTextureFormatSupported(format);
113
- }
114
- get isLost() {
115
- return this._isLost;
116
- }
117
- createBuffer(props) {
118
- const newProps = this._getBufferProps(props);
119
- return new WebGPUBuffer(this, newProps);
120
- }
121
- _createTexture(props) {
122
- return new WebGPUTexture(this, props);
123
- }
124
- createExternalTexture(props) {
125
- return new WebGPUExternalTexture(this, props);
126
- }
127
- createShader(props) {
128
- return new WebGPUShader(this, props);
129
- }
130
- createSampler(props) {
131
- return new WebGPUSampler(this, props);
132
- }
133
- createRenderPipeline(props) {
134
- return new WebGPURenderPipeline(this, props);
135
- }
136
- createFramebuffer(props) {
137
- throw new Error('Not implemented');
138
- }
139
- createComputePipeline(props) {
140
- return new WebGPUComputePipeline(this, props);
141
- }
142
- createVertexArray(props) {
143
- return new WebGPUVertexArray(this, props);
144
- }
145
- beginRenderPass(props) {
146
- this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
147
- return new WebGPURenderPass(this, props);
148
- }
149
- beginComputePass(props) {
150
- this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
151
- return new WebGPUComputePass(this, props);
152
- }
153
- createTransformFeedback(props) {
154
- throw new Error('Transform feedback not supported in WebGPU');
155
- }
156
- createCanvasContext(props) {
157
- return new WebGPUCanvasContext(this, this.adapter, props);
158
- }
159
- getDefaultRenderPass() {
160
- throw new Error('a');
161
- }
162
- submit() {
163
- var _this$commandEncoder;
164
- const commandBuffer = (_this$commandEncoder = this.commandEncoder) === null || _this$commandEncoder === void 0 ? void 0 : _this$commandEncoder.finish();
165
- if (commandBuffer) {
166
- this.handle.queue.submit([commandBuffer]);
167
- }
168
- this.commandEncoder = null;
169
- }
170
- _getFeatures() {
171
- const features = new Set(this.handle.features);
172
- if (features.has('depth-clamping')) {
173
- features.delete('depth-clamping');
174
- features.add('depth-clip-control');
175
- }
176
- if (features.has('texture-compression-bc')) {
177
- features.add('texture-compression-bc5-webgl');
178
- }
179
- features.add('webgpu');
180
- features.add('timer-query-webgl');
181
- features.add('vertex-array-object-webgl1');
182
- features.add('instanced-rendering-webgl1');
183
- features.add('multiple-render-targets-webgl1');
184
- features.add('index-uint32-webgl1');
185
- features.add('blend-minmax-webgl1');
186
- features.add('texture-blend-float-webgl1');
187
- features.add('texture-formats-srgb-webgl1');
188
- features.add('texture-formats-depth-webgl1');
189
- features.add('texture-formats-float32-webgl1');
190
- features.add('texture-formats-float16-webgl1');
191
- features.add('texture-filter-linear-float32-webgl');
192
- features.add('texture-filter-linear-float16-webgl');
193
- features.add('texture-filter-anisotropic-webgl');
194
- features.add('texture-renderable-rgba32float-webgl');
195
- features.add('texture-renderable-float32-webgl');
196
- features.add('texture-renderable-float16-webgl');
197
- features.add('glsl-frag-data');
198
- features.add('glsl-frag-depth');
199
- features.add('glsl-derivatives');
200
- features.add('glsl-texture-lod');
201
- return features;
202
- }
203
- copyExternalImageToTexture(options) {
204
- var _this$handle;
205
- const {
206
- source,
207
- sourceX = 0,
208
- sourceY = 0,
209
- texture,
210
- mipLevel = 0,
211
- aspect = 'all',
212
- colorSpace = 'display-p3',
213
- premultipliedAlpha = false,
214
- width = texture.width,
215
- height = texture.height,
216
- depth = 1
217
- } = options;
218
- const webGpuTexture = texture;
219
- (_this$handle = this.handle) === null || _this$handle === void 0 ? void 0 : _this$handle.queue.copyExternalImageToTexture({
220
- source,
221
- origin: [sourceX, sourceY]
222
- }, {
223
- texture: webGpuTexture.handle,
224
- origin: [0, 0, 0],
225
- mipLevel,
226
- aspect,
227
- colorSpace,
228
- premultipliedAlpha
229
- }, [width, height, depth]);
230
- }
19
+ handle;
20
+ adapter;
21
+ lost;
22
+ canvasContext = null;
23
+ commandEncoder = null;
24
+ renderPass = null;
25
+ _info;
26
+ _isLost = false;
27
+ static type = 'webgpu';
28
+ /** Check if WebGPU is available */
29
+ static isSupported() {
30
+ return Boolean(typeof navigator !== 'undefined' && navigator.gpu);
31
+ }
32
+ static async create(props) {
33
+ if (!navigator.gpu) {
34
+ throw new Error('WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu');
35
+ }
36
+ log.groupCollapsed(1, 'WebGPUDevice created')();
37
+ const adapter = await navigator.gpu.requestAdapter({
38
+ powerPreference: 'high-performance'
39
+ // forceSoftware: false
40
+ });
41
+ if (!adapter) {
42
+ throw new Error('Failed to request WebGPU adapter');
43
+ }
44
+ const adapterInfo = await adapter.requestAdapterInfo();
45
+ log.probe(2, 'Adapter available', adapterInfo)();
46
+ const gpuDevice = await adapter.requestDevice({
47
+ requiredFeatures: adapter.features
48
+ // TODO ensure we obtain best limits
49
+ // requiredLimits: adapter.limits
50
+ });
51
+ log.probe(1, 'GPUDevice available')();
52
+ if (typeof props.canvas === 'string') {
53
+ await CanvasContext.pageLoaded;
54
+ log.probe(1, 'DOM is loaded')();
55
+ }
56
+ const device = new WebGPUDevice(gpuDevice, adapter, adapterInfo, props);
57
+ log.probe(1, 'Device created. For more info, set chrome://flags/#enable-webgpu-developer-features')();
58
+ log.table(1, device.info)();
59
+ log.groupEnd(1)();
60
+ return device;
61
+ }
62
+ constructor(device, adapter, adapterInfo, props) {
63
+ super({ ...props, id: props.id || uid('webgpu-device') });
64
+ this.handle = device;
65
+ this.adapter = adapter;
66
+ const [driver, driverVersion] = (adapterInfo.driver || '').split(' Version ');
67
+ // See https://developer.chrome.com/blog/new-in-webgpu-120#adapter_information_updates
68
+ const vendor = adapterInfo.vendor || this.adapter.__brand || 'unknown';
69
+ const renderer = driver || '';
70
+ const version = driverVersion || '';
71
+ const gpu = vendor === 'apple' ? 'apple' : 'unknown'; // 'nvidia' | 'amd' | 'intel' | 'apple' | 'unknown',
72
+ const gpuArchitecture = adapterInfo.architecture || 'unknown';
73
+ const gpuBackend = adapterInfo.backend || 'unknown';
74
+ const gpuType = (adapterInfo.type || '').split(' ')[0].toLowerCase() || 'unknown';
75
+ this._info = {
76
+ type: 'webgpu',
77
+ vendor,
78
+ renderer,
79
+ version,
80
+ gpu,
81
+ gpuType,
82
+ gpuBackend,
83
+ gpuArchitecture,
84
+ shadingLanguage: 'wgsl',
85
+ shadingLanguageVersion: 100
86
+ };
87
+ // "Context" loss handling
88
+ this.lost = new Promise(async (resolve) => {
89
+ const lostInfo = await this.handle.lost;
90
+ this._isLost = true;
91
+ resolve({ reason: 'destroyed', message: lostInfo.message });
92
+ });
93
+ // Note: WebGPU devices can be created without a canvas, for compute shader purposes
94
+ // if (props.canvas) {
95
+ this.canvasContext = new WebGPUCanvasContext(this, this.adapter, {
96
+ canvas: props.canvas,
97
+ height: props.height,
98
+ width: props.width,
99
+ container: props.container
100
+ });
101
+ // }
102
+ this.features = this._getFeatures();
103
+ }
104
+ // TODO
105
+ // Load the glslang module now so that it is available synchronously when compiling shaders
106
+ // const {glsl = true} = props;
107
+ // this.glslang = glsl && await loadGlslangModule();
108
+ destroy() {
109
+ this.handle.destroy();
110
+ }
111
+ get info() {
112
+ return this._info;
113
+ }
114
+ features;
115
+ get limits() {
116
+ return this.handle.limits;
117
+ }
118
+ isTextureFormatSupported(format) {
119
+ return !format.includes('webgl');
120
+ }
121
+ /** @todo implement proper check? */
122
+ isTextureFormatFilterable(format) {
123
+ return this.isTextureFormatSupported(format);
124
+ }
125
+ /** @todo implement proper check? */
126
+ isTextureFormatRenderable(format) {
127
+ return this.isTextureFormatSupported(format);
128
+ }
129
+ get isLost() {
130
+ return this._isLost;
131
+ }
132
+ createBuffer(props) {
133
+ const newProps = this._getBufferProps(props);
134
+ return new WebGPUBuffer(this, newProps);
135
+ }
136
+ _createTexture(props) {
137
+ return new WebGPUTexture(this, props);
138
+ }
139
+ createExternalTexture(props) {
140
+ return new WebGPUExternalTexture(this, props);
141
+ }
142
+ createShader(props) {
143
+ return new WebGPUShader(this, props);
144
+ }
145
+ createSampler(props) {
146
+ return new WebGPUSampler(this, props);
147
+ }
148
+ createRenderPipeline(props) {
149
+ return new WebGPURenderPipeline(this, props);
150
+ }
151
+ createFramebuffer(props) {
152
+ throw new Error('Not implemented');
153
+ }
154
+ createComputePipeline(props) {
155
+ return new WebGPUComputePipeline(this, props);
156
+ }
157
+ createVertexArray(props) {
158
+ return new WebGPUVertexArray(this, props);
159
+ }
160
+ // WebGPU specifics
161
+ /**
162
+ * Allows a render pass to begin against a canvas context
163
+ * @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
164
+ */
165
+ beginRenderPass(props) {
166
+ this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
167
+ return new WebGPURenderPass(this, props);
168
+ }
169
+ beginComputePass(props) {
170
+ this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
171
+ return new WebGPUComputePass(this, props);
172
+ }
173
+ // createCommandEncoder(props: CommandEncoderProps): WebGPUCommandEncoder {
174
+ // return new WebGPUCommandEncoder(this, props);
175
+ // }
176
+ createTransformFeedback(props) {
177
+ throw new Error('Transform feedback not supported in WebGPU');
178
+ }
179
+ createCanvasContext(props) {
180
+ return new WebGPUCanvasContext(this, this.adapter, props);
181
+ }
182
+ /**
183
+ * Gets default renderpass encoder.
184
+ * Creates a new encoder against default canvasContext if not already created
185
+ * @note Called internally by Model.
186
+ * @deprecated Create explicit pass with device.beginRenderPass
187
+ */
188
+ getDefaultRenderPass() {
189
+ // this.renderPass =
190
+ // this.renderPass ||
191
+ // this.beginRenderPass({
192
+ // framebuffer: this.canvasContext?.getCurrentFramebuffer()
193
+ // });
194
+ // return this.renderPass;
195
+ throw new Error('a');
196
+ }
197
+ submit() {
198
+ // this.renderPass?.end();
199
+ const commandBuffer = this.commandEncoder?.finish();
200
+ if (commandBuffer) {
201
+ this.handle.queue.submit([commandBuffer]);
202
+ }
203
+ this.commandEncoder = null;
204
+ // this.renderPass = null;
205
+ }
206
+ _getFeatures() {
207
+ // Initialize with actual WebGPU Features (note that unknown features may not be in DeviceFeature type)
208
+ const features = new Set(this.handle.features);
209
+ // Fixups for pre-standard names: https://github.com/webgpu-native/webgpu-headers/issues/133
210
+ // @ts-expect-error Chrome Canary v99
211
+ if (features.has('depth-clamping')) {
212
+ // @ts-expect-error Chrome Canary v99
213
+ features.delete('depth-clamping');
214
+ features.add('depth-clip-control');
215
+ }
216
+ // Some subsets of WebGPU extensions correspond to WebGL extensions
217
+ if (features.has('texture-compression-bc')) {
218
+ features.add('texture-compression-bc5-webgl');
219
+ }
220
+ const WEBGPU_ALWAYS_FEATURES = [
221
+ 'webgpu',
222
+ 'wgsl',
223
+ 'timer-query-webgl',
224
+ 'float32-filterable-linear-webgl',
225
+ 'float16-filterable-linear-webgl',
226
+ 'texture-filterable-anisotropic-webgl',
227
+ 'float32-renderable-webgl',
228
+ 'float16-renderable-webgl'
229
+ ];
230
+ for (const feature of WEBGPU_ALWAYS_FEATURES) {
231
+ features.add(feature);
232
+ }
233
+ return features;
234
+ }
235
+ copyExternalImageToTexture(options) {
236
+ const { source, sourceX = 0, sourceY = 0, texture, mipLevel = 0, aspect = 'all', colorSpace = 'display-p3', premultipliedAlpha = false,
237
+ // destinationX,
238
+ // destinationY,
239
+ // desitnationZ,
240
+ width = texture.width, height = texture.height, depth = 1 } = options;
241
+ const webGpuTexture = texture;
242
+ this.handle?.queue.copyExternalImageToTexture(
243
+ // source: GPUImageCopyExternalImage
244
+ {
245
+ source,
246
+ origin: [sourceX, sourceY]
247
+ },
248
+ // destination: GPUImageCopyTextureTagged
249
+ {
250
+ texture: webGpuTexture.handle,
251
+ origin: [0, 0, 0], // [x, y, z],
252
+ mipLevel,
253
+ aspect,
254
+ colorSpace,
255
+ premultipliedAlpha
256
+ },
257
+ // copySize: GPUExtent3D
258
+ [width, height, depth]);
259
+ }
231
260
  }
232
- WebGPUDevice.type = 'webgpu';
233
- //# sourceMappingURL=webgpu-device.js.map
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=webgpu-types.js.map