@luma.gl/webgpu 9.0.0-alpha.2 → 9.0.0-alpha.21
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 +32 -0
- package/dist/adapter/helpers/accessor-to-format.js.map +1 -1
- package/dist/adapter/helpers/convert-texture-format.d.ts +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 +1 -8
- package/dist/adapter/helpers/generate-mipmaps.js.map +1 -1
- package/dist/adapter/helpers/get-bind-group.d.ts +1 -1
- package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
- package/dist/adapter/helpers/get-bind-group.js +0 -9
- package/dist/adapter/helpers/get-bind-group.js.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.js +3 -17
- package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.d.ts +1 -1
- package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.js +50 -47
- package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.d.ts +3 -4
- package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.js +12 -26
- package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.d.ts +3 -4
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +7 -24
- package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts +5 -5
- package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.js +11 -23
- package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +3 -3
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js +3 -7
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.d.ts +4 -4
- package/dist/adapter/resources/webgpu-external-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.js +2 -9
- package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.d.ts +5 -5
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +12 -30
- 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 +5 -5
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +17 -30
- package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts +7 -4
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +25 -43
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.d.ts +3 -3
- package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.js +8 -7
- package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
- package/dist/adapter/resources/webgpu-shader.d.ts +4 -4
- package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-shader.js +2 -16
- package/dist/adapter/resources/webgpu-shader.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture.d.ts +4 -4
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +4 -20
- package/dist/adapter/resources/webgpu-texture.js.map +1 -1
- package/dist/adapter/webgpu-canvas-context.d.ts +5 -7
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +10 -31
- package/dist/adapter/webgpu-canvas-context.js.map +1 -1
- package/dist/adapter/webgpu-device.d.ts +19 -19
- package/dist/adapter/webgpu-device.d.ts.map +1 -1
- package/dist/adapter/webgpu-device.js +42 -71
- package/dist/adapter/webgpu-device.js.map +1 -1
- package/dist/adapter/webgpu-types.js.map +1 -1
- package/dist/dist.dev.js +3060 -0
- package/dist/glsl/glsllang.js +0 -1
- package/dist/glsl/glsllang.js.map +1 -1
- package/dist/index.cjs +1442 -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 +17 -0
- package/package.json +18 -9
- package/src/.DS_Store +0 -0
- package/src/adapter/.DS_Store +0 -0
- package/src/adapter/helpers/generate-mipmaps.ts +1 -1
- package/src/adapter/helpers/get-bind-group.ts +4 -4
- package/src/adapter/helpers/get-vertex-buffer-layout.ts +3 -3
- package/src/adapter/helpers/webgpu-parameters.ts +55 -46
- package/src/adapter/resources/webgpu-buffer.ts +6 -10
- package/src/adapter/resources/webgpu-command-encoder.ts +22 -20
- package/src/adapter/resources/webgpu-compute-pass.ts +12 -12
- package/src/adapter/resources/webgpu-compute-pipeline.ts +5 -4
- package/src/adapter/resources/webgpu-external-texture.ts +4 -4
- package/src/adapter/resources/webgpu-framebuffer.ts +18 -18
- package/src/adapter/resources/webgpu-query.ts +2 -2
- package/src/adapter/resources/webgpu-render-pass.ts +15 -12
- package/src/adapter/resources/webgpu-render-pipeline.ts +32 -15
- package/src/adapter/resources/webgpu-sampler.ts +11 -4
- package/src/adapter/resources/webgpu-shader.ts +7 -5
- package/src/adapter/resources/webgpu-texture.ts +7 -6
- package/src/adapter/webgpu-canvas-context.ts +16 -12
- package/src/adapter/webgpu-device.ts +63 -50
- package/src/index.ts +6 -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 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"webgpu-external-texture.js","names":["ExternalTexture","WebGPUSampler","WebGPUExternalTexture","constructor","device","props","_defineProperty","handle","importExternalTexture","source","colorSpace","sampler","destroy","setSampler"],"sources":["../../../src/adapter/resources/webgpu-external-texture.ts"],"sourcesContent":["// luma.gl, MIT license\nimport {ExternalTexture, ExternalTextureProps, Sampler, SamplerProps} from '@luma.gl/api';\nimport type {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUSampler} from './webgpu-sampler';\n\n/**\n * Cheap, temporary texture view for videos\n * Only valid within same callback, destroyed automatically as a microtask.\n */\nexport class WebGPUExternalTexture extends ExternalTexture {\n readonly device: WebGPUDevice;\n readonly handle: GPUExternalTexture;\n sampler: WebGPUSampler;\n\n constructor(device: WebGPUDevice, props: ExternalTextureProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.handle.importExternalTexture({\n source: props.source,\n colorSpace: props.colorSpace\n });\n this.sampler = null;\n }\n\n override destroy(): void {\n // External textures are destroyed automatically,\n // as a microtask, instead of manually or upon garbage collection like other resources.\n // this.handle.destroy();\n }\n\n /** Set default sampler */\n setSampler(sampler: Sampler | SamplerProps): this {\n // We can accept a sampler instance or set of props;\n this.sampler = sampler instanceof WebGPUSampler ? sampler : new WebGPUSampler(this.device, sampler);\n return this;\n }\n}\n"],"mappings":";AACA,SAAQA,eAAe,QAAoD,cAAc;AAAC,SAElFC,aAAa;AAMrB,OAAO,MAAMC,qBAAqB,SAASF,eAAe,CAAC;EAKzDG,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,MAAM,GAAG,IAAI,CAACF,KAAK,CAACE,MAAM,IAAI,IAAI,CAACH,MAAM,CAACG,MAAM,CAACC,qBAAqB,CAAC;MAC1EC,MAAM,EAAEJ,KAAK,CAACI,MAAM;MACpBC,UAAU,EAAEL,KAAK,CAACK;IACpB,CAAC,CAAC;IACF,IAAI,CAACC,OAAO,GAAG,IAAI;EACrB;EAESC,OAAOA,CAAA,EAAS,CAIzB;EAGAC,UAAUA,CAACF,OAA+B,EAAQ;IAEhD,IAAI,CAACA,OAAO,GAAGA,OAAO,YAAYV,aAAa,GAAGU,OAAO,GAAG,IAAIV,aAAa,CAAC,IAAI,CAACG,MAAM,EAAEO,OAAO,CAAC;IACnG,OAAO,IAAI;EACb;AACF"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/// <reference types="
|
|
1
|
+
/// <reference types="dist" />
|
|
2
2
|
import type { FramebufferProps } from '@luma.gl/api';
|
|
3
3
|
import { Framebuffer } from '@luma.gl/api';
|
|
4
|
-
import WebGPUDevice from '../webgpu-device';
|
|
5
|
-
import WebGPUTexture from './webgpu-texture';
|
|
4
|
+
import { WebGPUDevice } from '../webgpu-device';
|
|
5
|
+
import { WebGPUTexture } from './webgpu-texture';
|
|
6
6
|
/**
|
|
7
7
|
* Create new textures with correct size for all attachments.
|
|
8
8
|
* @note resize() destroys existing textures (if size has changed).
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export declare class WebGPUFramebuffer extends Framebuffer {
|
|
11
11
|
readonly device: WebGPUDevice;
|
|
12
12
|
colorAttachments: WebGPUTexture[];
|
|
13
|
-
depthStencilAttachment: WebGPUTexture;
|
|
13
|
+
depthStencilAttachment: WebGPUTexture | null;
|
|
14
14
|
/** Partial render pass descriptor. Used by WebGPURenderPass */
|
|
15
15
|
renderPassDescriptor: {
|
|
16
16
|
colorAttachments: GPURenderPassColorAttachment[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-framebuffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAC,WAAW,EAAU,MAAM,cAAc,CAAC;AAClD,OAAO,YAAY,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"webgpu-framebuffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAC,WAAW,EAAU,MAAM,cAAc,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAM/C;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,gBAAgB,EAAE,aAAa,EAAE,CAAM;IACvC,sBAAsB,EAAE,aAAa,GAAG,IAAI,CAAQ;IAEpD,+DAA+D;IAC/D,oBAAoB,EAAE;QACpB,gBAAgB,EAAE,4BAA4B,EAAE,CAAC;QACjD,sBAAsB,CAAC,EAAE,mCAAmC,CAAC;KAC9D,CAEC;gBAEU,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB;IAiCzD,mCAAmC;IACnC,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,kBAAkB;IAkB1B;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAiBlE"}
|
|
@@ -1,55 +1,44 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import { Framebuffer, Texture } from '@luma.gl/api';
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export default class WebGPUFramebuffer extends Framebuffer {
|
|
3
|
+
import { WebGPUTexture } from "./webgpu-texture.js";
|
|
4
|
+
export class WebGPUFramebuffer extends Framebuffer {
|
|
6
5
|
constructor(device, props) {
|
|
7
6
|
super(device, props);
|
|
8
|
-
|
|
9
7
|
_defineProperty(this, "device", void 0);
|
|
10
|
-
|
|
11
8
|
_defineProperty(this, "colorAttachments", []);
|
|
12
|
-
|
|
13
|
-
_defineProperty(this, "depthStencilAttachment", void 0);
|
|
14
|
-
|
|
9
|
+
_defineProperty(this, "depthStencilAttachment", null);
|
|
15
10
|
_defineProperty(this, "renderPassDescriptor", {
|
|
16
11
|
colorAttachments: []
|
|
17
12
|
});
|
|
18
|
-
|
|
19
13
|
this.device = device;
|
|
20
|
-
|
|
21
14
|
if (props.depthStencilAttachment) {
|
|
22
15
|
this.depthStencilAttachment = this.createDepthStencilTexture(props);
|
|
23
16
|
}
|
|
24
|
-
|
|
25
17
|
if (props.colorAttachments) {
|
|
26
18
|
this.colorAttachments = props.colorAttachments.map(colorAttachment => this.createColorTexture(this.props, colorAttachment));
|
|
27
19
|
}
|
|
28
|
-
|
|
29
20
|
if (this.depthStencilAttachment) {
|
|
30
21
|
this.renderPassDescriptor.depthStencilAttachment = {
|
|
31
22
|
view: this.depthStencilAttachment.handle.createView(),
|
|
32
|
-
|
|
23
|
+
depthClearValue: 1.0,
|
|
33
24
|
depthStoreOp: 'store',
|
|
34
|
-
|
|
25
|
+
stencilClearValue: 0,
|
|
35
26
|
stencilStoreOp: 'store'
|
|
36
27
|
};
|
|
37
28
|
}
|
|
38
|
-
|
|
39
29
|
if (this.colorAttachments.length > 0) {
|
|
40
30
|
this.renderPassDescriptor.colorAttachments = this.colorAttachments.map(colorAttachment => ({
|
|
41
31
|
view: colorAttachment.handle.createView(),
|
|
32
|
+
loadOp: 'clear',
|
|
42
33
|
loadValue: [0.0, 0.0, 0.0, 0.0],
|
|
43
34
|
storeOp: 'store'
|
|
44
35
|
}));
|
|
45
36
|
}
|
|
46
37
|
}
|
|
47
|
-
|
|
48
38
|
createDepthStencilTexture(props) {
|
|
49
|
-
if (props.depthStencilAttachment instanceof
|
|
39
|
+
if (props.depthStencilAttachment instanceof WebGPUTexture) {
|
|
50
40
|
return props.depthStencilAttachment;
|
|
51
41
|
}
|
|
52
|
-
|
|
53
42
|
if (typeof props.depthStencilAttachment === 'string') {
|
|
54
43
|
return this.device._createTexture({
|
|
55
44
|
id: 'depth-stencil-attachment',
|
|
@@ -59,15 +48,12 @@ export default class WebGPUFramebuffer extends Framebuffer {
|
|
|
59
48
|
usage: Texture.RENDER_ATTACHMENT
|
|
60
49
|
});
|
|
61
50
|
}
|
|
62
|
-
|
|
63
51
|
throw new Error('type');
|
|
64
52
|
}
|
|
65
|
-
|
|
66
53
|
createColorTexture(props, texture) {
|
|
67
|
-
if (texture instanceof
|
|
54
|
+
if (texture instanceof WebGPUTexture) {
|
|
68
55
|
return texture;
|
|
69
56
|
}
|
|
70
|
-
|
|
71
57
|
if (typeof texture === 'string') {
|
|
72
58
|
return this.device._createTexture({
|
|
73
59
|
id: 'color-attachment',
|
|
@@ -77,35 +63,31 @@ export default class WebGPUFramebuffer extends Framebuffer {
|
|
|
77
63
|
usage: Texture.RENDER_ATTACHMENT
|
|
78
64
|
});
|
|
79
65
|
}
|
|
80
|
-
|
|
81
66
|
throw new Error('type');
|
|
82
67
|
}
|
|
83
|
-
|
|
84
68
|
_resizeAttachments(width, height) {
|
|
85
69
|
for (let i = 0; i < this.colorAttachments.length; ++i) {
|
|
86
70
|
if (this.colorAttachments[i]) {
|
|
87
|
-
const resizedTexture = this.device._createTexture({
|
|
71
|
+
const resizedTexture = this.device._createTexture({
|
|
72
|
+
...this.colorAttachments[i].props,
|
|
88
73
|
width,
|
|
89
74
|
height
|
|
90
75
|
});
|
|
91
|
-
|
|
92
76
|
this.colorAttachments[i].destroy();
|
|
93
77
|
this.colorAttachments[i] = resizedTexture;
|
|
94
78
|
this.renderPassDescriptor.colorAttachments[i].view = resizedTexture.handle.createView();
|
|
95
79
|
}
|
|
96
80
|
}
|
|
97
|
-
|
|
98
81
|
if (this.depthStencilAttachment) {
|
|
99
|
-
const resizedTexture = this.device._createTexture({
|
|
82
|
+
const resizedTexture = this.device._createTexture({
|
|
83
|
+
...this.depthStencilAttachment.props,
|
|
100
84
|
width,
|
|
101
85
|
height
|
|
102
86
|
});
|
|
103
|
-
|
|
104
87
|
this.depthStencilAttachment.destroy();
|
|
105
88
|
this.depthStencilAttachment = resizedTexture;
|
|
106
89
|
this.renderPassDescriptor.depthStencilAttachment.view = resizedTexture.handle.createView();
|
|
107
90
|
}
|
|
108
91
|
}
|
|
109
|
-
|
|
110
92
|
}
|
|
111
93
|
//# sourceMappingURL=webgpu-framebuffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"webgpu-framebuffer.js","names":["Framebuffer","Texture","WebGPUTexture","WebGPUFramebuffer","constructor","device","props","_defineProperty","colorAttachments","depthStencilAttachment","createDepthStencilTexture","map","colorAttachment","createColorTexture","renderPassDescriptor","view","handle","createView","depthClearValue","depthStoreOp","stencilClearValue","stencilStoreOp","length","loadOp","loadValue","storeOp","_createTexture","id","format","width","height","usage","RENDER_ATTACHMENT","Error","texture","_resizeAttachments","i","resizedTexture","destroy"],"sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"sourcesContent":["import type {FramebufferProps, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture} from '@luma.gl/api';\nimport {WebGPUDevice} from '../webgpu-device';\n// import {WebGPUCanvasContext} from '../webgpu-canvas-context';\nimport {WebGPUTexture} from './webgpu-texture';\n\n// const DEFAULT_DEPTH_STENCIL_FORMAT: DepthStencilTextureFormat = 'depth24plus';\n\n// const MAX_COLOR_ATTACHMENTS = 8;\n\n/**\n * Create new textures with correct size for all attachments. \n * @note resize() destroys existing textures (if size has changed). \n */\nexport class WebGPUFramebuffer extends Framebuffer {\n readonly device: WebGPUDevice;\n\n colorAttachments: WebGPUTexture[] = [];\n depthStencilAttachment: WebGPUTexture | null = null;\n\n /** Partial render pass descriptor. Used by WebGPURenderPass */\n renderPassDescriptor: {\n colorAttachments: GPURenderPassColorAttachment[];\n depthStencilAttachment?: GPURenderPassDepthStencilAttachment;\n } = {\n colorAttachments: []\n };\n\n constructor(device: WebGPUDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n\n if (props.depthStencilAttachment) {\n this.depthStencilAttachment = this.createDepthStencilTexture(props);\n }\n\n if (props.colorAttachments) {\n this.colorAttachments = props.colorAttachments.map(colorAttachment => this.createColorTexture(this.props, colorAttachment));\n }\n\n if (this.depthStencilAttachment) {\n this.renderPassDescriptor.depthStencilAttachment = {\n view: this.depthStencilAttachment.handle.createView(),\n // Add default clear values\n depthClearValue: 1.0,\n depthStoreOp: 'store',\n stencilClearValue: 0,\n stencilStoreOp: 'store',\n }\n }\n\n if (this.colorAttachments.length > 0) {\n this.renderPassDescriptor.colorAttachments = this.colorAttachments.map(colorAttachment => ({\n view: colorAttachment.handle.createView(),\n loadOp: 'clear',\n loadValue: [0.0, 0.0, 0.0, 0.0],\n storeOp: 'store'\n }));\n }\n }\n\n /** Create depth stencil texture */\n private createDepthStencilTexture(props: FramebufferProps): WebGPUTexture {\n if (props.depthStencilAttachment instanceof WebGPUTexture) {\n return props.depthStencilAttachment;\n }\n\n if (typeof props.depthStencilAttachment === 'string') {\n return this.device._createTexture({\n id: 'depth-stencil-attachment',\n format: props.depthStencilAttachment,\n width: props.width,\n height: props.height,\n usage: Texture.RENDER_ATTACHMENT\n });\n }\n\n throw new Error('type');\n }\n\n private createColorTexture(props: FramebufferProps, texture: Texture | ColorTextureFormat): WebGPUTexture {\n if (texture instanceof WebGPUTexture) {\n return texture;\n }\n\n if (typeof texture === 'string') {\n return this.device._createTexture({\n id: 'color-attachment',\n format: texture,\n width: props.width,\n height: props.height,\n usage: Texture.RENDER_ATTACHMENT\n });\n }\n\n throw new Error('type');\n }\n\n /**\n * Create new textures with correct size for all attachments.\n * @note destroys existing textures.\n */\n protected _resizeAttachments(width: number, height: number): void {\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n if (this.colorAttachments[i]) {\n const resizedTexture = this.device._createTexture({...this.colorAttachments[i].props, width, height})\n this.colorAttachments[i].destroy();\n this.colorAttachments[i] = resizedTexture;\n this.renderPassDescriptor.colorAttachments[i].view = resizedTexture.handle.createView();\n }\n }\n\n if (this.depthStencilAttachment) {\n const resizedTexture = this.device._createTexture({...this.depthStencilAttachment.props, width, height})\n this.depthStencilAttachment.destroy();\n this.depthStencilAttachment = resizedTexture;\n this.renderPassDescriptor.depthStencilAttachment.view = resizedTexture.handle.createView();\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"webgpu-query.js","names":[],"sources":["../../../src/adapter/resources/webgpu-query.ts"],"sourcesContent":["/*\nimport {Resource, Query, QueryProps} from '@luma.gl/api';\nimport {WebGPUDevice} from '../webgpu-device';\n\nexport type WebGPUQueryProps = QueryProps & {\n handle?: any;\n};\n\nconst DEFAULT_QUERY_PROPS: Required<WebGPUQueryProps> = {\n id: undefined,\n handle: undefined,\n userData: undefined,\n type: 'timestamp',\n count: 1,\n pipelineStatistics: []\n};\n\n/**\n * Immutable\n *\nclass WebGPUQuery extends Resource<WebGPUQueryProps> implements Query {\n readonly device: WebGPUDevice;\n readonly handle: GPUQuerySet;\n\n constructor(device: WebGPUDevice, props: WebGPUQueryProps) {\n super(device, props, DEFAULT_QUERY_PROPS);\n this.handle = this.props.handle as GPUQuerySet || this.createHandle();\n this.handle.label = this.props.id;\n }\n\n protected createHandle() {\n return this.device.handle.createQuerySet({\n type: this.props.type,\n count: this.props.count,\n pipelineStatistics: this.props.pipelineStatistics\n });\n }\n\n override destroy(): void {\n this.handle.destroy();\n }\n}\n*/"],"mappings":""}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/// <reference types="
|
|
1
|
+
/// <reference types="dist" />
|
|
2
2
|
import type { RenderPassProps, RenderPassParameters, Binding } from '@luma.gl/api';
|
|
3
3
|
import { Buffer, RenderPass, RenderPipeline } from '@luma.gl/api';
|
|
4
|
-
import WebGPUDevice from '../webgpu-device';
|
|
5
|
-
import WebGPURenderPipeline from './webgpu-render-pipeline';
|
|
6
|
-
export
|
|
4
|
+
import { WebGPUDevice } from '../webgpu-device';
|
|
5
|
+
import { WebGPURenderPipeline } from './webgpu-render-pipeline';
|
|
6
|
+
export declare class WebGPURenderPass extends RenderPass {
|
|
7
7
|
readonly device: WebGPUDevice;
|
|
8
8
|
readonly handle: GPURenderPassEncoder;
|
|
9
9
|
/** Active pipeline */
|
|
10
10
|
pipeline: WebGPURenderPipeline | null;
|
|
11
11
|
constructor(device: WebGPUDevice, props?: RenderPassProps);
|
|
12
12
|
destroy(): void;
|
|
13
|
-
|
|
13
|
+
end(): void;
|
|
14
14
|
setPipeline(pipeline: RenderPipeline): void;
|
|
15
15
|
/** Sets an array of bindings (uniform buffers, samplers, textures, ...) */
|
|
16
16
|
setBindings(bindings: Record<string, Binding>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-render-pass.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAC,MAAM,cAAc,CAAC;AACjF,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"webgpu-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-render-pass.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,eAAe,EAAE,oBAAoB,EAAE,OAAO,EAAC,MAAM,cAAc,CAAC;AACjF,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAO,MAAM,cAAc,CAAC;AACtE,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAE9D,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEtC,sBAAsB;IACtB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAQ;gBAEjC,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,eAAoB;IAUpD,OAAO,IAAI,IAAI;IAExB,GAAG,IAAI,IAAI;IAIX,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,2EAA2E;IAC3E,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQpD,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAC3B,MAAM,GAAE,MAAU,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI;IAIP,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;IAIvE,IAAI,CAAC,OAAO,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAmBR,YAAY,IAAI,IAAI;IAKpB,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI;IAwBrD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAGxC,aAAa,IAAI,IAAI;IAGrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAW7C"}
|
|
@@ -1,56 +1,51 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import { RenderPass, cast } from '@luma.gl/api';
|
|
3
|
-
export
|
|
4
|
-
constructor(device
|
|
3
|
+
export class WebGPURenderPass extends RenderPass {
|
|
4
|
+
constructor(device) {
|
|
5
|
+
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
5
6
|
super(device, props);
|
|
6
|
-
|
|
7
7
|
_defineProperty(this, "device", void 0);
|
|
8
|
-
|
|
9
8
|
_defineProperty(this, "handle", void 0);
|
|
10
|
-
|
|
11
9
|
_defineProperty(this, "pipeline", null);
|
|
12
|
-
|
|
13
10
|
this.device = device;
|
|
14
11
|
const framebuffer = props.framebuffer || device.canvasContext.getCurrentFramebuffer();
|
|
15
12
|
const renderPassDescriptor = framebuffer.renderPassDescriptor;
|
|
16
13
|
this.handle = this.props.handle || device.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
17
14
|
this.handle.label = this.props.id;
|
|
18
15
|
}
|
|
19
|
-
|
|
20
16
|
destroy() {}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.handle.endPass();
|
|
17
|
+
end() {
|
|
18
|
+
this.handle.end();
|
|
24
19
|
}
|
|
25
|
-
|
|
26
20
|
setPipeline(pipeline) {
|
|
27
21
|
this.pipeline = cast(pipeline);
|
|
28
22
|
this.handle.setPipeline(this.pipeline.handle);
|
|
29
23
|
}
|
|
30
|
-
|
|
31
24
|
setBindings(bindings) {
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
var _this$pipeline, _this$pipeline2;
|
|
26
|
+
(_this$pipeline = this.pipeline) === null || _this$pipeline === void 0 ? void 0 : _this$pipeline.setBindings(bindings);
|
|
27
|
+
const bindGroup = (_this$pipeline2 = this.pipeline) === null || _this$pipeline2 === void 0 ? void 0 : _this$pipeline2._getBindGroup();
|
|
28
|
+
if (bindGroup) {
|
|
29
|
+
this.handle.setBindGroup(0, bindGroup);
|
|
30
|
+
}
|
|
34
31
|
}
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
setIndexBuffer(buffer, indexFormat) {
|
|
33
|
+
let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
34
|
+
let size = arguments.length > 3 ? arguments[3] : undefined;
|
|
37
35
|
this.handle.setIndexBuffer(cast(buffer).handle, indexFormat, offset, size);
|
|
38
36
|
}
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
setVertexBuffer(slot, buffer) {
|
|
38
|
+
let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
41
39
|
this.handle.setVertexBuffer(slot, cast(buffer).handle, offset);
|
|
42
40
|
}
|
|
43
|
-
|
|
44
41
|
draw(options) {
|
|
45
42
|
if (options.indexCount) {
|
|
46
43
|
this.handle.drawIndexed(options.indexCount, options.instanceCount, options.firstIndex, options.baseVertex, options.firstInstance);
|
|
47
44
|
} else {
|
|
48
|
-
this.handle.draw(options.vertexCount, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
45
|
+
this.handle.draw(options.vertexCount || 0, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
|
-
|
|
52
48
|
drawIndirect() {}
|
|
53
|
-
|
|
54
49
|
setParameters(parameters) {
|
|
55
50
|
const {
|
|
56
51
|
blendConstant,
|
|
@@ -58,35 +53,27 @@ export default class WebGPURenderPass extends RenderPass {
|
|
|
58
53
|
scissorRect,
|
|
59
54
|
viewport
|
|
60
55
|
} = parameters;
|
|
61
|
-
|
|
62
56
|
if (blendConstant) {
|
|
63
57
|
this.handle.setBlendConstant(blendConstant);
|
|
64
58
|
}
|
|
65
|
-
|
|
66
59
|
if (stencilReference) {
|
|
67
60
|
this.handle.setStencilReference(stencilReference);
|
|
68
61
|
}
|
|
69
|
-
|
|
70
62
|
if (scissorRect) {
|
|
71
63
|
this.handle.setScissorRect(scissorRect[0], scissorRect[1], scissorRect[2], scissorRect[3]);
|
|
72
64
|
}
|
|
73
|
-
|
|
74
65
|
if (viewport) {
|
|
75
66
|
this.handle.setViewport(viewport[0], viewport[1], viewport[2], viewport[3], viewport[4], viewport[5]);
|
|
76
67
|
}
|
|
77
68
|
}
|
|
78
|
-
|
|
79
69
|
pushDebugGroup(groupLabel) {
|
|
80
70
|
this.handle.pushDebugGroup(groupLabel);
|
|
81
71
|
}
|
|
82
|
-
|
|
83
72
|
popDebugGroup() {
|
|
84
73
|
this.handle.popDebugGroup();
|
|
85
74
|
}
|
|
86
|
-
|
|
87
75
|
insertDebugMarker(markerLabel) {
|
|
88
76
|
this.handle.insertDebugMarker(markerLabel);
|
|
89
77
|
}
|
|
90
|
-
|
|
91
78
|
}
|
|
92
79
|
//# sourceMappingURL=webgpu-render-pass.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"webgpu-render-pass.js","names":["RenderPass","cast","WebGPURenderPass","constructor","device","props","arguments","length","undefined","_defineProperty","framebuffer","canvasContext","getCurrentFramebuffer","renderPassDescriptor","handle","commandEncoder","beginRenderPass","label","id","destroy","end","setPipeline","pipeline","setBindings","bindings","_this$pipeline","_this$pipeline2","bindGroup","_getBindGroup","setBindGroup","setIndexBuffer","buffer","indexFormat","offset","size","setVertexBuffer","slot","draw","options","indexCount","drawIndexed","instanceCount","firstIndex","baseVertex","firstInstance","vertexCount","drawIndirect","setParameters","parameters","blendConstant","stencilReference","scissorRect","viewport","setBlendConstant","setStencilReference","setScissorRect","setViewport","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-render-pass.ts"],"sourcesContent":["import type {RenderPassProps, RenderPassParameters, Binding} from '@luma.gl/api';\nimport {Buffer, RenderPass, RenderPipeline, cast} from '@luma.gl/api';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\n// import {WebGPUCommandEncoder} from './webgpu-command-encoder';\nimport {WebGPURenderPipeline} from './webgpu-render-pipeline';\n\nexport class WebGPURenderPass extends RenderPass {\n readonly device: WebGPUDevice;\n readonly handle: GPURenderPassEncoder;\n\n /** Active pipeline */\n pipeline: WebGPURenderPipeline | null = null;\n\n constructor(device: WebGPUDevice, props: RenderPassProps = {}) {\n super(device, props);\n this.device = device;\n const framebuffer = props.framebuffer || device.canvasContext.getCurrentFramebuffer();\n // @ts-expect-error\n const renderPassDescriptor = framebuffer.renderPassDescriptor;\n this.handle = this.props.handle || device.commandEncoder.beginRenderPass(renderPassDescriptor);\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {}\n\n end(): void {\n this.handle.end();\n }\n\n setPipeline(pipeline: RenderPipeline): void {\n this.pipeline = cast<WebGPURenderPipeline>(pipeline);\n this.handle.setPipeline(this.pipeline.handle);\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Record<string, Binding>): void {\n this.pipeline?.setBindings(bindings);\n const bindGroup = this.pipeline?._getBindGroup();\n if (bindGroup) {\n this.handle.setBindGroup(0, bindGroup);\n }\n }\n\n setIndexBuffer(\n buffer: Buffer,\n indexFormat: GPUIndexFormat,\n offset: number = 0,\n size?: number\n ): void {\n this.handle.setIndexBuffer(cast<WebGPUBuffer>(buffer).handle, indexFormat, offset, size);\n }\n\n setVertexBuffer(slot: number, buffer: Buffer, offset: number = 0): void {\n this.handle.setVertexBuffer(slot, cast<WebGPUBuffer>(buffer).handle, offset);\n }\n\n draw(options: {\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): void {\n if (options.indexCount) {\n this.handle.drawIndexed(\n options.indexCount,\n options.instanceCount,\n options.firstIndex,\n options.baseVertex,\n options.firstInstance\n );\n } else {\n this.handle.draw(\n options.vertexCount || 0,\n options.instanceCount,\n options.firstIndex,\n options.firstInstance\n );\n }\n }\n\n drawIndirect(): void {\n // drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;\n // drawIndexedIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;\n }\n\n setParameters(parameters: RenderPassParameters): void {\n const {blendConstant, stencilReference, scissorRect, viewport} = parameters;\n if (blendConstant) {\n this.handle.setBlendConstant(blendConstant);\n }\n if (stencilReference) {\n this.handle.setStencilReference(stencilReference);\n }\n if (scissorRect) {\n this.handle.setScissorRect(scissorRect[0], scissorRect[1], scissorRect[2], scissorRect[3]);\n }\n // TODO - explain how 3 dimensions vs 2 in WebGL works.\n if (viewport) {\n this.handle.setViewport(\n viewport[0],\n viewport[1],\n viewport[2],\n viewport[3],\n viewport[4],\n viewport[5]\n );\n }\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
/// <reference types="
|
|
1
|
+
/// <reference types="dist" />
|
|
2
2
|
import type { Binding, RenderPass } from '@luma.gl/api';
|
|
3
3
|
import { Buffer, RenderPipeline, RenderPipelineProps } from '@luma.gl/api';
|
|
4
|
-
import type WebGPUDevice from '../webgpu-device';
|
|
5
|
-
import type
|
|
4
|
+
import type { WebGPUDevice } from '../webgpu-device';
|
|
5
|
+
import type { WebGPUShader } from './webgpu-shader';
|
|
6
|
+
import type { WebGPURenderPass } from './webgpu-render-pass';
|
|
6
7
|
/** Creates a new render pipeline when parameters change */
|
|
7
|
-
export
|
|
8
|
+
export declare class WebGPURenderPipeline extends RenderPipeline {
|
|
8
9
|
device: WebGPUDevice;
|
|
9
10
|
handle: GPURenderPipeline;
|
|
11
|
+
vs: WebGPUShader;
|
|
12
|
+
fs: WebGPUShader | null;
|
|
10
13
|
private _bufferSlots;
|
|
11
14
|
private _buffers;
|
|
12
15
|
private _indexBuffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-render-pipeline.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AACtD,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAA2B,MAAM,cAAc,CAAC;AASnG,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"webgpu-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-render-pipeline.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AACtD,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAA2B,MAAM,cAAc,CAAC;AASnG,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAI3D,2DAA2D;AAC3D,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAE1B,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,GAAG,IAAI,CAAQ;IAE/B,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAA6B;IAIjD,4CAA4C;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAA6B;gBAEnC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB;IAc5D,SAAS,CAAC,YAAY,IAAI,iBAAiB;IASlC,OAAO,IAAI,IAAI;IAIxB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAmBvD,uBAAuB;IACvB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAapD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMhD,WAAW;IAIX,iDAAiD;IACjD,aAAa;IAKb,8DAA8D;IAC9D,SAAS,CAAC,4BAA4B;IA+CtC,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAmCR,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB;CAwCxD"}
|
|
@@ -1,55 +1,45 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import { RenderPipeline, cast, log, isObjectEmpty } from '@luma.gl/api';
|
|
3
|
-
import { applyParametersToRenderPipelineDescriptor } from
|
|
4
|
-
import { getWebGPUTextureFormat } from
|
|
5
|
-
import { getBindGroup } from
|
|
6
|
-
import { getVertexBufferLayout, getBufferSlots } from
|
|
7
|
-
export
|
|
3
|
+
import { applyParametersToRenderPipelineDescriptor } from "../helpers/webgpu-parameters.js";
|
|
4
|
+
import { getWebGPUTextureFormat } from "../helpers/convert-texture-format.js";
|
|
5
|
+
import { getBindGroup } from "../helpers/get-bind-group.js";
|
|
6
|
+
import { getVertexBufferLayout, getBufferSlots } from "../helpers/get-vertex-buffer-layout.js";
|
|
7
|
+
export class WebGPURenderPipeline extends RenderPipeline {
|
|
8
8
|
constructor(device, props) {
|
|
9
9
|
super(device, props);
|
|
10
|
-
|
|
11
10
|
_defineProperty(this, "device", void 0);
|
|
12
|
-
|
|
13
11
|
_defineProperty(this, "handle", void 0);
|
|
14
|
-
|
|
12
|
+
_defineProperty(this, "vs", void 0);
|
|
13
|
+
_defineProperty(this, "fs", null);
|
|
15
14
|
_defineProperty(this, "_bufferSlots", void 0);
|
|
16
|
-
|
|
17
15
|
_defineProperty(this, "_buffers", void 0);
|
|
18
|
-
|
|
19
|
-
_defineProperty(this, "_indexBuffer", void 0);
|
|
20
|
-
|
|
16
|
+
_defineProperty(this, "_indexBuffer", null);
|
|
21
17
|
_defineProperty(this, "_bindGroupLayout", void 0);
|
|
22
|
-
|
|
23
18
|
_defineProperty(this, "_bindGroup", null);
|
|
24
|
-
|
|
25
19
|
this.device = device;
|
|
26
20
|
this.handle = this.props.handle || this.createHandle();
|
|
27
21
|
this.handle.label = this.props.id;
|
|
22
|
+
this.vs = cast(props.vs);
|
|
23
|
+
this.fs = cast(props.fs);
|
|
28
24
|
this._bufferSlots = getBufferSlots(this.props.layout, this.props.bufferMap);
|
|
29
25
|
this._buffers = new Array(Object.keys(this._bufferSlots).length).fill(null);
|
|
30
26
|
this._bindGroupLayout = this.handle.getBindGroupLayout(0);
|
|
31
27
|
}
|
|
32
|
-
|
|
33
28
|
createHandle() {
|
|
34
29
|
const descriptor = this._getRenderPipelineDescriptor();
|
|
35
|
-
|
|
36
30
|
const renderPipeline = this.device.handle.createRenderPipeline(descriptor);
|
|
37
31
|
log.groupCollapsed(1, "new WebGPRenderPipeline(".concat(this.id, ")"))();
|
|
38
32
|
log.log(1, JSON.stringify(descriptor, null, 2))();
|
|
39
33
|
log.groupEnd(1)();
|
|
40
34
|
return renderPipeline;
|
|
41
35
|
}
|
|
42
|
-
|
|
43
36
|
destroy() {}
|
|
44
|
-
|
|
45
37
|
setIndexBuffer(indexBuffer) {
|
|
46
38
|
this._indexBuffer = cast(indexBuffer);
|
|
47
39
|
}
|
|
48
|
-
|
|
49
40
|
setAttributes(attributes) {
|
|
50
41
|
for (const [name, buffer] of Object.entries(attributes)) {
|
|
51
42
|
const bufferIndex = this._bufferSlots[name];
|
|
52
|
-
|
|
53
43
|
if (bufferIndex >= 0) {
|
|
54
44
|
this._buffers[bufferIndex] = buffer;
|
|
55
45
|
} else {
|
|
@@ -57,28 +47,23 @@ export default class WebGPURenderPipeline extends RenderPipeline {
|
|
|
57
47
|
}
|
|
58
48
|
}
|
|
59
49
|
}
|
|
60
|
-
|
|
61
50
|
setBindings(bindings) {
|
|
62
51
|
if (!isObjectEmpty(this.props.bindings)) {
|
|
63
52
|
Object.assign(this.props.bindings, bindings);
|
|
64
53
|
this._bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.layout, this.props.bindings);
|
|
65
54
|
}
|
|
66
55
|
}
|
|
67
|
-
|
|
68
56
|
setUniforms(uniforms) {
|
|
69
57
|
if (!isObjectEmpty(uniforms)) {
|
|
70
58
|
throw new Error('WebGPU does not support uniforms');
|
|
71
59
|
}
|
|
72
60
|
}
|
|
73
|
-
|
|
74
61
|
_getBuffers() {
|
|
75
62
|
return this._buffers;
|
|
76
63
|
}
|
|
77
|
-
|
|
78
64
|
_getBindGroup() {
|
|
79
65
|
return this._bindGroup;
|
|
80
66
|
}
|
|
81
|
-
|
|
82
67
|
_getRenderPipelineDescriptor() {
|
|
83
68
|
const vertex = {
|
|
84
69
|
module: cast(this.props.vs).handle,
|
|
@@ -86,63 +71,60 @@ export default class WebGPURenderPipeline extends RenderPipeline {
|
|
|
86
71
|
buffers: getVertexBufferLayout(this.props.layout, this.props.bufferMap)
|
|
87
72
|
};
|
|
88
73
|
let fragment;
|
|
89
|
-
|
|
90
74
|
if (this.props.fs) {
|
|
75
|
+
var _this$device, _this$device$canvasCo;
|
|
91
76
|
fragment = {
|
|
92
77
|
module: cast(this.props.fs).handle,
|
|
93
78
|
entryPoint: this.props.fsEntryPoint || 'main',
|
|
94
79
|
targets: [{
|
|
95
|
-
format: getWebGPUTextureFormat(this.device.canvasContext.format)
|
|
80
|
+
format: getWebGPUTextureFormat((_this$device = this.device) === null || _this$device === void 0 ? void 0 : (_this$device$canvasCo = _this$device.canvasContext) === null || _this$device$canvasCo === void 0 ? void 0 : _this$device$canvasCo.format)
|
|
96
81
|
}]
|
|
97
82
|
};
|
|
98
83
|
}
|
|
99
|
-
|
|
100
|
-
|
|
84
|
+
switch (this.props.topology) {
|
|
85
|
+
case 'triangle-fan':
|
|
86
|
+
case 'line-loop':
|
|
87
|
+
throw new Error("WebGPU does not support primitive topology ".concat(this.props.topology));
|
|
88
|
+
default:
|
|
89
|
+
}
|
|
90
|
+
const descriptor = {
|
|
101
91
|
vertex,
|
|
102
92
|
fragment,
|
|
103
93
|
primitive: {
|
|
104
94
|
topology: this.props.topology
|
|
105
|
-
}
|
|
95
|
+
},
|
|
96
|
+
layout: 'auto'
|
|
106
97
|
};
|
|
107
98
|
applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);
|
|
108
99
|
return descriptor;
|
|
109
100
|
}
|
|
110
|
-
|
|
111
101
|
draw(options) {
|
|
112
102
|
const webgpuRenderPass = cast(options.renderPass) || this.device.getDefaultRenderPass();
|
|
113
103
|
webgpuRenderPass.handle.setPipeline(this.handle);
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
webgpuRenderPass.handle.setBindGroup(0,
|
|
104
|
+
const bindGroup = this._getBindGroup();
|
|
105
|
+
if (bindGroup) {
|
|
106
|
+
webgpuRenderPass.handle.setBindGroup(0, bindGroup);
|
|
117
107
|
}
|
|
118
|
-
|
|
119
108
|
this._setAttributeBuffers(webgpuRenderPass);
|
|
120
|
-
|
|
121
109
|
if (options.indexCount) {
|
|
122
110
|
webgpuRenderPass.handle.drawIndexed(options.indexCount, options.instanceCount, options.firstIndex, options.baseVertex, options.firstInstance);
|
|
123
111
|
} else {
|
|
124
|
-
webgpuRenderPass.handle.draw(options.vertexCount, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
112
|
+
webgpuRenderPass.handle.draw(options.vertexCount || 0, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
125
113
|
}
|
|
126
114
|
}
|
|
127
|
-
|
|
128
115
|
_setAttributeBuffers(webgpuRenderPass) {
|
|
129
116
|
if (this._indexBuffer) {
|
|
130
117
|
webgpuRenderPass.handle.setIndexBuffer(this._indexBuffer.handle, this._indexBuffer.props.indexType);
|
|
131
118
|
}
|
|
132
|
-
|
|
133
119
|
const buffers = this._getBuffers();
|
|
134
|
-
|
|
135
120
|
for (let i = 0; i < buffers.length; ++i) {
|
|
136
121
|
const buffer = cast(buffers[i]);
|
|
137
|
-
|
|
138
122
|
if (!buffer) {
|
|
139
123
|
const attribute = this.props.layout.attributes.find(attribute => attribute.location === i);
|
|
140
124
|
throw new Error("No buffer provided for attribute '".concat((attribute === null || attribute === void 0 ? void 0 : attribute.name) || '', "' in Model '").concat(this.props.id, "'"));
|
|
141
125
|
}
|
|
142
|
-
|
|
143
126
|
webgpuRenderPass.handle.setVertexBuffer(i, buffer.handle);
|
|
144
127
|
}
|
|
145
128
|
}
|
|
146
|
-
|
|
147
129
|
}
|
|
148
130
|
//# sourceMappingURL=webgpu-render-pipeline.js.map
|