@luma.gl/core 9.3.0-alpha.9 → 9.3.0
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/device.d.ts +1 -1
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +3 -2
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.d.ts.map +1 -1
- package/dist/adapter/luma.js +2 -1
- package/dist/adapter/luma.js.map +1 -1
- package/dist/dist.dev.js +328 -173
- package/dist/dist.min.js +5 -5
- package/dist/factories/bind-group-factory.d.ts.map +1 -1
- package/dist/factories/bind-group-factory.js +14 -5
- package/dist/factories/bind-group-factory.js.map +1 -1
- package/dist/index.cjs +317 -173
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/portable/shader-block-writer.d.ts +51 -0
- package/dist/portable/shader-block-writer.d.ts.map +1 -0
- package/dist/portable/shader-block-writer.js +185 -0
- package/dist/portable/shader-block-writer.js.map +1 -0
- package/dist/portable/uniform-store.d.ts +52 -20
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +71 -26
- package/dist/portable/uniform-store.js.map +1 -1
- package/dist/shadertypes/data-types/data-type-decoder.js +2 -2
- package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -1
- package/dist/shadertypes/data-types/decode-data-types.js +2 -2
- package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.js +1 -1
- package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -1
- package/dist/shadertypes/texture-types/texture-format-table.js +2 -2
- package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -1
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -1
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js +41 -3
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -1
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts +6 -6
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/adapter/device.ts +4 -2
- package/src/adapter/luma.ts +1 -0
- package/src/factories/bind-group-factory.ts +23 -5
- package/src/index.ts +7 -1
- package/src/portable/shader-block-writer.ts +254 -0
- package/src/portable/uniform-store.ts +92 -37
- package/src/shadertypes/data-types/data-type-decoder.ts +2 -2
- package/src/shadertypes/data-types/decode-data-types.ts +2 -2
- package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
- package/src/shadertypes/shader-types/shader-types.ts +5 -5
- package/src/shadertypes/texture-types/texture-format-decoder.ts +1 -1
- package/src/shadertypes/texture-types/texture-format-table.ts +2 -2
- package/src/shadertypes/vertex-types/vertex-format-decoder.ts +47 -3
- package/src/shadertypes/vertex-types/vertex-formats.ts +18 -5
- package/dist/portable/uniform-buffer-layout.d.ts +0 -42
- package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
- package/dist/portable/uniform-buffer-layout.js +0 -274
- package/dist/portable/uniform-buffer-layout.js.map +0 -1
- package/src/portable/uniform-buffer-layout.ts +0 -384
package/dist/index.d.ts
CHANGED
|
@@ -45,7 +45,8 @@ export { QuerySet } from "./adapter/resources/query-set.js";
|
|
|
45
45
|
export { Fence, type FenceProps } from "./adapter/resources/fence.js";
|
|
46
46
|
export type { PipelineLayoutProps } from "./adapter/resources/pipeline-layout.js";
|
|
47
47
|
export { PipelineLayout } from "./adapter/resources/pipeline-layout.js";
|
|
48
|
-
export {
|
|
48
|
+
export { makeShaderBlockLayout, type ShaderBlockLayout, type ShaderBlockLayoutEntry, type ShaderBlockLayoutOptions } from "./shadertypes/shader-types/shader-block-layout.js";
|
|
49
|
+
export { ShaderBlockWriter } from "./portable/shader-block-writer.js";
|
|
49
50
|
export { UniformBlock } from "./portable/uniform-block.js";
|
|
50
51
|
export { UniformStore } from "./portable/uniform-store.js";
|
|
51
52
|
export type { CompilerMessage } from "./adapter/types/compiler-message.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,0BAAuB;AACzE,OAAO,EAAC,IAAI,EAAC,0BAAuB;AAGpC,OAAO,EAAC,OAAO,EAAC,6BAA0B;AAE1C,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,+BAA+B,EAChC,4BAAyB;AAC1B,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAC,4BAAyB;AAEtE,YAAY,EAAC,kBAAkB,EAAC,oCAAiC;AACjE,OAAO,EAAC,aAAa,EAAC,oCAAiC;AACvD,YAAY,EAAC,wBAAwB,EAAC,0CAAuC;AAC7E,OAAO,EAAC,mBAAmB,EAAC,0CAAuC;AAGnE,OAAO,EAAC,QAAQ,EAAE,KAAK,aAAa,EAAC,wCAAqC;AAE1E,OAAO,EAAC,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAC,sCAAmC;AAE5F,OAAO,EAAC,OAAO,EAAE,KAAK,YAAY,EAAC,uCAAoC;AAEvE,OAAO,EAAC,WAAW,EAAE,KAAK,gBAAgB,EAAC,4CAAyC;AAEpF,YAAY,EAAC,oBAAoB,EAAC,gDAA6C;AAC/E,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAErE,YAAY,EAAC,WAAW,EAAC,sCAAmC;AAC5D,OAAO,EAAC,MAAM,EAAC,sCAAmC;AAElD,YAAY,EAAC,YAAY,EAAE,iBAAiB,EAAC,uCAAoC;AACjF,OAAO,EAAC,OAAO,EAAC,uCAAoC;AAEpD,YAAY,EAAC,gBAAgB,EAAC,2CAAwC;AACtE,OAAO,EAAC,WAAW,EAAC,2CAAwC;AAE5D,YAAY,EAAC,mBAAmB,EAAC,+CAA4C;AAC7E,OAAO,EAAC,cAAc,EAAC,+CAA4C;AACnE,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC/B,sDAAmD;AACpD,YAAY,EAAC,oBAAoB,EAAC,wCAAqC;AACvE,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAC7D,OAAO,EAAC,aAAa,EAAC,sCAAmC;AACzD,OAAO,EAAC,2BAA2B,EAAC,0CAAuC;AAE3E,YAAY,EAAC,eAAe,EAAC,2CAAwC;AACrE,OAAO,EAAC,UAAU,EAAC,2CAAwC;AAE3D,YAAY,EAAC,oBAAoB,EAAC,gDAA6C;AAC/E,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAErE,YAAY,EAAC,gBAAgB,EAAC,4CAAyC;AACvE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAE7D,YAAY,EAAC,mBAAmB,EAAC,+CAA4C;AAC7E,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAEnE,YAAY,EAAC,kBAAkB,EAAC,8CAA2C;AAC3E,OAAO,EAAC,aAAa,EAAC,8CAA2C;AAEjE,YAAY,EAAC,gBAAgB,EAAC,4CAAyC;AACvE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAE7D,YAAY,EAAC,sBAAsB,EAAE,WAAW,EAAC,kDAA+C;AAChG,OAAO,EAAC,iBAAiB,EAAC,kDAA+C;AAEzE,YAAY,EAAC,aAAa,EAAC,yCAAsC;AACjE,OAAO,EAAC,QAAQ,EAAC,yCAAsC;AAEvD,OAAO,EAAC,KAAK,EAAE,KAAK,UAAU,EAAC,qCAAkC;AAEjE,YAAY,EAAC,mBAAmB,EAAC,+CAA4C;AAC7E,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAGnE,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -32,7 +32,8 @@ export { QuerySet } from "./adapter/resources/query-set.js";
|
|
|
32
32
|
export { Fence } from "./adapter/resources/fence.js";
|
|
33
33
|
export { PipelineLayout } from "./adapter/resources/pipeline-layout.js";
|
|
34
34
|
// PORTABLE API - UNIFORM BUFFERS
|
|
35
|
-
export {
|
|
35
|
+
export { makeShaderBlockLayout } from "./shadertypes/shader-types/shader-block-layout.js";
|
|
36
|
+
export { ShaderBlockWriter } from "./portable/shader-block-writer.js";
|
|
36
37
|
export { UniformBlock } from "./portable/uniform-block.js";
|
|
37
38
|
export { UniformStore } from "./portable/uniform-store.js";
|
|
38
39
|
export { dataTypeDecoder } from "./shadertypes/data-types/data-type-decoder.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,IAAI,EAAC,0BAAuB;AAEpC,+CAA+C;AAC/C,OAAO,EAAC,OAAO,EAAC,6BAA0B;AAQ1C,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAC,4BAAyB;AAGtE,OAAO,EAAC,aAAa,EAAC,oCAAiC;AAEvD,OAAO,EAAC,mBAAmB,EAAC,0CAAuC;AAEnE,gBAAgB;AAChB,OAAO,EAAC,QAAQ,EAAqB,wCAAqC;AAE1E,OAAO,EAAC,MAAM,EAA2C,sCAAmC;AAE5F,OAAO,EAAC,OAAO,EAAoB,uCAAoC;AAEvE,OAAO,EAAC,WAAW,EAAwB,4CAAyC;AAGpF,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,MAAM,EAAC,sCAAmC;AAGlD,OAAO,EAAC,OAAO,EAAC,uCAAoC;AAGpD,OAAO,EAAC,WAAW,EAAC,2CAAwC;AAG5D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AACnE,OAAO,EACL,oBAAoB,EAErB,sDAAmD;AAEpD,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAC7D,OAAO,EAAC,aAAa,EAAC,sCAAmC;AACzD,OAAO,EAAC,2BAA2B,EAAC,0CAAuC;AAG3E,OAAO,EAAC,UAAU,EAAC,2CAAwC;AAG3D,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAGnE,OAAO,EAAC,aAAa,EAAC,8CAA2C;AAGjE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,iBAAiB,EAAC,kDAA+C;AAGzE,OAAO,EAAC,QAAQ,EAAC,yCAAsC;AAEvD,OAAO,EAAC,KAAK,EAAkB,qCAAkC;AAGjE,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAEnE,iCAAiC;AACjC,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,IAAI,EAAC,0BAAuB;AAEpC,+CAA+C;AAC/C,OAAO,EAAC,OAAO,EAAC,6BAA0B;AAQ1C,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAC,4BAAyB;AAGtE,OAAO,EAAC,aAAa,EAAC,oCAAiC;AAEvD,OAAO,EAAC,mBAAmB,EAAC,0CAAuC;AAEnE,gBAAgB;AAChB,OAAO,EAAC,QAAQ,EAAqB,wCAAqC;AAE1E,OAAO,EAAC,MAAM,EAA2C,sCAAmC;AAE5F,OAAO,EAAC,OAAO,EAAoB,uCAAoC;AAEvE,OAAO,EAAC,WAAW,EAAwB,4CAAyC;AAGpF,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,MAAM,EAAC,sCAAmC;AAGlD,OAAO,EAAC,OAAO,EAAC,uCAAoC;AAGpD,OAAO,EAAC,WAAW,EAAC,2CAAwC;AAG5D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AACnE,OAAO,EACL,oBAAoB,EAErB,sDAAmD;AAEpD,OAAO,EAAC,eAAe,EAAC,wCAAqC;AAC7D,OAAO,EAAC,aAAa,EAAC,sCAAmC;AACzD,OAAO,EAAC,2BAA2B,EAAC,0CAAuC;AAG3E,OAAO,EAAC,UAAU,EAAC,2CAAwC;AAG3D,OAAO,EAAC,eAAe,EAAC,gDAA6C;AAGrE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAGnE,OAAO,EAAC,aAAa,EAAC,8CAA2C;AAGjE,OAAO,EAAC,WAAW,EAAC,4CAAyC;AAG7D,OAAO,EAAC,iBAAiB,EAAC,kDAA+C;AAGzE,OAAO,EAAC,QAAQ,EAAC,yCAAsC;AAEvD,OAAO,EAAC,KAAK,EAAkB,qCAAkC;AAGjE,OAAO,EAAC,cAAc,EAAC,+CAA4C;AAEnE,iCAAiC;AACjC,OAAO,EACL,qBAAqB,EAItB,0DAAuD;AACxD,OAAO,EAAC,iBAAiB,EAAC,0CAAuC;AACjE,OAAO,EAAC,YAAY,EAAC,oCAAiC;AACtD,OAAO,EAAC,YAAY,EAAC,oCAAiC;AAwFtD,OAAO,EAAC,eAAe,EAAC,sDAAmD;AAC3E,OAAO,EAAC,wBAAwB,EAAC,sDAAmD;AAWpF,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EAE1B,0DAAuD;AASxD,OAAO,EAAC,mBAAmB,EAAC,4DAAyD;AAgBrF,OAAO,EAEL,oBAAoB,EACrB,8DAA2D;AAE5D,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAC,sDAAmD;AACpG,OAAO,EAAiB,SAAS,EAAE,UAAU,EAAC,mDAAgD;AAE9F,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,iDAA8C;AAe5F,yDAAyD;AACzD,OAAO,EAAC,GAAG,EAAC,uBAAoB;AAChC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACvB,uCAAoC;AACrC,OAAO,EAAC,MAAM,EAAE,aAAa,EAAC,0BAAuB;AACrD,OAAO,EAAC,eAAe,EAAC,oCAAiC;AAEzD,OAAO,EAAC,4BAA4B,EAAC,sDAAmD;AAExF,eAAe;AACf,OAAO,EACL,0BAA0B,IAAI,2BAA2B,EACzD,qBAAqB,IAAI,sBAAsB,EAChD,4DAAyD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CompositeUniformValue, UniformValue } from "../adapter/types/uniforms.js";
|
|
2
|
+
import { type ShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
|
|
3
|
+
/**
|
|
4
|
+
* Serializes nested JavaScript uniform values according to a {@link ShaderBlockLayout}.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ShaderBlockWriter {
|
|
7
|
+
/** Layout metadata used to flatten and serialize values. */
|
|
8
|
+
readonly layout: ShaderBlockLayout;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a writer for a precomputed shader-block layout.
|
|
11
|
+
*/
|
|
12
|
+
constructor(layout: ShaderBlockLayout);
|
|
13
|
+
/**
|
|
14
|
+
* Returns `true` if the flattened layout contains the given field.
|
|
15
|
+
*/
|
|
16
|
+
has(name: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Returns offset and size metadata for a flattened field.
|
|
19
|
+
*/
|
|
20
|
+
get(name: string): {
|
|
21
|
+
offset: number;
|
|
22
|
+
size: number;
|
|
23
|
+
} | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Flattens nested composite values into leaf-path values understood by {@link UniformBlock}.
|
|
26
|
+
*
|
|
27
|
+
* Top-level values may be supplied either in nested object form matching the
|
|
28
|
+
* declared composite shader types or as already-flattened leaf-path values.
|
|
29
|
+
*/
|
|
30
|
+
getFlatUniformValues(uniformValues: Readonly<Record<string, CompositeUniformValue>>): Record<string, UniformValue>;
|
|
31
|
+
/**
|
|
32
|
+
* Serializes the supplied values into buffer-backed binary data.
|
|
33
|
+
*
|
|
34
|
+
* The returned view length matches {@link ShaderBlockLayout.byteLength}, which
|
|
35
|
+
* is the exact packed size of the block.
|
|
36
|
+
*/
|
|
37
|
+
getData(uniformValues: Readonly<Record<string, CompositeUniformValue>>): Uint8Array;
|
|
38
|
+
/**
|
|
39
|
+
* Recursively flattens nested values using the declared composite shader type.
|
|
40
|
+
*/
|
|
41
|
+
private _flattenCompositeValue;
|
|
42
|
+
/**
|
|
43
|
+
* Expands tightly packed numeric arrays into per-element leaf fields.
|
|
44
|
+
*/
|
|
45
|
+
private _flattenPackedArray;
|
|
46
|
+
/**
|
|
47
|
+
* Writes one flattened leaf value into its typed-array view.
|
|
48
|
+
*/
|
|
49
|
+
private _writeLeafValue;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=shader-block-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-block-writer.d.ts","sourceRoot":"","sources":["../../src/portable/shader-block-writer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,qBAAqB,EAAE,YAAY,EAAC,qCAAkC;AAQnF,OAAO,EAGL,KAAK,iBAAiB,EACvB,2DAAwD;AAEzD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC;;OAEG;gBACS,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS;IAK7D;;;;;OAKG;IACH,oBAAoB,CAClB,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,GAC7D,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAe/B;;;;;OAKG;IACH,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,GAAG,UAAU;IAkBnF;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgE9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,eAAe;CAoCxB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { getScratchArrayBuffer } from "../utils/array-utils-flat.js";
|
|
5
|
+
import { isNumberArray } from "../utils/is-array.js";
|
|
6
|
+
import { log } from "../utils/log.js";
|
|
7
|
+
import { getLeafLayoutInfo, isCompositeShaderTypeStruct } from "../shadertypes/shader-types/shader-block-layout.js";
|
|
8
|
+
/**
|
|
9
|
+
* Serializes nested JavaScript uniform values according to a {@link ShaderBlockLayout}.
|
|
10
|
+
*/
|
|
11
|
+
export class ShaderBlockWriter {
|
|
12
|
+
/** Layout metadata used to flatten and serialize values. */
|
|
13
|
+
layout;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a writer for a precomputed shader-block layout.
|
|
16
|
+
*/
|
|
17
|
+
constructor(layout) {
|
|
18
|
+
this.layout = layout;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns `true` if the flattened layout contains the given field.
|
|
22
|
+
*/
|
|
23
|
+
has(name) {
|
|
24
|
+
return Boolean(this.layout.fields[name]);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns offset and size metadata for a flattened field.
|
|
28
|
+
*/
|
|
29
|
+
get(name) {
|
|
30
|
+
const entry = this.layout.fields[name];
|
|
31
|
+
return entry ? { offset: entry.offset, size: entry.size } : undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Flattens nested composite values into leaf-path values understood by {@link UniformBlock}.
|
|
35
|
+
*
|
|
36
|
+
* Top-level values may be supplied either in nested object form matching the
|
|
37
|
+
* declared composite shader types or as already-flattened leaf-path values.
|
|
38
|
+
*/
|
|
39
|
+
getFlatUniformValues(uniformValues) {
|
|
40
|
+
const flattenedUniformValues = {};
|
|
41
|
+
for (const [name, value] of Object.entries(uniformValues)) {
|
|
42
|
+
const uniformType = this.layout.uniformTypes[name];
|
|
43
|
+
if (uniformType) {
|
|
44
|
+
this._flattenCompositeValue(flattenedUniformValues, name, uniformType, value);
|
|
45
|
+
}
|
|
46
|
+
else if (this.layout.fields[name]) {
|
|
47
|
+
flattenedUniformValues[name] = value;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return flattenedUniformValues;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Serializes the supplied values into buffer-backed binary data.
|
|
54
|
+
*
|
|
55
|
+
* The returned view length matches {@link ShaderBlockLayout.byteLength}, which
|
|
56
|
+
* is the exact packed size of the block.
|
|
57
|
+
*/
|
|
58
|
+
getData(uniformValues) {
|
|
59
|
+
const buffer = getScratchArrayBuffer(this.layout.byteLength);
|
|
60
|
+
new Uint8Array(buffer, 0, this.layout.byteLength).fill(0);
|
|
61
|
+
const typedArrays = {
|
|
62
|
+
i32: new Int32Array(buffer),
|
|
63
|
+
u32: new Uint32Array(buffer),
|
|
64
|
+
f32: new Float32Array(buffer),
|
|
65
|
+
f16: new Uint16Array(buffer)
|
|
66
|
+
};
|
|
67
|
+
const flattenedUniformValues = this.getFlatUniformValues(uniformValues);
|
|
68
|
+
for (const [name, value] of Object.entries(flattenedUniformValues)) {
|
|
69
|
+
this._writeLeafValue(typedArrays, name, value);
|
|
70
|
+
}
|
|
71
|
+
return new Uint8Array(buffer, 0, this.layout.byteLength);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Recursively flattens nested values using the declared composite shader type.
|
|
75
|
+
*/
|
|
76
|
+
_flattenCompositeValue(flattenedUniformValues, baseName, uniformType, value) {
|
|
77
|
+
if (value === undefined) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (typeof uniformType === 'string' || this.layout.fields[baseName]) {
|
|
81
|
+
flattenedUniformValues[baseName] = value;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (Array.isArray(uniformType)) {
|
|
85
|
+
const elementType = uniformType[0];
|
|
86
|
+
const length = uniformType[1];
|
|
87
|
+
if (Array.isArray(elementType)) {
|
|
88
|
+
throw new Error(`Nested arrays are not supported for ${baseName}`);
|
|
89
|
+
}
|
|
90
|
+
if (typeof elementType === 'string' && isNumberArray(value)) {
|
|
91
|
+
this._flattenPackedArray(flattenedUniformValues, baseName, elementType, length, value);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (!Array.isArray(value)) {
|
|
95
|
+
log.warn(`Unsupported uniform array value for ${baseName}:`, value)();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
for (let index = 0; index < Math.min(value.length, length); index++) {
|
|
99
|
+
const elementValue = value[index];
|
|
100
|
+
if (elementValue === undefined) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
this._flattenCompositeValue(flattenedUniformValues, `${baseName}[${index}]`, elementType, elementValue);
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (isCompositeShaderTypeStruct(uniformType) && isCompositeUniformObject(value)) {
|
|
108
|
+
for (const [key, subValue] of Object.entries(value)) {
|
|
109
|
+
if (subValue === undefined) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const nestedName = `${baseName}.${key}`;
|
|
113
|
+
this._flattenCompositeValue(flattenedUniformValues, nestedName, uniformType[key], subValue);
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
log.warn(`Unsupported uniform value for ${baseName}:`, value)();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Expands tightly packed numeric arrays into per-element leaf fields.
|
|
121
|
+
*/
|
|
122
|
+
_flattenPackedArray(flattenedUniformValues, baseName, elementType, length, value) {
|
|
123
|
+
const numericValue = value;
|
|
124
|
+
const elementLayout = getLeafLayoutInfo(elementType, this.layout.layout);
|
|
125
|
+
const packedElementLength = elementLayout.components;
|
|
126
|
+
for (let index = 0; index < length; index++) {
|
|
127
|
+
const start = index * packedElementLength;
|
|
128
|
+
if (start >= numericValue.length) {
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
if (packedElementLength === 1) {
|
|
132
|
+
flattenedUniformValues[`${baseName}[${index}]`] = Number(numericValue[start]);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
flattenedUniformValues[`${baseName}[${index}]`] = sliceNumericArray(value, start, start + packedElementLength);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Writes one flattened leaf value into its typed-array view.
|
|
141
|
+
*/
|
|
142
|
+
_writeLeafValue(typedArrays, name, value) {
|
|
143
|
+
const entry = this.layout.fields[name];
|
|
144
|
+
if (!entry) {
|
|
145
|
+
log.warn(`Uniform ${name} not found in layout`)();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const { type, components, columns, rows, offset, columnStride } = entry;
|
|
149
|
+
const array = typedArrays[type];
|
|
150
|
+
if (components === 1) {
|
|
151
|
+
array[offset] = Number(value);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const sourceValue = value;
|
|
155
|
+
if (columns === 1) {
|
|
156
|
+
for (let componentIndex = 0; componentIndex < components; componentIndex++) {
|
|
157
|
+
array[offset + componentIndex] = Number(sourceValue[componentIndex] ?? 0);
|
|
158
|
+
}
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
let sourceIndex = 0;
|
|
162
|
+
for (let columnIndex = 0; columnIndex < columns; columnIndex++) {
|
|
163
|
+
const columnOffset = offset + columnIndex * columnStride;
|
|
164
|
+
for (let rowIndex = 0; rowIndex < rows; rowIndex++) {
|
|
165
|
+
array[columnOffset + rowIndex] = Number(sourceValue[sourceIndex++] ?? 0);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Type guard for nested uniform objects.
|
|
172
|
+
*/
|
|
173
|
+
function isCompositeUniformObject(value) {
|
|
174
|
+
return (Boolean(value) &&
|
|
175
|
+
typeof value === 'object' &&
|
|
176
|
+
!Array.isArray(value) &&
|
|
177
|
+
!ArrayBuffer.isView(value));
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Slices a numeric array-like value without changing its numeric representation.
|
|
181
|
+
*/
|
|
182
|
+
function sliceNumericArray(value, start, end) {
|
|
183
|
+
return Array.prototype.slice.call(value, start, end);
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=shader-block-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-block-writer.js","sourceRoot":"","sources":["../../src/portable/shader-block-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,22 @@ import type { CompositeShaderType } from "../shadertypes/shader-types/shader-typ
|
|
|
2
2
|
import type { CompositeUniformValue } from "../adapter/types/uniforms.js";
|
|
3
3
|
import type { Device } from "../adapter/device.js";
|
|
4
4
|
import { Buffer } from "../adapter/resources/buffer.js";
|
|
5
|
+
import { type ShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
|
|
5
6
|
import { UniformBlock } from "./uniform-block.js";
|
|
6
|
-
import {
|
|
7
|
+
import { ShaderBlockWriter } from "./shader-block-writer.js";
|
|
8
|
+
/** Definition of a single managed uniform block. */
|
|
9
|
+
export type UniformStoreBlockDefinition = {
|
|
10
|
+
/** Declared shader types for the block's uniforms. */
|
|
11
|
+
uniformTypes?: Record<string, CompositeShaderType>;
|
|
12
|
+
/** Reserved for future prop-level defaults. */
|
|
13
|
+
defaultProps?: Record<string, unknown>;
|
|
14
|
+
/** Initial uniform values written into the backing block. */
|
|
15
|
+
defaultUniforms?: Record<string, CompositeUniformValue>;
|
|
16
|
+
/** Explicit shader-block layout override. */
|
|
17
|
+
layout?: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
|
|
18
|
+
};
|
|
19
|
+
/** Uniform block definitions keyed by block name. */
|
|
20
|
+
export type UniformStoreBlocks<TPropGroups extends Record<string, Record<string, unknown>>> = Record<keyof TPropGroups, UniformStoreBlockDefinition>;
|
|
7
21
|
/**
|
|
8
22
|
* A uniform store holds a uniform values for one or more uniform blocks,
|
|
9
23
|
* - It can generate binary data for any uniform buffer
|
|
@@ -12,46 +26,64 @@ import { UniformBufferLayout } from "./uniform-buffer-layout.js";
|
|
|
12
26
|
* - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.
|
|
13
27
|
*/
|
|
14
28
|
export declare class UniformStore<TPropGroups extends Record<string, Record<string, unknown>> = Record<string, Record<string, unknown>>> {
|
|
29
|
+
/** Device used to infer layout and allocate buffers. */
|
|
30
|
+
readonly device: Device;
|
|
15
31
|
/** Stores the uniform values for each uniform block */
|
|
16
32
|
uniformBlocks: Map<keyof TPropGroups, UniformBlock<Record<string, import("../adapter/types/uniforms").UniformValue>>>;
|
|
17
|
-
/**
|
|
18
|
-
|
|
33
|
+
/** Flattened layout metadata for each block. */
|
|
34
|
+
shaderBlockLayouts: Map<keyof TPropGroups, ShaderBlockLayout>;
|
|
35
|
+
/** Serializers for block-backed uniform data. */
|
|
36
|
+
shaderBlockWriters: Map<keyof TPropGroups, ShaderBlockWriter>;
|
|
19
37
|
/** Actual buffer for the blocks */
|
|
20
38
|
uniformBuffers: Map<keyof TPropGroups, Buffer>;
|
|
21
39
|
/**
|
|
22
|
-
*
|
|
23
|
-
* @param blocks
|
|
40
|
+
* Creates a new {@link UniformStore} for the supplied device and block definitions.
|
|
24
41
|
*/
|
|
25
|
-
constructor(blocks:
|
|
26
|
-
uniformTypes?: Record<string, CompositeShaderType>;
|
|
27
|
-
defaultProps?: Record<string, unknown>;
|
|
28
|
-
defaultUniforms?: Record<string, CompositeUniformValue>;
|
|
29
|
-
}>);
|
|
42
|
+
constructor(device: Device, blocks: UniformStoreBlocks<TPropGroups>);
|
|
30
43
|
/** Destroy any managed uniform buffers */
|
|
31
44
|
destroy(): void;
|
|
32
45
|
/**
|
|
33
46
|
* Set uniforms
|
|
34
|
-
*
|
|
47
|
+
*
|
|
48
|
+
* Makes all group properties partial and eagerly propagates changes to any
|
|
49
|
+
* managed GPU buffers.
|
|
35
50
|
*/
|
|
36
51
|
setUniforms(uniforms: Partial<{
|
|
37
52
|
[group in keyof TPropGroups]: Partial<TPropGroups[group]>;
|
|
38
53
|
}>): void;
|
|
39
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Returns the allocation size for the named uniform buffer.
|
|
56
|
+
*
|
|
57
|
+
* This may exceed the packed layout size because minimum buffer-size policy is
|
|
58
|
+
* applied at the store layer.
|
|
59
|
+
*/
|
|
40
60
|
getUniformBufferByteLength(uniformBufferName: keyof TPropGroups): number;
|
|
41
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Returns packed binary data that can be uploaded to the named uniform buffer.
|
|
63
|
+
*
|
|
64
|
+
* The returned view length matches the packed block size and is not padded to
|
|
65
|
+
* the store's minimum allocation size.
|
|
66
|
+
*/
|
|
42
67
|
getUniformBufferData(uniformBufferName: keyof TPropGroups): Uint8Array;
|
|
43
68
|
/**
|
|
44
|
-
* Creates an unmanaged uniform buffer
|
|
45
|
-
* The new buffer is initialized with current / supplied values
|
|
69
|
+
* Creates an unmanaged uniform buffer initialized with the current or supplied values.
|
|
46
70
|
*/
|
|
47
|
-
createUniformBuffer(
|
|
71
|
+
createUniformBuffer(uniformBufferName: keyof TPropGroups, uniforms?: Partial<{
|
|
48
72
|
[group in keyof TPropGroups]: Partial<TPropGroups[group]>;
|
|
49
73
|
}>): Buffer;
|
|
50
|
-
/**
|
|
51
|
-
getManagedUniformBuffer(
|
|
52
|
-
/**
|
|
74
|
+
/** Returns the managed uniform buffer for the named block. */
|
|
75
|
+
getManagedUniformBuffer(uniformBufferName: keyof TPropGroups): Buffer;
|
|
76
|
+
/**
|
|
77
|
+
* Updates every managed uniform buffer whose source uniforms have changed.
|
|
78
|
+
*
|
|
79
|
+
* @returns The first redraw reason encountered, or `false` if nothing changed.
|
|
80
|
+
*/
|
|
53
81
|
updateUniformBuffers(): false | string;
|
|
54
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* Updates one managed uniform buffer if its corresponding block is dirty.
|
|
84
|
+
*
|
|
85
|
+
* @returns The redraw reason for the update, or `false` if no write occurred.
|
|
86
|
+
*/
|
|
55
87
|
updateUniformBuffer(uniformBufferName: keyof TPropGroups): false | string;
|
|
56
88
|
}
|
|
57
89
|
//# sourceMappingURL=uniform-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-store.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAC,oDAAiD;AAClF,OAAO,KAAK,EAAC,qBAAqB,EAAC,qCAAkC;AACrE,OAAO,KAAK,EAAC,MAAM,EAAC,6BAA0B;AAC9C,OAAO,EAAC,MAAM,EAAC,uCAAoC;AAEnD,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"uniform-store.d.ts","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAC,oDAAiD;AAClF,OAAO,KAAK,EAAC,qBAAqB,EAAC,qCAAkC;AACrE,OAAO,KAAK,EAAC,MAAM,EAAC,6BAA0B;AAC9C,OAAO,EAAC,MAAM,EAAC,uCAAoC;AAEnD,OAAO,EAEL,KAAK,iBAAiB,EACvB,2DAAwD;AACzD,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD,oDAAoD;AACpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnD,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxD,6CAA6C;IAC7C,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;CACrD,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IACxF,MAAM,CAAC,MAAM,WAAW,EAAE,2BAA2B,CAAC,CAAC;AAazD;;;;;;GAMG;AACH,qBAAa,YAAY,CACvB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAClE,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxB;IAED,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,aAAa,yGAA8C;IAC3D,gDAAgD;IAChD,kBAAkB,4CAAmD;IACrE,iDAAiD;IACjD,kBAAkB,4CAAmD;IACrE,mCAAmC;IACnC,cAAc,iCAAwC;IAEtD;;OAEG;gBACS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,WAAW,CAAC;IAqBnE,0CAA0C;IAC1C,OAAO,IAAI,IAAI;IAMf;;;;;OAKG;IACH,WAAW,CACT,QAAQ,EAAE,OAAO,CAAC;SAAE,KAAK,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAAC,CAAC,GAC7E,IAAI;IAeP;;;;;OAKG;IACH,0BAA0B,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,MAAM;IAKxE;;;;;OAKG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,UAAU;IAMtE;;OAEG;IACH,mBAAmB,CACjB,iBAAiB,EAAE,MAAM,WAAW,EACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;SAAE,KAAK,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAAC,CAAC,GAC9E,MAAM;IAeT,8DAA8D;IAC9D,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,MAAM;IAcrE;;;;OAIG;IACH,oBAAoB,IAAI,KAAK,GAAG,MAAM;IAYtC;;;;OAIG;IACH,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM;CAwB1E"}
|
|
@@ -3,8 +3,19 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
import { Buffer } from "../adapter/resources/buffer.js";
|
|
5
5
|
import { log } from "../utils/log.js";
|
|
6
|
+
import { makeShaderBlockLayout } from "../shadertypes/shader-types/shader-block-layout.js";
|
|
6
7
|
import { UniformBlock } from "./uniform-block.js";
|
|
7
|
-
import {
|
|
8
|
+
import { ShaderBlockWriter } from "./shader-block-writer.js";
|
|
9
|
+
/**
|
|
10
|
+
* Smallest buffer size that can be used for uniform buffers.
|
|
11
|
+
*
|
|
12
|
+
* This is an allocation policy rather than part of {@link ShaderBlockLayout}.
|
|
13
|
+
* Layouts report the exact packed size, while the store applies any minimum
|
|
14
|
+
* buffer-size rule when allocating GPU buffers.
|
|
15
|
+
*
|
|
16
|
+
* TODO - does this depend on device?
|
|
17
|
+
*/
|
|
18
|
+
const minUniformBufferSize = 1024;
|
|
8
19
|
/**
|
|
9
20
|
* A uniform store holds a uniform values for one or more uniform blocks,
|
|
10
21
|
* - It can generate binary data for any uniform buffer
|
|
@@ -13,25 +24,33 @@ import { UniformBufferLayout } from "./uniform-buffer-layout.js";
|
|
|
13
24
|
* - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.
|
|
14
25
|
*/
|
|
15
26
|
export class UniformStore {
|
|
27
|
+
/** Device used to infer layout and allocate buffers. */
|
|
28
|
+
device;
|
|
16
29
|
/** Stores the uniform values for each uniform block */
|
|
17
30
|
uniformBlocks = new Map();
|
|
18
|
-
/**
|
|
19
|
-
|
|
31
|
+
/** Flattened layout metadata for each block. */
|
|
32
|
+
shaderBlockLayouts = new Map();
|
|
33
|
+
/** Serializers for block-backed uniform data. */
|
|
34
|
+
shaderBlockWriters = new Map();
|
|
20
35
|
/** Actual buffer for the blocks */
|
|
21
36
|
uniformBuffers = new Map();
|
|
22
37
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param blocks
|
|
38
|
+
* Creates a new {@link UniformStore} for the supplied device and block definitions.
|
|
25
39
|
*/
|
|
26
|
-
constructor(blocks) {
|
|
40
|
+
constructor(device, blocks) {
|
|
41
|
+
this.device = device;
|
|
27
42
|
for (const [bufferName, block] of Object.entries(blocks)) {
|
|
28
43
|
const uniformBufferName = bufferName;
|
|
29
44
|
// Create a layout object to help us generate correctly formatted binary uniform buffers
|
|
30
|
-
const
|
|
31
|
-
|
|
45
|
+
const shaderBlockLayout = makeShaderBlockLayout(block.uniformTypes ?? {}, {
|
|
46
|
+
layout: block.layout ?? getDefaultUniformBufferLayout(device)
|
|
47
|
+
});
|
|
48
|
+
const shaderBlockWriter = new ShaderBlockWriter(shaderBlockLayout);
|
|
49
|
+
this.shaderBlockLayouts.set(uniformBufferName, shaderBlockLayout);
|
|
50
|
+
this.shaderBlockWriters.set(uniformBufferName, shaderBlockWriter);
|
|
32
51
|
// Create a Uniform block to store the uniforms for each buffer.
|
|
33
52
|
const uniformBlock = new UniformBlock({ name: bufferName });
|
|
34
|
-
uniformBlock.setUniforms(
|
|
53
|
+
uniformBlock.setUniforms(shaderBlockWriter.getFlatUniformValues(block.defaultUniforms || {}));
|
|
35
54
|
this.uniformBlocks.set(uniformBufferName, uniformBlock);
|
|
36
55
|
}
|
|
37
56
|
}
|
|
@@ -43,39 +62,51 @@ export class UniformStore {
|
|
|
43
62
|
}
|
|
44
63
|
/**
|
|
45
64
|
* Set uniforms
|
|
46
|
-
*
|
|
65
|
+
*
|
|
66
|
+
* Makes all group properties partial and eagerly propagates changes to any
|
|
67
|
+
* managed GPU buffers.
|
|
47
68
|
*/
|
|
48
69
|
setUniforms(uniforms) {
|
|
49
70
|
for (const [blockName, uniformValues] of Object.entries(uniforms)) {
|
|
50
71
|
const uniformBufferName = blockName;
|
|
51
|
-
const
|
|
52
|
-
const flattenedUniforms =
|
|
72
|
+
const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
|
|
73
|
+
const flattenedUniforms = shaderBlockWriter?.getFlatUniformValues((uniformValues || {}));
|
|
53
74
|
this.uniformBlocks.get(uniformBufferName)?.setUniforms(flattenedUniforms || {});
|
|
54
75
|
// We leverage logging in updateUniformBuffers(), even though slightly less efficient
|
|
55
76
|
// this.updateUniformBuffer(blockName);
|
|
56
77
|
}
|
|
57
78
|
this.updateUniformBuffers();
|
|
58
79
|
}
|
|
59
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Returns the allocation size for the named uniform buffer.
|
|
82
|
+
*
|
|
83
|
+
* This may exceed the packed layout size because minimum buffer-size policy is
|
|
84
|
+
* applied at the store layer.
|
|
85
|
+
*/
|
|
60
86
|
getUniformBufferByteLength(uniformBufferName) {
|
|
61
|
-
|
|
87
|
+
const packedByteLength = this.shaderBlockLayouts.get(uniformBufferName)?.byteLength || 0;
|
|
88
|
+
return Math.max(packedByteLength, minUniformBufferSize);
|
|
62
89
|
}
|
|
63
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Returns packed binary data that can be uploaded to the named uniform buffer.
|
|
92
|
+
*
|
|
93
|
+
* The returned view length matches the packed block size and is not padded to
|
|
94
|
+
* the store's minimum allocation size.
|
|
95
|
+
*/
|
|
64
96
|
getUniformBufferData(uniformBufferName) {
|
|
65
97
|
const uniformValues = this.uniformBlocks.get(uniformBufferName)?.getAllUniforms() || {};
|
|
66
|
-
|
|
67
|
-
return
|
|
98
|
+
const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
|
|
99
|
+
return shaderBlockWriter?.getData(uniformValues) || new Uint8Array(0);
|
|
68
100
|
}
|
|
69
101
|
/**
|
|
70
|
-
* Creates an unmanaged uniform buffer
|
|
71
|
-
* The new buffer is initialized with current / supplied values
|
|
102
|
+
* Creates an unmanaged uniform buffer initialized with the current or supplied values.
|
|
72
103
|
*/
|
|
73
|
-
createUniformBuffer(
|
|
104
|
+
createUniformBuffer(uniformBufferName, uniforms) {
|
|
74
105
|
if (uniforms) {
|
|
75
106
|
this.setUniforms(uniforms);
|
|
76
107
|
}
|
|
77
108
|
const byteLength = this.getUniformBufferByteLength(uniformBufferName);
|
|
78
|
-
const uniformBuffer = device.createBuffer({
|
|
109
|
+
const uniformBuffer = this.device.createBuffer({
|
|
79
110
|
usage: Buffer.UNIFORM | Buffer.COPY_DST,
|
|
80
111
|
byteLength
|
|
81
112
|
});
|
|
@@ -84,11 +115,11 @@ export class UniformStore {
|
|
|
84
115
|
uniformBuffer.write(uniformBufferData);
|
|
85
116
|
return uniformBuffer;
|
|
86
117
|
}
|
|
87
|
-
/**
|
|
88
|
-
getManagedUniformBuffer(
|
|
118
|
+
/** Returns the managed uniform buffer for the named block. */
|
|
119
|
+
getManagedUniformBuffer(uniformBufferName) {
|
|
89
120
|
if (!this.uniformBuffers.get(uniformBufferName)) {
|
|
90
121
|
const byteLength = this.getUniformBufferByteLength(uniformBufferName);
|
|
91
|
-
const uniformBuffer = device.createBuffer({
|
|
122
|
+
const uniformBuffer = this.device.createBuffer({
|
|
92
123
|
usage: Buffer.UNIFORM | Buffer.COPY_DST,
|
|
93
124
|
byteLength
|
|
94
125
|
});
|
|
@@ -98,7 +129,11 @@ export class UniformStore {
|
|
|
98
129
|
// @ts-ignore
|
|
99
130
|
return this.uniformBuffers.get(uniformBufferName);
|
|
100
131
|
}
|
|
101
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Updates every managed uniform buffer whose source uniforms have changed.
|
|
134
|
+
*
|
|
135
|
+
* @returns The first redraw reason encountered, or `false` if nothing changed.
|
|
136
|
+
*/
|
|
102
137
|
updateUniformBuffers() {
|
|
103
138
|
let reason = false;
|
|
104
139
|
for (const uniformBufferName of this.uniformBlocks.keys()) {
|
|
@@ -110,7 +145,11 @@ export class UniformStore {
|
|
|
110
145
|
}
|
|
111
146
|
return reason;
|
|
112
147
|
}
|
|
113
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* Updates one managed uniform buffer if its corresponding block is dirty.
|
|
150
|
+
*
|
|
151
|
+
* @returns The redraw reason for the update, or `false` if no write occurred.
|
|
152
|
+
*/
|
|
114
153
|
updateUniformBuffer(uniformBufferName) {
|
|
115
154
|
const uniformBlock = this.uniformBlocks.get(uniformBufferName);
|
|
116
155
|
let uniformBuffer = this.uniformBuffers.get(uniformBufferName);
|
|
@@ -128,4 +167,10 @@ export class UniformStore {
|
|
|
128
167
|
return reason;
|
|
129
168
|
}
|
|
130
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns the default uniform-buffer layout for the supplied device.
|
|
172
|
+
*/
|
|
173
|
+
function getDefaultUniformBufferLayout(device) {
|
|
174
|
+
return device.type === 'webgpu' ? 'wgsl-uniform' : 'std140';
|
|
175
|
+
}
|
|
131
176
|
//# sourceMappingURL=uniform-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,MAAM,EAAC,uCAAoC;AACnD,OAAO,EAAC,GAAG,EAAC,wBAAqB;AACjC,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}
|