@luma.gl/webgpu 9.0.0-alpha.5 → 9.0.0-alpha.50
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/LICENSE +3 -1
- package/dist/adapter/helpers/accessor-to-format.js.map +1 -1
- package/dist/adapter/helpers/convert-texture-format.d.ts +2 -2
- package/dist/adapter/helpers/convert-texture-format.d.ts.map +1 -1
- package/dist/adapter/helpers/convert-texture-format.js +0 -1
- package/dist/adapter/helpers/convert-texture-format.js.map +1 -1
- package/dist/adapter/helpers/generate-mipmaps.d.ts +1 -1
- package/dist/adapter/helpers/generate-mipmaps.js +20 -15
- package/dist/adapter/helpers/generate-mipmaps.js.map +1 -1
- package/dist/adapter/helpers/get-bind-group.d.ts +4 -4
- package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
- package/dist/adapter/helpers/get-bind-group.js +8 -17
- package/dist/adapter/helpers/get-bind-group.js.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts +5 -5
- package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.js +32 -40
- package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.d.ts +2 -2
- package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.js +51 -48
- package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.d.ts +5 -6
- package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.js +19 -33
- package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.d.ts +6 -15
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +11 -29
- package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts +6 -6
- package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.js +14 -27
- package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +4 -4
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js +6 -11
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.d.ts +5 -5
- package/dist/adapter/resources/webgpu-external-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.js +6 -14
- package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.d.ts +4 -21
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +4 -105
- package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-query.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts +12 -7
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +59 -36
- package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts +14 -10
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +50 -67
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.d.ts +5 -5
- package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.js +11 -11
- package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
- package/dist/adapter/resources/webgpu-shader.d.ts +7 -7
- package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-shader.js +11 -25
- package/dist/adapter/resources/webgpu-shader.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture.d.ts +15 -8
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +17 -27
- package/dist/adapter/resources/webgpu-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-vertex-array.d.ts +26 -0
- package/dist/adapter/resources/webgpu-vertex-array.d.ts.map +1 -0
- package/dist/adapter/resources/webgpu-vertex-array.js +39 -0
- package/dist/adapter/resources/webgpu-vertex-array.js.map +1 -0
- package/dist/adapter/webgpu-canvas-context.d.ts +16 -12
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +26 -47
- package/dist/adapter/webgpu-canvas-context.js.map +1 -1
- package/dist/adapter/webgpu-device.d.ts +39 -22
- package/dist/adapter/webgpu-device.d.ts.map +1 -1
- package/dist/adapter/webgpu-device.js +94 -95
- package/dist/adapter/webgpu-device.js.map +1 -1
- package/dist/adapter/webgpu-types.js.map +1 -1
- package/dist/dist.dev.js +2988 -0
- package/dist/glsl/glsllang.js +0 -1
- package/dist/glsl/glsllang.js.map +1 -1
- package/dist/index.cjs +1518 -0
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/dist.min.js +20 -0
- package/package.json +18 -9
- package/src/adapter/helpers/accessor-to-format.ts +1 -2
- package/src/adapter/helpers/convert-texture-format.ts +1 -1
- package/src/adapter/helpers/generate-mipmaps.ts +2 -2
- package/src/adapter/helpers/get-bind-group.ts +22 -12
- package/src/adapter/helpers/get-vertex-buffer-layout.ts +55 -34
- package/src/adapter/helpers/webgpu-parameters.ts +56 -47
- package/src/adapter/resources/webgpu-buffer.ts +11 -12
- package/src/adapter/resources/webgpu-command-encoder.ts +62 -41
- package/src/adapter/resources/webgpu-compute-pass.ts +13 -13
- package/src/adapter/resources/webgpu-compute-pipeline.ts +6 -5
- package/src/adapter/resources/webgpu-external-texture.ts +5 -5
- package/src/adapter/resources/webgpu-framebuffer.ts +8 -109
- package/src/adapter/resources/webgpu-query.ts +3 -3
- package/src/adapter/resources/webgpu-render-pass.ts +74 -18
- package/src/adapter/resources/webgpu-render-pipeline.ts +64 -39
- package/src/adapter/resources/webgpu-sampler.ts +12 -5
- package/src/adapter/resources/webgpu-shader.ts +13 -10
- package/src/adapter/resources/webgpu-texture.ts +22 -8
- package/src/adapter/resources/webgpu-vertex-array.ts +74 -0
- package/src/adapter/webgpu-canvas-context.ts +52 -27
- package/src/adapter/webgpu-device.ts +158 -64
- package/src/index.ts +7 -9
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/init.d.ts +0 -2
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -4
- package/dist/init.js.map +0 -1
- package/src/bundle.ts +0 -4
- package/src/init.ts +0 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// prettier-ignore
|
|
2
|
+
// / <reference types="@webgpu/types" />
|
|
2
3
|
|
|
3
4
|
import type {
|
|
4
5
|
DeviceProps,
|
|
@@ -9,6 +10,7 @@ import type {
|
|
|
9
10
|
BufferProps,
|
|
10
11
|
SamplerProps,
|
|
11
12
|
ShaderProps,
|
|
13
|
+
Texture,
|
|
12
14
|
TextureProps,
|
|
13
15
|
TextureFormat,
|
|
14
16
|
ExternalTextureProps,
|
|
@@ -16,32 +18,38 @@ import type {
|
|
|
16
18
|
RenderPipelineProps,
|
|
17
19
|
ComputePipelineProps,
|
|
18
20
|
RenderPassProps,
|
|
19
|
-
ComputePassProps
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
import
|
|
28
|
-
import
|
|
29
|
-
import
|
|
30
|
-
import
|
|
31
|
-
import
|
|
32
|
-
|
|
33
|
-
import
|
|
21
|
+
ComputePassProps,
|
|
22
|
+
// CommandEncoderProps,
|
|
23
|
+
VertexArrayProps,
|
|
24
|
+
TransformFeedback,
|
|
25
|
+
TransformFeedbackProps
|
|
26
|
+
} from '@luma.gl/core';
|
|
27
|
+
import {Device, CanvasContext, log, uid} from '@luma.gl/core';
|
|
28
|
+
import {WebGPUBuffer} from './resources/webgpu-buffer';
|
|
29
|
+
import {WebGPUTexture} from './resources/webgpu-texture';
|
|
30
|
+
import {WebGPUExternalTexture} from './resources/webgpu-external-texture';
|
|
31
|
+
import {WebGPUSampler} from './resources/webgpu-sampler';
|
|
32
|
+
import {WebGPUShader} from './resources/webgpu-shader';
|
|
33
|
+
import {WebGPURenderPipeline} from './resources/webgpu-render-pipeline';
|
|
34
|
+
import {WebGPUFramebuffer} from './resources/webgpu-framebuffer';
|
|
35
|
+
import {WebGPUComputePipeline} from './resources/webgpu-compute-pipeline';
|
|
36
|
+
import {WebGPURenderPass} from './resources/webgpu-render-pass';
|
|
37
|
+
import {WebGPUComputePass} from './resources/webgpu-compute-pass';
|
|
38
|
+
// import {WebGPUCommandEncoder} from './resources/webgpu-command-encoder';
|
|
39
|
+
import {WebGPUVertexArray} from './resources/webgpu-vertex-array';
|
|
40
|
+
|
|
41
|
+
import {WebGPUCanvasContext} from './webgpu-canvas-context';
|
|
34
42
|
// import {loadGlslangModule} from '../glsl/glslang';
|
|
35
43
|
|
|
36
44
|
/** WebGPU Device implementation */
|
|
37
|
-
export
|
|
45
|
+
export class WebGPUDevice extends Device {
|
|
38
46
|
readonly handle: GPUDevice;
|
|
39
47
|
readonly adapter: GPUAdapter;
|
|
40
|
-
readonly lost: Promise<{reason: 'destroyed'
|
|
41
|
-
canvasContext: WebGPUCanvasContext |
|
|
48
|
+
readonly lost: Promise<{reason: 'destroyed'; message: string}>;
|
|
49
|
+
canvasContext: WebGPUCanvasContext | null = null;
|
|
42
50
|
|
|
43
|
-
commandEncoder: GPUCommandEncoder;
|
|
44
|
-
renderPass: WebGPURenderPass;
|
|
51
|
+
commandEncoder: GPUCommandEncoder | null = null;
|
|
52
|
+
renderPass: WebGPURenderPass | null = null;
|
|
45
53
|
|
|
46
54
|
private _info: DeviceInfo;
|
|
47
55
|
private _isLost: boolean = false;
|
|
@@ -55,63 +63,74 @@ export default class WebGPUDevice extends Device {
|
|
|
55
63
|
|
|
56
64
|
static async create(props: DeviceProps): Promise<WebGPUDevice> {
|
|
57
65
|
if (!navigator.gpu) {
|
|
58
|
-
throw new Error(
|
|
66
|
+
throw new Error(
|
|
67
|
+
'WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu'
|
|
68
|
+
);
|
|
59
69
|
}
|
|
60
70
|
log.groupCollapsed(1, 'WebGPUDevice created')();
|
|
61
71
|
const adapter = await navigator.gpu.requestAdapter({
|
|
62
|
-
powerPreference:
|
|
72
|
+
powerPreference: 'high-performance'
|
|
63
73
|
// forceSoftware: false
|
|
64
74
|
});
|
|
65
|
-
|
|
75
|
+
if (!adapter) {
|
|
76
|
+
throw new Error('Failed to request WebGPU adapter');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const adapterInfo = await adapter.requestAdapterInfo();
|
|
80
|
+
log.probe(1, 'Adapter available', adapterInfo)();
|
|
66
81
|
|
|
67
82
|
const gpuDevice = await adapter.requestDevice({
|
|
68
|
-
requiredFeatures: adapter.features as ReadonlySet<GPUFeatureName
|
|
83
|
+
requiredFeatures: adapter.features as ReadonlySet<GPUFeatureName>
|
|
69
84
|
// TODO ensure we obtain best limits
|
|
70
85
|
// requiredLimits: adapter.limits
|
|
71
86
|
});
|
|
72
|
-
log.probe(1,
|
|
87
|
+
log.probe(1, 'GPUDevice available')();
|
|
73
88
|
|
|
74
89
|
if (typeof props.canvas === 'string') {
|
|
75
90
|
await CanvasContext.pageLoaded;
|
|
76
|
-
log.probe(1,
|
|
91
|
+
log.probe(1, 'DOM is loaded')();
|
|
77
92
|
}
|
|
78
93
|
|
|
79
94
|
const device = new WebGPUDevice(gpuDevice, adapter, props);
|
|
80
|
-
log.probe(1,
|
|
95
|
+
log.probe(1, 'Device created', device.info)();
|
|
81
96
|
log.table(1, device.info)();
|
|
82
97
|
log.groupEnd(1)();
|
|
83
98
|
return device;
|
|
84
99
|
}
|
|
85
100
|
|
|
86
101
|
constructor(device: GPUDevice, adapter: GPUAdapter, props: DeviceProps) {
|
|
87
|
-
super(props);
|
|
102
|
+
super({...props, id: props.id || uid('webgpu-device')});
|
|
88
103
|
this.handle = device;
|
|
89
104
|
this.adapter = adapter;
|
|
90
105
|
|
|
91
106
|
this._info = {
|
|
92
107
|
type: 'webgpu',
|
|
93
|
-
vendor: this.adapter.
|
|
108
|
+
vendor: this.adapter.__brand,
|
|
94
109
|
renderer: '',
|
|
95
110
|
version: '',
|
|
96
111
|
gpu: 'unknown', // 'nvidia' | 'amd' | 'intel' | 'apple' | 'unknown',
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
glsl: '450',
|
|
100
|
-
wgsl: '100'
|
|
101
|
-
},
|
|
112
|
+
shadingLanguage: 'wgsl',
|
|
113
|
+
shadingLanguageVersion: 100,
|
|
102
114
|
vendorMasked: '',
|
|
103
115
|
rendererMasked: ''
|
|
104
116
|
};
|
|
105
117
|
|
|
106
|
-
|
|
107
|
-
this.lost
|
|
118
|
+
// "Context" loss handling
|
|
119
|
+
this.lost = new Promise<{reason: 'destroyed'; message: string}>(async resolve => {
|
|
120
|
+
const lostInfo = await this.handle.lost;
|
|
108
121
|
this._isLost = true;
|
|
122
|
+
resolve({reason: 'destroyed', message: lostInfo.message});
|
|
109
123
|
});
|
|
110
124
|
|
|
111
125
|
// Note: WebGPU devices can be created without a canvas, for compute shader purposes
|
|
112
|
-
if (props.canvas) {
|
|
113
|
-
|
|
114
|
-
|
|
126
|
+
// if (props.canvas) {
|
|
127
|
+
this.canvasContext = new WebGPUCanvasContext(this, this.adapter, {
|
|
128
|
+
canvas: props.canvas,
|
|
129
|
+
height: props.height,
|
|
130
|
+
width: props.width,
|
|
131
|
+
container: props.container
|
|
132
|
+
});
|
|
133
|
+
// }
|
|
115
134
|
|
|
116
135
|
this.features = this._getFeatures();
|
|
117
136
|
}
|
|
@@ -121,7 +140,7 @@ export default class WebGPUDevice extends Device {
|
|
|
121
140
|
// const {glsl = true} = props;
|
|
122
141
|
// this.glslang = glsl && await loadGlslangModule();
|
|
123
142
|
|
|
124
|
-
destroy() {
|
|
143
|
+
destroy(): void {
|
|
125
144
|
this.handle.destroy();
|
|
126
145
|
}
|
|
127
146
|
|
|
@@ -141,20 +160,21 @@ export default class WebGPUDevice extends Device {
|
|
|
141
160
|
|
|
142
161
|
/** @todo implement proper check? */
|
|
143
162
|
isTextureFormatFilterable(format: TextureFormat): boolean {
|
|
144
|
-
return this.isTextureFormatSupported(format);
|
|
163
|
+
return this.isTextureFormatSupported(format);
|
|
145
164
|
}
|
|
146
165
|
|
|
147
166
|
/** @todo implement proper check? */
|
|
148
167
|
isTextureFormatRenderable(format: TextureFormat): boolean {
|
|
149
|
-
return this.isTextureFormatSupported(format);
|
|
168
|
+
return this.isTextureFormatSupported(format);
|
|
150
169
|
}
|
|
151
170
|
|
|
152
171
|
get isLost(): boolean {
|
|
153
172
|
return this._isLost;
|
|
154
173
|
}
|
|
155
174
|
|
|
156
|
-
|
|
157
|
-
|
|
175
|
+
createBuffer(props: BufferProps | ArrayBuffer | ArrayBufferView): WebGPUBuffer {
|
|
176
|
+
const newProps = this._getBufferProps(props);
|
|
177
|
+
return new WebGPUBuffer(this, newProps);
|
|
158
178
|
}
|
|
159
179
|
|
|
160
180
|
_createTexture(props: TextureProps): WebGPUTexture {
|
|
@@ -185,44 +205,62 @@ export default class WebGPUDevice extends Device {
|
|
|
185
205
|
return new WebGPUComputePipeline(this, props);
|
|
186
206
|
}
|
|
187
207
|
|
|
208
|
+
createVertexArray(props: VertexArrayProps): WebGPUVertexArray {
|
|
209
|
+
return new WebGPUVertexArray(this, props);
|
|
210
|
+
}
|
|
211
|
+
|
|
188
212
|
// WebGPU specifics
|
|
189
213
|
|
|
190
|
-
/**
|
|
214
|
+
/**
|
|
191
215
|
* Allows a render pass to begin against a canvas context
|
|
192
216
|
* @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
|
|
193
217
|
*/
|
|
194
|
-
beginRenderPass(props
|
|
218
|
+
beginRenderPass(props: RenderPassProps): WebGPURenderPass {
|
|
195
219
|
this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
|
|
196
220
|
return new WebGPURenderPass(this, props);
|
|
197
221
|
}
|
|
198
222
|
|
|
199
|
-
beginComputePass(props
|
|
223
|
+
beginComputePass(props: ComputePassProps): WebGPUComputePass {
|
|
200
224
|
this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
|
|
201
225
|
return new WebGPUComputePass(this, props);
|
|
202
226
|
}
|
|
203
227
|
|
|
204
|
-
|
|
228
|
+
// createCommandEncoder(props: CommandEncoderProps): WebGPUCommandEncoder {
|
|
229
|
+
// return new WebGPUCommandEncoder(this, props);
|
|
230
|
+
// }
|
|
231
|
+
|
|
232
|
+
createTransformFeedback(props: TransformFeedbackProps): TransformFeedback {
|
|
233
|
+
throw new Error('Transform feedback not supported in WebGPU');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
createCanvasContext(props: CanvasContextProps): WebGPUCanvasContext {
|
|
205
237
|
return new WebGPUCanvasContext(this, this.adapter, props);
|
|
206
238
|
}
|
|
207
239
|
|
|
208
|
-
/**
|
|
240
|
+
/**
|
|
209
241
|
* Gets default renderpass encoder.
|
|
210
|
-
* Creates a new encoder against default canvasContext if not already created
|
|
242
|
+
* Creates a new encoder against default canvasContext if not already created
|
|
211
243
|
* @note Called internally by Model.
|
|
244
|
+
* @deprecated Create explicit pass with device.beginRenderPass
|
|
212
245
|
*/
|
|
213
246
|
getDefaultRenderPass(): WebGPURenderPass {
|
|
214
|
-
this.renderPass =
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
247
|
+
// this.renderPass =
|
|
248
|
+
// this.renderPass ||
|
|
249
|
+
// this.beginRenderPass({
|
|
250
|
+
// framebuffer: this.canvasContext?.getCurrentFramebuffer()
|
|
251
|
+
// });
|
|
252
|
+
// return this.renderPass;
|
|
253
|
+
throw new Error('a');
|
|
218
254
|
}
|
|
219
255
|
|
|
220
256
|
submit(): void {
|
|
221
|
-
this.renderPass
|
|
222
|
-
const commandBuffer = this.commandEncoder
|
|
223
|
-
|
|
257
|
+
// this.renderPass?.end();
|
|
258
|
+
const commandBuffer = this.commandEncoder?.finish();
|
|
259
|
+
if (commandBuffer) {
|
|
260
|
+
this.handle.queue.submit([commandBuffer]);
|
|
261
|
+
}
|
|
224
262
|
this.commandEncoder = null;
|
|
225
|
-
this.renderPass = null;
|
|
263
|
+
// this.renderPass = null;
|
|
226
264
|
}
|
|
227
265
|
|
|
228
266
|
_getFeatures() {
|
|
@@ -253,24 +291,24 @@ export default class WebGPUDevice extends Device {
|
|
|
253
291
|
features.add('index-uint32-webgl1');
|
|
254
292
|
features.add('blend-minmax-webgl1');
|
|
255
293
|
features.add('texture-blend-float-webgl1');
|
|
256
|
-
|
|
294
|
+
|
|
257
295
|
// TEXTURES, RENDERBUFFERS
|
|
258
296
|
features.add('texture-formats-srgb-webgl1');
|
|
259
|
-
|
|
297
|
+
|
|
260
298
|
// TEXTURES
|
|
261
299
|
features.add('texture-formats-depth-webgl1');
|
|
262
300
|
features.add('texture-formats-float32-webgl1');
|
|
263
301
|
features.add('texture-formats-float16-webgl1');
|
|
264
|
-
|
|
302
|
+
|
|
265
303
|
features.add('texture-filter-linear-float32-webgl');
|
|
266
304
|
features.add('texture-filter-linear-float16-webgl');
|
|
267
305
|
features.add('texture-filter-anisotropic-webgl');
|
|
268
|
-
|
|
306
|
+
|
|
269
307
|
// FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS
|
|
270
308
|
features.add('texture-renderable-rgba32float-webgl');
|
|
271
309
|
features.add('texture-renderable-float32-webgl');
|
|
272
310
|
features.add('texture-renderable-float16-webgl');
|
|
273
|
-
|
|
311
|
+
|
|
274
312
|
// GLSL extensions
|
|
275
313
|
features.add('glsl-frag-data');
|
|
276
314
|
features.add('glsl-frag-depth');
|
|
@@ -279,4 +317,60 @@ export default class WebGPUDevice extends Device {
|
|
|
279
317
|
|
|
280
318
|
return features;
|
|
281
319
|
}
|
|
320
|
+
|
|
321
|
+
copyExternalImageToTexture(options: {
|
|
322
|
+
texture: Texture;
|
|
323
|
+
mipLevel?: number;
|
|
324
|
+
aspect?: 'all' | 'stencil-only' | 'depth-only';
|
|
325
|
+
colorSpace?: 'display-p3' | 'srgb';
|
|
326
|
+
premultipliedAlpha?: boolean;
|
|
327
|
+
|
|
328
|
+
source: ImageBitmap | HTMLVideoElement | HTMLCanvasElement | OffscreenCanvas;
|
|
329
|
+
sourceX?: number;
|
|
330
|
+
sourceY?: number;
|
|
331
|
+
|
|
332
|
+
width?: number;
|
|
333
|
+
height?: number;
|
|
334
|
+
depth?: number;
|
|
335
|
+
}): void {
|
|
336
|
+
const {
|
|
337
|
+
source,
|
|
338
|
+
sourceX = 0,
|
|
339
|
+
sourceY = 0,
|
|
340
|
+
|
|
341
|
+
texture,
|
|
342
|
+
mipLevel = 0,
|
|
343
|
+
aspect = 'all',
|
|
344
|
+
colorSpace = 'display-p3',
|
|
345
|
+
premultipliedAlpha = false,
|
|
346
|
+
// destinationX,
|
|
347
|
+
// destinationY,
|
|
348
|
+
// desitnationZ,
|
|
349
|
+
|
|
350
|
+
width = texture.width,
|
|
351
|
+
height = texture.height,
|
|
352
|
+
depth = 1
|
|
353
|
+
} = options;
|
|
354
|
+
|
|
355
|
+
const webGpuTexture = texture as WebGPUTexture;
|
|
356
|
+
|
|
357
|
+
this.handle?.queue.copyExternalImageToTexture(
|
|
358
|
+
// source: GPUImageCopyExternalImage
|
|
359
|
+
{
|
|
360
|
+
source,
|
|
361
|
+
origin: [sourceX, sourceY]
|
|
362
|
+
},
|
|
363
|
+
// destination: GPUImageCopyTextureTagged
|
|
364
|
+
{
|
|
365
|
+
texture: webGpuTexture.handle,
|
|
366
|
+
origin: [0, 0, 0], // [x, y, z],
|
|
367
|
+
mipLevel,
|
|
368
|
+
aspect,
|
|
369
|
+
colorSpace,
|
|
370
|
+
premultipliedAlpha
|
|
371
|
+
},
|
|
372
|
+
// copySize: GPUExtent3D
|
|
373
|
+
[width, height, depth]
|
|
374
|
+
);
|
|
375
|
+
}
|
|
282
376
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
import '@luma.gl/api';
|
|
4
|
-
import './init'
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
5
3
|
|
|
6
4
|
// WEBGPU ADAPTER
|
|
7
|
-
export {
|
|
5
|
+
export {WebGPUDevice} from './adapter/webgpu-device';
|
|
8
6
|
|
|
9
7
|
// WEBGPU CLASSES (typically not accessed directly)
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
8
|
+
export {WebGPUBuffer} from './adapter/resources/webgpu-buffer';
|
|
9
|
+
export {WebGPUTexture} from './adapter/resources/webgpu-texture';
|
|
10
|
+
export {WebGPUSampler} from './adapter/resources/webgpu-sampler';
|
|
11
|
+
export {WebGPUShader} from './adapter/resources/webgpu-shader';
|
package/dist/bundle.d.ts
DELETED
package/dist/bundle.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,aAAa,KAAqB,CAAC"}
|
package/dist/bundle.js
DELETED
package/dist/bundle.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bundle.ts"],"names":["moduleExports","require","globalThis","luma","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB,EAArC;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,IAAzB,EAA+BH,aAA/B,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.luma = globalThis.luma || {};\nmodule.exports = Object.assign(globalThis.luma, moduleExports);\n"],"file":"bundle.js"}
|
package/dist/init.d.ts
DELETED
package/dist/init.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":""}
|
package/dist/init.js
DELETED
package/dist/init.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.ts"],"names":["luma","WebGPUDevice","registerDevices"],"mappings":"AAAA,SAAQA,IAAR,QAAmB,cAAnB;AACA,OAAOC,YAAP,MAAyB,yBAAzB;AAEAD,IAAI,CAACE,eAAL,CAAqB,CAACD,YAAD,CAArB","sourcesContent":["import {luma} from '@luma.gl/api';\nimport WebGPUDevice from './adapter/webgpu-device';\n\nluma.registerDevices([WebGPUDevice]);\n"],"file":"init.js"}
|
package/src/bundle.ts
DELETED
package/src/init.ts
DELETED