@luma.gl/webgpu 9.0.0-alpha.14 → 9.0.0-alpha.16
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/accessor-to-format.js +100 -1
- package/dist/adapter/helpers/convert-texture-format.js +5 -6
- package/dist/adapter/helpers/generate-mipmaps.js +88 -92
- package/dist/adapter/helpers/get-bind-group.js +54 -48
- package/dist/adapter/helpers/get-vertex-buffer-layout.js +97 -84
- package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.js +181 -129
- package/dist/adapter/resources/webgpu-buffer.js +57 -73
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +47 -63
- package/dist/adapter/resources/webgpu-compute-pass.d.ts +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.js +51 -55
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js +22 -24
- package/dist/adapter/resources/webgpu-external-texture.js +26 -27
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +89 -103
- package/dist/adapter/resources/webgpu-query.js +42 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts +1 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +64 -89
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +158 -154
- package/dist/adapter/resources/webgpu-sampler.d.ts +1 -1
- package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.js +16 -22
- package/dist/adapter/resources/webgpu-shader.d.ts +1 -1
- package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-shader.js +47 -58
- package/dist/adapter/resources/webgpu-texture.d.ts +0 -1
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +100 -103
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +77 -90
- package/dist/adapter/webgpu-device.js +215 -242
- package/dist/adapter/webgpu-types.js +0 -2
- package/dist/bundle.js +1 -2
- package/dist/dist.js +8051 -0
- package/dist/dist.min.js +1 -0
- package/dist/es5/adapter/helpers/accessor-to-format.js +2 -0
- package/dist/es5/adapter/helpers/accessor-to-format.js.map +1 -0
- package/dist/es5/adapter/helpers/convert-texture-format.js +13 -0
- package/dist/es5/adapter/helpers/convert-texture-format.js.map +1 -0
- package/dist/es5/adapter/helpers/generate-mipmaps.js +103 -0
- package/dist/es5/adapter/helpers/generate-mipmaps.js.map +1 -0
- package/dist/es5/adapter/helpers/get-bind-group.js +66 -0
- package/dist/es5/adapter/helpers/get-bind-group.js.map +1 -0
- package/dist/es5/adapter/helpers/get-vertex-buffer-layout.js +149 -0
- package/dist/es5/adapter/helpers/get-vertex-buffer-layout.js.map +1 -0
- package/dist/es5/adapter/helpers/webgpu-parameters.js +150 -0
- package/dist/es5/adapter/helpers/webgpu-parameters.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-buffer.js +131 -0
- package/dist/es5/adapter/resources/webgpu-buffer.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-command-encoder.js +90 -0
- package/dist/es5/adapter/resources/webgpu-command-encoder.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-compute-pass.js +85 -0
- package/dist/es5/adapter/resources/webgpu-compute-pass.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-compute-pipeline.js +48 -0
- package/dist/es5/adapter/resources/webgpu-compute-pipeline.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-external-texture.js +50 -0
- package/dist/es5/adapter/resources/webgpu-external-texture.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-framebuffer.js +126 -0
- package/dist/es5/adapter/resources/webgpu-framebuffer.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-query.js +2 -0
- package/dist/es5/adapter/resources/webgpu-query.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-render-pass.js +124 -0
- package/dist/es5/adapter/resources/webgpu-render-pass.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-render-pipeline.js +185 -0
- package/dist/es5/adapter/resources/webgpu-render-pipeline.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-sampler.js +45 -0
- package/dist/es5/adapter/resources/webgpu-sampler.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-shader.js +125 -0
- package/dist/es5/adapter/resources/webgpu-shader.js.map +1 -0
- package/dist/es5/adapter/resources/webgpu-texture.js +138 -0
- package/dist/es5/adapter/resources/webgpu-texture.js.map +1 -0
- package/dist/es5/adapter/webgpu-canvas-context.js +111 -0
- package/dist/es5/adapter/webgpu-canvas-context.js.map +1 -0
- package/dist/es5/adapter/webgpu-device.js +317 -0
- package/dist/es5/adapter/webgpu-device.js.map +1 -0
- package/dist/es5/adapter/webgpu-types.js +2 -0
- package/dist/es5/adapter/webgpu-types.js.map +1 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/glsl/glsllang.js +47 -0
- package/dist/es5/glsl/glsllang.js.map +1 -0
- package/dist/es5/index.js +44 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/init.js +7 -0
- package/dist/es5/init.js.map +1 -0
- package/dist/esm/adapter/helpers/accessor-to-format.js +2 -0
- package/dist/esm/adapter/helpers/accessor-to-format.js.map +1 -0
- package/dist/esm/adapter/helpers/convert-texture-format.js +7 -0
- package/dist/esm/adapter/helpers/convert-texture-format.js.map +1 -0
- package/dist/esm/adapter/helpers/generate-mipmaps.js +88 -0
- package/dist/esm/adapter/helpers/generate-mipmaps.js.map +1 -0
- package/dist/esm/adapter/helpers/get-bind-group.js +51 -0
- package/dist/esm/adapter/helpers/get-bind-group.js.map +1 -0
- package/dist/esm/adapter/helpers/get-vertex-buffer-layout.js +83 -0
- package/dist/esm/adapter/helpers/get-vertex-buffer-layout.js.map +1 -0
- package/dist/esm/adapter/helpers/webgpu-parameters.js +137 -0
- package/dist/esm/adapter/helpers/webgpu-parameters.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-buffer.js +70 -0
- package/dist/esm/adapter/resources/webgpu-buffer.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-command-encoder.js +49 -0
- package/dist/esm/adapter/resources/webgpu-command-encoder.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-compute-pass.js +44 -0
- package/dist/esm/adapter/resources/webgpu-compute-pass.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-compute-pipeline.js +23 -0
- package/dist/esm/adapter/resources/webgpu-compute-pipeline.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-external-texture.js +23 -0
- package/dist/esm/adapter/resources/webgpu-external-texture.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-framebuffer.js +93 -0
- package/dist/esm/adapter/resources/webgpu-framebuffer.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-query.js +2 -0
- package/dist/esm/adapter/resources/webgpu-query.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-render-pass.js +79 -0
- package/dist/esm/adapter/resources/webgpu-render-pass.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-render-pipeline.js +130 -0
- package/dist/esm/adapter/resources/webgpu-render-pipeline.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-sampler.js +20 -0
- package/dist/esm/adapter/resources/webgpu-sampler.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-shader.js +50 -0
- package/dist/esm/adapter/resources/webgpu-shader.js.map +1 -0
- package/dist/esm/adapter/resources/webgpu-texture.js +95 -0
- package/dist/esm/adapter/resources/webgpu-texture.js.map +1 -0
- package/dist/esm/adapter/webgpu-canvas-context.js +74 -0
- package/dist/esm/adapter/webgpu-canvas-context.js.map +1 -0
- package/dist/esm/adapter/webgpu-device.js +196 -0
- package/dist/esm/adapter/webgpu-device.js.map +1 -0
- package/dist/esm/adapter/webgpu-types.js +2 -0
- package/dist/esm/adapter/webgpu-types.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/glsl/glsllang.js +9 -0
- package/dist/esm/glsl/glsllang.js.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/init.js +4 -0
- package/dist/esm/init.js.map +1 -0
- package/dist/glsl/glsllang.js +9 -7
- package/dist/index.js +8 -6
- package/dist/init.js +1 -2
- package/package.json +8 -8
- package/src/adapter/helpers/webgpu-parameters.ts +7 -2
- package/src/adapter/resources/webgpu-command-encoder.ts +2 -1
- package/src/adapter/resources/webgpu-compute-pass.ts +4 -4
- package/src/adapter/resources/webgpu-compute-pipeline.ts +2 -1
- package/src/adapter/resources/webgpu-framebuffer.ts +3 -2
- package/src/adapter/resources/webgpu-render-pass.ts +2 -2
- package/src/adapter/resources/webgpu-render-pipeline.ts +2 -1
- package/src/adapter/resources/webgpu-shader.ts +1 -1
- package/src/adapter/webgpu-canvas-context.ts +3 -2
- package/src/adapter/webgpu-device.ts +2 -2
- package/dist/adapter/helpers/accessor-to-format.js.map +0 -1
- package/dist/adapter/helpers/convert-texture-format.js.map +0 -1
- package/dist/adapter/helpers/generate-mipmaps.js.map +0 -1
- package/dist/adapter/helpers/get-bind-group.js.map +0 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +0 -1
- package/dist/adapter/helpers/webgpu-parameters.js.map +0 -1
- package/dist/adapter/resources/webgpu-buffer.js.map +0 -1
- package/dist/adapter/resources/webgpu-command-encoder.js.map +0 -1
- package/dist/adapter/resources/webgpu-compute-pass.js.map +0 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgpu-external-texture.js.map +0 -1
- package/dist/adapter/resources/webgpu-framebuffer.js.map +0 -1
- package/dist/adapter/resources/webgpu-query.js.map +0 -1
- package/dist/adapter/resources/webgpu-render-pass.js.map +0 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgpu-sampler.js.map +0 -1
- package/dist/adapter/resources/webgpu-shader.js.map +0 -1
- package/dist/adapter/resources/webgpu-texture.js.map +0 -1
- package/dist/adapter/webgpu-canvas-context.js.map +0 -1
- package/dist/adapter/webgpu-device.js.map +0 -1
- package/dist/adapter/webgpu-types.js.map +0 -1
- package/dist/bundle.js.map +0 -1
- package/dist/glsl/glsllang.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.js.map +0 -1
|
@@ -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;AAEjD,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAC;AAIzD,2DAA2D;AAC3D,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,cAAc;IAC9D,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;
|
|
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;AAEjD,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAC;AAIzD,2DAA2D;AAC3D,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,cAAc;IAC9D,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,166 +1,170 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
1
|
import { RenderPipeline, cast, log, isObjectEmpty } from '@luma.gl/api';
|
|
3
|
-
import { applyParametersToRenderPipelineDescriptor } from '../helpers/webgpu-parameters';
|
|
4
|
-
import { getWebGPUTextureFormat } from '../helpers/convert-texture-format';
|
|
5
|
-
import { getBindGroup } from '../helpers/get-bind-group';
|
|
6
|
-
import { getVertexBufferLayout, getBufferSlots } from '../helpers/get-vertex-buffer-layout';
|
|
2
|
+
import { applyParametersToRenderPipelineDescriptor } from '../helpers/webgpu-parameters.js';
|
|
3
|
+
import { getWebGPUTextureFormat } from '../helpers/convert-texture-format.js';
|
|
4
|
+
import { getBindGroup } from '../helpers/get-bind-group.js';
|
|
5
|
+
import { getVertexBufferLayout, getBufferSlots } from '../helpers/get-vertex-buffer-layout.js';
|
|
6
|
+
// RENDER PIPELINE
|
|
7
|
+
/** Creates a new render pipeline when parameters change */
|
|
7
8
|
export default class WebGPURenderPipeline extends RenderPipeline {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
_defineProperty(this, "_buffers", void 0);
|
|
22
|
-
|
|
23
|
-
_defineProperty(this, "_indexBuffer", null);
|
|
24
|
-
|
|
25
|
-
_defineProperty(this, "_bindGroupLayout", void 0);
|
|
26
|
-
|
|
27
|
-
_defineProperty(this, "_bindGroup", null);
|
|
28
|
-
|
|
29
|
-
this.device = device;
|
|
30
|
-
this.handle = this.props.handle || this.createHandle();
|
|
31
|
-
this.handle.label = this.props.id;
|
|
32
|
-
this.vs = cast(props.vs);
|
|
33
|
-
this.fs = cast(props.fs);
|
|
34
|
-
this._bufferSlots = getBufferSlots(this.props.layout, this.props.bufferMap);
|
|
35
|
-
this._buffers = new Array(Object.keys(this._bufferSlots).length).fill(null);
|
|
36
|
-
this._bindGroupLayout = this.handle.getBindGroupLayout(0);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
createHandle() {
|
|
40
|
-
const descriptor = this._getRenderPipelineDescriptor();
|
|
41
|
-
|
|
42
|
-
const renderPipeline = this.device.handle.createRenderPipeline(descriptor);
|
|
43
|
-
log.groupCollapsed(1, "new WebGPRenderPipeline(".concat(this.id, ")"))();
|
|
44
|
-
log.log(1, JSON.stringify(descriptor, null, 2))();
|
|
45
|
-
log.groupEnd(1)();
|
|
46
|
-
return renderPipeline;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
destroy() {}
|
|
50
|
-
|
|
51
|
-
setIndexBuffer(indexBuffer) {
|
|
52
|
-
this._indexBuffer = cast(indexBuffer);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
setAttributes(attributes) {
|
|
56
|
-
for (const [name, buffer] of Object.entries(attributes)) {
|
|
57
|
-
const bufferIndex = this._bufferSlots[name];
|
|
58
|
-
|
|
59
|
-
if (bufferIndex >= 0) {
|
|
60
|
-
this._buffers[bufferIndex] = buffer;
|
|
61
|
-
} else {
|
|
62
|
-
throw new Error("Setting attribute '".concat(name, "' not listed in shader layout for program ").concat(this.id));
|
|
63
|
-
}
|
|
9
|
+
constructor(device, props) {
|
|
10
|
+
super(device, props);
|
|
11
|
+
this.fs = null;
|
|
12
|
+
this._indexBuffer = null;
|
|
13
|
+
this._bindGroup = null;
|
|
14
|
+
this.device = device;
|
|
15
|
+
this.handle = this.props.handle || this.createHandle();
|
|
16
|
+
this.handle.label = this.props.id;
|
|
17
|
+
this.vs = cast(props.vs);
|
|
18
|
+
this.fs = cast(props.fs);
|
|
19
|
+
this._bufferSlots = getBufferSlots(this.props.layout, this.props.bufferMap);
|
|
20
|
+
this._buffers = new Array(Object.keys(this._bufferSlots).length).fill(null);
|
|
21
|
+
this._bindGroupLayout = this.handle.getBindGroupLayout(0);
|
|
64
22
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
23
|
+
createHandle() {
|
|
24
|
+
const descriptor = this._getRenderPipelineDescriptor();
|
|
25
|
+
const renderPipeline = this.device.handle.createRenderPipeline(descriptor);
|
|
26
|
+
log.groupCollapsed(1, `new WebGPRenderPipeline(${this.id})`)();
|
|
27
|
+
log.log(1, JSON.stringify(descriptor, null, 2))();
|
|
28
|
+
log.groupEnd(1)();
|
|
29
|
+
return renderPipeline;
|
|
71
30
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
setUniforms(uniforms) {
|
|
75
|
-
if (!isObjectEmpty(uniforms)) {
|
|
76
|
-
throw new Error('WebGPU does not support uniforms');
|
|
31
|
+
destroy() {
|
|
32
|
+
// WebGPURenderPipeline has no destroy method.
|
|
77
33
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
_getBuffers() {
|
|
81
|
-
return this._buffers;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
_getBindGroup() {
|
|
85
|
-
return this._bindGroup;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
_getRenderPipelineDescriptor() {
|
|
89
|
-
const vertex = {
|
|
90
|
-
module: cast(this.props.vs).handle,
|
|
91
|
-
entryPoint: this.props.vsEntryPoint || 'main',
|
|
92
|
-
buffers: getVertexBufferLayout(this.props.layout, this.props.bufferMap)
|
|
93
|
-
};
|
|
94
|
-
let fragment;
|
|
95
|
-
|
|
96
|
-
if (this.props.fs) {
|
|
97
|
-
var _this$device, _this$device$canvasCo;
|
|
98
|
-
|
|
99
|
-
fragment = {
|
|
100
|
-
module: cast(this.props.fs).handle,
|
|
101
|
-
entryPoint: this.props.fsEntryPoint || 'main',
|
|
102
|
-
targets: [{
|
|
103
|
-
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)
|
|
104
|
-
}]
|
|
105
|
-
};
|
|
34
|
+
setIndexBuffer(indexBuffer) {
|
|
35
|
+
this._indexBuffer = cast(indexBuffer);
|
|
106
36
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
37
|
+
setAttributes(attributes) {
|
|
38
|
+
for (const [name, buffer] of Object.entries(attributes)) {
|
|
39
|
+
const bufferIndex = this._bufferSlots[name];
|
|
40
|
+
if (bufferIndex >= 0) {
|
|
41
|
+
this._buffers[bufferIndex] = buffer;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error(`Setting attribute '${name}' not listed in shader layout for program ${this.id}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// for (let i = 0; i < this._bufferSlots.length; ++i) {
|
|
48
|
+
// const bufferName = this._bufferSlots[i];
|
|
49
|
+
// if (attributes[bufferName]) {
|
|
50
|
+
// this.handle
|
|
51
|
+
// }
|
|
52
|
+
// }
|
|
114
53
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
};
|
|
123
|
-
applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);
|
|
124
|
-
return descriptor;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
draw(options) {
|
|
128
|
-
const webgpuRenderPass = cast(options.renderPass) || this.device.getDefaultRenderPass();
|
|
129
|
-
webgpuRenderPass.handle.setPipeline(this.handle);
|
|
130
|
-
|
|
131
|
-
const bindGroup = this._getBindGroup();
|
|
132
|
-
|
|
133
|
-
if (bindGroup) {
|
|
134
|
-
webgpuRenderPass.handle.setBindGroup(0, bindGroup);
|
|
54
|
+
/** Set the bindings */
|
|
55
|
+
setBindings(bindings) {
|
|
56
|
+
if (!isObjectEmpty(this.props.bindings)) {
|
|
57
|
+
Object.assign(this.props.bindings, bindings);
|
|
58
|
+
// Set up the bindings
|
|
59
|
+
this._bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.layout, this.props.bindings);
|
|
60
|
+
}
|
|
135
61
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
webgpuRenderPass.handle.drawIndexed(options.indexCount, options.instanceCount, options.firstIndex, options.baseVertex, options.firstInstance);
|
|
141
|
-
} else {
|
|
142
|
-
webgpuRenderPass.handle.draw(options.vertexCount || 0, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
62
|
+
setUniforms(uniforms) {
|
|
63
|
+
if (!isObjectEmpty(uniforms)) {
|
|
64
|
+
throw new Error('WebGPU does not support uniforms');
|
|
65
|
+
}
|
|
143
66
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
_setAttributeBuffers(webgpuRenderPass) {
|
|
147
|
-
if (this._indexBuffer) {
|
|
148
|
-
webgpuRenderPass.handle.setIndexBuffer(this._indexBuffer.handle, this._indexBuffer.props.indexType);
|
|
67
|
+
_getBuffers() {
|
|
68
|
+
return this._buffers;
|
|
149
69
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
70
|
+
/** Return a bind group created by setBindings */
|
|
71
|
+
_getBindGroup() {
|
|
72
|
+
// assert(this._bindGroup);
|
|
73
|
+
return this._bindGroup;
|
|
74
|
+
}
|
|
75
|
+
/** Populate the complex WebGPU GPURenderPipelineDescriptor */
|
|
76
|
+
_getRenderPipelineDescriptor() {
|
|
77
|
+
// Set up the vertex stage
|
|
78
|
+
const vertex = {
|
|
79
|
+
module: cast(this.props.vs).handle,
|
|
80
|
+
entryPoint: this.props.vsEntryPoint || 'main',
|
|
81
|
+
buffers: getVertexBufferLayout(this.props.layout, this.props.bufferMap)
|
|
82
|
+
};
|
|
83
|
+
// Set up the fragment stage
|
|
84
|
+
let fragment;
|
|
85
|
+
if (this.props.fs) {
|
|
86
|
+
fragment = {
|
|
87
|
+
module: cast(this.props.fs).handle,
|
|
88
|
+
entryPoint: this.props.fsEntryPoint || 'main',
|
|
89
|
+
targets: [
|
|
90
|
+
{
|
|
91
|
+
// TODO exclamation mark hack!
|
|
92
|
+
format: getWebGPUTextureFormat(this.device?.canvasContext?.format)
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// WebGPU has more restrictive topology support than WebGL
|
|
98
|
+
switch (this.props.topology) {
|
|
99
|
+
case 'triangle-fan':
|
|
100
|
+
case 'line-loop':
|
|
101
|
+
throw new Error(`WebGPU does not support primitive topology ${this.props.topology}`);
|
|
102
|
+
default:
|
|
103
|
+
}
|
|
104
|
+
// Create a partially populated descriptor
|
|
105
|
+
let descriptor = {
|
|
106
|
+
vertex,
|
|
107
|
+
fragment,
|
|
108
|
+
primitive: {
|
|
109
|
+
topology: this.props.topology
|
|
110
|
+
},
|
|
111
|
+
layout: 'auto'
|
|
112
|
+
};
|
|
113
|
+
// Set parameters on the descriptor
|
|
114
|
+
applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);
|
|
115
|
+
return descriptor;
|
|
116
|
+
}
|
|
117
|
+
draw(options) {
|
|
118
|
+
const webgpuRenderPass = cast(options.renderPass) || this.device.getDefaultRenderPass();
|
|
119
|
+
// Set pipeline
|
|
120
|
+
webgpuRenderPass.handle.setPipeline(this.handle);
|
|
121
|
+
// Set bindings (uniform buffers, textures etc)
|
|
122
|
+
const bindGroup = this._getBindGroup();
|
|
123
|
+
if (bindGroup) {
|
|
124
|
+
webgpuRenderPass.handle.setBindGroup(0, bindGroup);
|
|
125
|
+
}
|
|
126
|
+
// Set attributes
|
|
127
|
+
this._setAttributeBuffers(webgpuRenderPass);
|
|
128
|
+
// Draw
|
|
129
|
+
if (options.indexCount) {
|
|
130
|
+
webgpuRenderPass.handle.drawIndexed(options.indexCount, options.instanceCount, options.firstIndex, options.baseVertex, options.firstInstance);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
webgpuRenderPass.handle.draw(options.vertexCount || 0, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
_setAttributeBuffers(webgpuRenderPass) {
|
|
137
|
+
if (this._indexBuffer) {
|
|
138
|
+
webgpuRenderPass.handle.setIndexBuffer(this._indexBuffer.handle, this._indexBuffer.props.indexType);
|
|
139
|
+
}
|
|
140
|
+
const buffers = this._getBuffers();
|
|
141
|
+
for (let i = 0; i < buffers.length; ++i) {
|
|
142
|
+
const buffer = cast(buffers[i]);
|
|
143
|
+
if (!buffer) {
|
|
144
|
+
const attribute = this.props.layout.attributes.find((attribute) => attribute.location === i);
|
|
145
|
+
throw new Error(`No buffer provided for attribute '${attribute?.name || ''}' in Model '${this.props.id}'`);
|
|
146
|
+
}
|
|
147
|
+
webgpuRenderPass.handle.setVertexBuffer(i, buffer.handle);
|
|
148
|
+
}
|
|
149
|
+
// TODO - HANDLE buffer maps
|
|
150
|
+
/*
|
|
151
|
+
for (const [bufferName, attributeMapping] of Object.entries(this.props.bufferMap)) {
|
|
152
|
+
const buffer = cast<WebGPUBuffer>(this.props.attributes[bufferName]);
|
|
153
|
+
if (!buffer) {
|
|
154
|
+
log.warn(`Missing buffer for buffer map ${bufferName}`)();
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if ('location' in attributeMapping) {
|
|
159
|
+
// @ts-expect-error TODO model must not depend on webgpu
|
|
160
|
+
renderPass.handle.setVertexBuffer(layout.location, buffer.handle);
|
|
161
|
+
} else {
|
|
162
|
+
for (const [bufferName, mapping] of Object.entries(attributeMapping)) {
|
|
163
|
+
// @ts-expect-error TODO model must not depend on webgpu
|
|
164
|
+
renderPass.handle.setVertexBuffer(field.location, buffer.handle);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
*/
|
|
162
169
|
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
170
|
}
|
|
166
|
-
//# sourceMappingURL=webgpu-render-pipeline.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="@webgpu/types" />
|
|
2
2
|
import { Sampler, SamplerProps } from '@luma.gl/api';
|
|
3
3
|
import type WebGPUDevice from '../webgpu-device';
|
|
4
|
-
export
|
|
4
|
+
export type WebGPUSamplerProps = SamplerProps & {
|
|
5
5
|
handle?: GPUSampler;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-sampler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AAEjD,
|
|
1
|
+
{"version":3,"file":"webgpu-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-sampler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB;IAclD,OAAO,IAAI,IAAI;CAGzB"}
|
|
@@ -1,26 +1,20 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
1
|
import { Sampler } from '@luma.gl/api';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
*/
|
|
3
5
|
export default class WebGPUSampler extends Sampler {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
constructor(device, props) {
|
|
7
|
+
super(device, props);
|
|
8
|
+
this.device = device;
|
|
9
|
+
// Prepare sampler props
|
|
10
|
+
const samplerProps = { ...this.props };
|
|
11
|
+
if (samplerProps.type !== 'comparison-sampler') {
|
|
12
|
+
delete samplerProps.compare;
|
|
13
|
+
}
|
|
14
|
+
this.handle = this.handle || this.device.handle.createSampler(samplerProps);
|
|
15
|
+
this.handle.label = this.props.id;
|
|
16
|
+
}
|
|
17
|
+
destroy() {
|
|
18
|
+
// this.handle.destroy();
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
this.handle = this.handle || this.device.handle.createSampler(samplerProps);
|
|
20
|
-
this.handle.label = this.props.id;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
destroy() {}
|
|
24
|
-
|
|
25
20
|
}
|
|
26
|
-
//# sourceMappingURL=webgpu-sampler.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { ShaderProps, CompilerMessage } from '@luma.gl/api';
|
|
3
3
|
import { Shader } from '@luma.gl/api';
|
|
4
4
|
import type WebGPUDevice from '../webgpu-device';
|
|
5
|
-
export
|
|
5
|
+
export type WebGPUShaderProps = ShaderProps & {
|
|
6
6
|
handle?: GPUShaderModule;
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-shader.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-shader.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAM,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AAEjD,
|
|
1
|
+
{"version":3,"file":"webgpu-shader.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-shader.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAC,MAAM,EAAM,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,MAAM;IAC9C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;gBAErB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB;IAYpD,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxE,OAAO,IAAI,IAAI;IAIxB,SAAS,CAAC,YAAY,IAAI,eAAe;IAwBzC,+CAA+C;IACzC,eAAe,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAI7D"}
|
|
@@ -1,64 +1,53 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
1
|
import { Shader, log } from '@luma.gl/api';
|
|
2
|
+
/**
|
|
3
|
+
* Immutable shader
|
|
4
|
+
*/
|
|
3
5
|
export default class WebGPUShader extends Shader {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.device = device;
|
|
12
|
-
this.device.handle.pushErrorScope('validation');
|
|
13
|
-
this.handle = this.props.handle || this.createHandle();
|
|
14
|
-
this.handle.label = this.props.id;
|
|
15
|
-
|
|
16
|
-
this._checkCompilationError(this.device.handle.popErrorScope());
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async _checkCompilationError(errorScope) {
|
|
20
|
-
const error = await errorScope;
|
|
21
|
-
|
|
22
|
-
if (error) {
|
|
23
|
-
const shaderLog = await this.compilationInfo();
|
|
24
|
-
log.error("Shader compilation error: ".concat(error.message), shaderLog)();
|
|
25
|
-
throw new Error("Shader compilation error: ".concat(error.message));
|
|
6
|
+
constructor(device, props) {
|
|
7
|
+
super(device, props);
|
|
8
|
+
this.device = device;
|
|
9
|
+
this.device.handle.pushErrorScope('validation');
|
|
10
|
+
this.handle = this.props.handle || this.createHandle();
|
|
11
|
+
this.handle.label = this.props.id;
|
|
12
|
+
this._checkCompilationError(this.device.handle.popErrorScope());
|
|
26
13
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!language) {
|
|
38
|
-
language = source.includes('->') ? 'wgsl' : 'glsl';
|
|
14
|
+
async _checkCompilationError(errorScope) {
|
|
15
|
+
const error = await errorScope;
|
|
16
|
+
if (error) {
|
|
17
|
+
const shaderLog = await this.compilationInfo();
|
|
18
|
+
log.error(`Shader compilation error: ${error.message}`, shaderLog)();
|
|
19
|
+
// Note: Even though this error is asynchronous and thrown after the constructor completes,
|
|
20
|
+
// it will result in a useful stack trace leading back to the constructor
|
|
21
|
+
throw new Error(`Shader compilation error: ${error.message}`);
|
|
22
|
+
}
|
|
39
23
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
24
|
+
destroy() {
|
|
25
|
+
// this.handle.destroy();
|
|
26
|
+
}
|
|
27
|
+
createHandle() {
|
|
28
|
+
const { source } = this.props;
|
|
29
|
+
let language = this.props.language;
|
|
30
|
+
// Compile from src
|
|
31
|
+
if (!language) {
|
|
32
|
+
// wgsl uses C++ "auto" style arrow notation
|
|
33
|
+
language = source.includes('->') ? 'wgsl' : 'glsl';
|
|
34
|
+
}
|
|
35
|
+
switch (language) {
|
|
36
|
+
case 'wgsl':
|
|
37
|
+
return this.device.handle.createShaderModule({ code: source });
|
|
38
|
+
case 'glsl':
|
|
39
|
+
return this.device.handle.createShaderModule({
|
|
40
|
+
code: source,
|
|
41
|
+
// @ts-expect-error
|
|
42
|
+
transform: (glsl) => this.device.glslang.compileGLSL(glsl, type)
|
|
43
|
+
});
|
|
44
|
+
default:
|
|
45
|
+
throw new Error(language);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Returns compilation info for this shader */
|
|
49
|
+
async compilationInfo() {
|
|
50
|
+
const compilationInfo = await this.handle.getCompilationInfo();
|
|
51
|
+
return compilationInfo.messages;
|
|
55
52
|
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async compilationInfo() {
|
|
59
|
-
const compilationInfo = await this.handle.compilationInfo();
|
|
60
|
-
return compilationInfo.messages;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
53
|
}
|
|
64
|
-
//# sourceMappingURL=webgpu-shader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-texture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgpu-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-texture.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAE1E,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AACjD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAW7C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,OAAO,EAAE,aAAa,CAAC;gBASX,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY;IA+BrD,SAAS,CAAC,YAAY,IAAI,UAAU;IAyB3B,OAAO,IAAI,IAAI;IAIxB;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;IAKjD,OAAO,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,GAAG,CAAC;KACX;IAID,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE;QAChB,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;QAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,MAAM,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;QAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,IAAI;CA6HT"}
|