@luma.gl/core 9.2.6 → 9.3.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/dist/adapter/canvas-context.d.ts +6 -162
  2. package/dist/adapter/canvas-context.d.ts.map +1 -1
  3. package/dist/adapter/canvas-context.js +5 -419
  4. package/dist/adapter/canvas-context.js.map +1 -1
  5. package/dist/adapter/canvas-observer.d.ts +32 -0
  6. package/dist/adapter/canvas-observer.d.ts.map +1 -0
  7. package/dist/adapter/canvas-observer.js +90 -0
  8. package/dist/adapter/canvas-observer.js.map +1 -0
  9. package/dist/adapter/canvas-surface.d.ts +150 -0
  10. package/dist/adapter/canvas-surface.d.ts.map +1 -0
  11. package/dist/adapter/canvas-surface.js +392 -0
  12. package/dist/adapter/canvas-surface.js.map +1 -0
  13. package/dist/adapter/device.d.ts +81 -16
  14. package/dist/adapter/device.d.ts.map +1 -1
  15. package/dist/adapter/device.js +193 -11
  16. package/dist/adapter/device.js.map +1 -1
  17. package/dist/adapter/luma.d.ts.map +1 -1
  18. package/dist/adapter/luma.js +2 -1
  19. package/dist/adapter/luma.js.map +1 -1
  20. package/dist/adapter/presentation-context.d.ts +11 -0
  21. package/dist/adapter/presentation-context.d.ts.map +1 -0
  22. package/dist/adapter/presentation-context.js +12 -0
  23. package/dist/adapter/presentation-context.js.map +1 -0
  24. package/dist/adapter/resources/buffer.d.ts +1 -1
  25. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  26. package/dist/adapter/resources/buffer.js +14 -6
  27. package/dist/adapter/resources/buffer.js.map +1 -1
  28. package/dist/adapter/resources/command-buffer.d.ts +3 -1
  29. package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
  30. package/dist/adapter/resources/command-buffer.js +3 -1
  31. package/dist/adapter/resources/command-buffer.js.map +1 -1
  32. package/dist/adapter/resources/command-encoder.d.ts +30 -7
  33. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  34. package/dist/adapter/resources/command-encoder.js +68 -2
  35. package/dist/adapter/resources/command-encoder.js.map +1 -1
  36. package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
  37. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
  38. package/dist/adapter/resources/fence.d.ts +16 -0
  39. package/dist/adapter/resources/fence.d.ts.map +1 -0
  40. package/dist/adapter/resources/fence.js +17 -0
  41. package/dist/adapter/resources/fence.js.map +1 -0
  42. package/dist/adapter/resources/framebuffer.d.ts +1 -1
  43. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  44. package/dist/adapter/resources/framebuffer.js +15 -12
  45. package/dist/adapter/resources/framebuffer.js.map +1 -1
  46. package/dist/adapter/resources/query-set.d.ts +17 -1
  47. package/dist/adapter/resources/query-set.d.ts.map +1 -1
  48. package/dist/adapter/resources/query-set.js.map +1 -1
  49. package/dist/adapter/resources/render-pipeline.d.ts +28 -10
  50. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  51. package/dist/adapter/resources/render-pipeline.js +21 -2
  52. package/dist/adapter/resources/render-pipeline.js.map +1 -1
  53. package/dist/adapter/resources/resource.d.ts +13 -0
  54. package/dist/adapter/resources/resource.d.ts.map +1 -1
  55. package/dist/adapter/resources/resource.js +243 -14
  56. package/dist/adapter/resources/resource.js.map +1 -1
  57. package/dist/adapter/resources/shader.js +27 -25
  58. package/dist/adapter/resources/shader.js.map +1 -1
  59. package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
  60. package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
  61. package/dist/adapter/resources/shared-render-pipeline.js +25 -0
  62. package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
  63. package/dist/adapter/resources/texture-view.d.ts +1 -1
  64. package/dist/adapter/resources/texture-view.d.ts.map +1 -1
  65. package/dist/adapter/resources/texture.d.ts +168 -28
  66. package/dist/adapter/resources/texture.d.ts.map +1 -1
  67. package/dist/adapter/resources/texture.js +284 -25
  68. package/dist/adapter/resources/texture.js.map +1 -1
  69. package/dist/adapter/types/attachments.d.ts +1 -1
  70. package/dist/adapter/types/attachments.d.ts.map +1 -1
  71. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  72. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  73. package/dist/adapter/types/parameters.d.ts +3 -1
  74. package/dist/adapter/types/parameters.d.ts.map +1 -1
  75. package/dist/adapter/types/parameters.js +1 -0
  76. package/dist/adapter/types/parameters.js.map +1 -1
  77. package/dist/adapter/types/shader-layout.d.ts +10 -6
  78. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  79. package/dist/adapter/types/uniforms.d.ts +6 -0
  80. package/dist/adapter/types/uniforms.d.ts.map +1 -1
  81. package/dist/adapter-utils/bind-groups.d.ts +9 -0
  82. package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
  83. package/dist/adapter-utils/bind-groups.js +41 -0
  84. package/dist/adapter-utils/bind-groups.js.map +1 -0
  85. package/dist/adapter-utils/format-compiler-log.d.ts.map +1 -1
  86. package/dist/adapter-utils/format-compiler-log.js +23 -15
  87. package/dist/adapter-utils/format-compiler-log.js.map +1 -1
  88. package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
  89. package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
  90. package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
  91. package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
  92. package/dist/dist.dev.js +2734 -644
  93. package/dist/dist.min.js +10 -9
  94. package/dist/factories/bind-group-factory.d.ts +20 -0
  95. package/dist/factories/bind-group-factory.d.ts.map +1 -0
  96. package/dist/factories/bind-group-factory.js +88 -0
  97. package/dist/factories/bind-group-factory.js.map +1 -0
  98. package/dist/factories/core-module-state.d.ts +7 -0
  99. package/dist/factories/core-module-state.d.ts.map +1 -0
  100. package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
  101. package/dist/factories/core-module-state.js.map +1 -0
  102. package/dist/factories/pipeline-factory.d.ts +54 -0
  103. package/dist/factories/pipeline-factory.d.ts.map +1 -0
  104. package/dist/factories/pipeline-factory.js +270 -0
  105. package/dist/factories/pipeline-factory.js.map +1 -0
  106. package/dist/factories/shader-factory.d.ts +20 -0
  107. package/dist/factories/shader-factory.d.ts.map +1 -0
  108. package/dist/factories/shader-factory.js +84 -0
  109. package/dist/factories/shader-factory.js.map +1 -0
  110. package/dist/index.cjs +2447 -534
  111. package/dist/index.cjs.map +4 -4
  112. package/dist/index.d.ts +30 -14
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +19 -7
  115. package/dist/index.js.map +1 -1
  116. package/dist/portable/shader-block-writer.d.ts +51 -0
  117. package/dist/portable/shader-block-writer.d.ts.map +1 -0
  118. package/dist/portable/shader-block-writer.js +185 -0
  119. package/dist/portable/shader-block-writer.js.map +1 -0
  120. package/dist/portable/uniform-block.d.ts +1 -1
  121. package/dist/portable/uniform-block.d.ts.map +1 -1
  122. package/dist/portable/uniform-store.d.ts +55 -24
  123. package/dist/portable/uniform-store.d.ts.map +1 -1
  124. package/dist/portable/uniform-store.js +73 -25
  125. package/dist/portable/uniform-store.js.map +1 -1
  126. package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
  127. package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
  128. package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
  129. package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
  130. package/dist/shadertypes/data-types/data-types.d.ts +31 -12
  131. package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
  132. package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
  133. package/dist/shadertypes/data-types/decode-data-types.js +4 -3
  134. package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
  135. package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
  136. package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
  137. package/dist/shadertypes/image-types/image-types.js.map +1 -0
  138. package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
  139. package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
  140. package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
  141. package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
  142. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
  143. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
  144. package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +43 -4
  145. package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
  146. package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
  147. package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
  148. package/dist/shadertypes/shader-types/shader-types.js +30 -0
  149. package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
  150. package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
  151. package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +4 -4
  152. package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
  153. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
  154. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
  155. package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +110 -38
  156. package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
  157. package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
  158. package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
  159. package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
  160. package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
  161. package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +12 -11
  162. package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
  163. package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
  164. package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
  165. package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
  166. package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
  167. package/dist/shadertypes/texture-types/texture-layout.d.ts +5 -0
  168. package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
  169. package/dist/shadertypes/texture-types/texture-layout.js +41 -0
  170. package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
  171. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
  172. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
  173. package/dist/shadertypes/vertex-types/vertex-format-decoder.js +144 -0
  174. package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
  175. package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
  176. package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
  177. package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
  178. package/dist/utils/array-equal.d.ts +1 -1
  179. package/dist/utils/array-equal.d.ts.map +1 -1
  180. package/dist/utils/array-equal.js +15 -9
  181. package/dist/utils/array-equal.js.map +1 -1
  182. package/dist/utils/assert.d.ts +5 -0
  183. package/dist/utils/assert.d.ts.map +1 -0
  184. package/dist/utils/assert.js +17 -0
  185. package/dist/utils/assert.js.map +1 -0
  186. package/dist/utils/stats-manager.d.ts.map +1 -1
  187. package/dist/utils/stats-manager.js +61 -1
  188. package/dist/utils/stats-manager.js.map +1 -1
  189. package/package.json +6 -6
  190. package/src/adapter/canvas-context.ts +7 -556
  191. package/src/adapter/canvas-observer.ts +130 -0
  192. package/src/adapter/canvas-surface.ts +521 -0
  193. package/src/adapter/device.ts +311 -25
  194. package/src/adapter/luma.ts +1 -0
  195. package/src/adapter/presentation-context.ts +16 -0
  196. package/src/adapter/resources/buffer.ts +13 -5
  197. package/src/adapter/resources/command-buffer.ts +4 -2
  198. package/src/adapter/resources/command-encoder.ts +101 -10
  199. package/src/adapter/resources/compute-pipeline.ts +2 -2
  200. package/src/adapter/resources/fence.ts +32 -0
  201. package/src/adapter/resources/framebuffer.ts +16 -13
  202. package/src/adapter/resources/query-set.ts +17 -1
  203. package/src/adapter/resources/render-pipeline.ts +52 -16
  204. package/src/adapter/resources/resource.ts +289 -14
  205. package/src/adapter/resources/shader.ts +28 -28
  206. package/src/adapter/resources/shared-render-pipeline.ts +40 -0
  207. package/src/adapter/resources/texture-view.ts +1 -1
  208. package/src/adapter/resources/texture.ts +427 -49
  209. package/src/adapter/types/attachments.ts +1 -1
  210. package/src/adapter/types/buffer-layout.ts +1 -1
  211. package/src/adapter/types/parameters.ts +4 -1
  212. package/src/adapter/types/shader-layout.ts +15 -9
  213. package/src/adapter/types/uniforms.ts +12 -0
  214. package/src/adapter-utils/bind-groups.ts +71 -0
  215. package/src/adapter-utils/format-compiler-log.ts +23 -15
  216. package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
  217. package/src/factories/bind-group-factory.ts +157 -0
  218. package/src/factories/core-module-state.ts +11 -0
  219. package/src/factories/pipeline-factory.ts +328 -0
  220. package/src/factories/shader-factory.ts +103 -0
  221. package/src/index.ts +70 -26
  222. package/src/portable/shader-block-writer.ts +254 -0
  223. package/src/portable/uniform-block.ts +1 -1
  224. package/src/portable/uniform-store.ts +98 -40
  225. package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
  226. package/src/shadertypes/data-types/data-types.ts +100 -48
  227. package/src/shadertypes/data-types/decode-data-types.ts +4 -3
  228. package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
  229. package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
  230. package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
  231. package/src/shadertypes/shader-types/shader-types.ts +207 -0
  232. package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
  233. package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +167 -46
  234. package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
  235. package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +12 -11
  236. package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
  237. package/src/shadertypes/texture-types/texture-layout.ts +60 -0
  238. package/src/shadertypes/vertex-types/vertex-format-decoder.ts +175 -0
  239. package/src/shadertypes/vertex-types/vertex-formats.ts +196 -0
  240. package/src/utils/array-equal.ts +21 -9
  241. package/src/utils/assert.ts +18 -0
  242. package/src/utils/stats-manager.ts +76 -2
  243. package/dist/image-utils/image-types.d.ts.map +0 -1
  244. package/dist/image-utils/image-types.js.map +0 -1
  245. package/dist/portable/uniform-buffer-layout.d.ts +0 -28
  246. package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
  247. package/dist/portable/uniform-buffer-layout.js +0 -96
  248. package/dist/portable/uniform-buffer-layout.js.map +0 -1
  249. package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
  250. package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
  251. package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
  252. package/dist/shadertypes/data-types/shader-types.d.ts +0 -45
  253. package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
  254. package/dist/shadertypes/data-types/shader-types.js.map +0 -1
  255. package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
  256. package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
  257. package/dist/shadertypes/textures/texture-format-decoder.d.ts +0 -18
  258. package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
  259. package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
  260. package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
  261. package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
  262. package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
  263. package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
  264. package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
  265. package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
  266. package/dist/shadertypes/textures/texture-formats.js.map +0 -1
  267. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
  268. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
  269. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
  270. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
  271. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
  272. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
  273. package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
  274. package/src/portable/uniform-buffer-layout.ts +0 -118
  275. package/src/shadertypes/data-types/shader-types.ts +0 -87
  276. package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
  277. package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
  278. /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
  279. /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
  280. /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
  281. /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
  282. /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
@@ -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 { UniformBufferLayout } from "./uniform-buffer-layout.js";
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
- /** Can generate data for a uniform buffer for each block from data */
19
- uniformBufferLayouts = new Map();
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
- * Create a new UniformStore instance
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 uniformBufferLayout = new UniformBufferLayout(block.uniformTypes ?? {}, block.uniformSizes ?? {});
31
- this.uniformBufferLayouts.set(uniformBufferName, uniformBufferLayout);
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(block.defaultUniforms || {});
53
+ uniformBlock.setUniforms(shaderBlockWriter.getFlatUniformValues(block.defaultUniforms || {}));
35
54
  this.uniformBlocks.set(uniformBufferName, uniformBlock);
36
55
  }
37
56
  }
@@ -43,36 +62,51 @@ export class UniformStore {
43
62
  }
44
63
  /**
45
64
  * Set uniforms
46
- * Makes all properties partial
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
- this.uniformBlocks.get(blockName)?.setUniforms(uniformValues);
71
+ const uniformBufferName = blockName;
72
+ const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
73
+ const flattenedUniforms = shaderBlockWriter?.getFlatUniformValues((uniformValues || {}));
74
+ this.uniformBlocks.get(uniformBufferName)?.setUniforms(flattenedUniforms || {});
51
75
  // We leverage logging in updateUniformBuffers(), even though slightly less efficient
52
76
  // this.updateUniformBuffer(blockName);
53
77
  }
54
78
  this.updateUniformBuffers();
55
79
  }
56
- /** Get the required minimum length of the uniform buffer */
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
+ */
57
86
  getUniformBufferByteLength(uniformBufferName) {
58
- return this.uniformBufferLayouts.get(uniformBufferName)?.byteLength || 0;
87
+ const packedByteLength = this.shaderBlockLayouts.get(uniformBufferName)?.byteLength || 0;
88
+ return Math.max(packedByteLength, minUniformBufferSize);
59
89
  }
60
- /** Get formatted binary memory that can be uploaded to a buffer */
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
+ */
61
96
  getUniformBufferData(uniformBufferName) {
62
97
  const uniformValues = this.uniformBlocks.get(uniformBufferName)?.getAllUniforms() || {};
63
- // @ts-ignore
64
- return this.uniformBufferLayouts.get(uniformBufferName)?.getData(uniformValues);
98
+ const shaderBlockWriter = this.shaderBlockWriters.get(uniformBufferName);
99
+ return shaderBlockWriter?.getData(uniformValues) || new Uint8Array(0);
65
100
  }
66
101
  /**
67
- * Creates an unmanaged uniform buffer (umnanaged means that application is responsible for destroying it)
68
- * The new buffer is initialized with current / supplied values
102
+ * Creates an unmanaged uniform buffer initialized with the current or supplied values.
69
103
  */
70
- createUniformBuffer(device, uniformBufferName, uniforms) {
104
+ createUniformBuffer(uniformBufferName, uniforms) {
71
105
  if (uniforms) {
72
106
  this.setUniforms(uniforms);
73
107
  }
74
108
  const byteLength = this.getUniformBufferByteLength(uniformBufferName);
75
- const uniformBuffer = device.createBuffer({
109
+ const uniformBuffer = this.device.createBuffer({
76
110
  usage: Buffer.UNIFORM | Buffer.COPY_DST,
77
111
  byteLength
78
112
  });
@@ -81,11 +115,11 @@ export class UniformStore {
81
115
  uniformBuffer.write(uniformBufferData);
82
116
  return uniformBuffer;
83
117
  }
84
- /** Get the managed uniform buffer. "managed" resources are destroyed when the uniformStore is destroyed. */
85
- getManagedUniformBuffer(device, uniformBufferName) {
118
+ /** Returns the managed uniform buffer for the named block. */
119
+ getManagedUniformBuffer(uniformBufferName) {
86
120
  if (!this.uniformBuffers.get(uniformBufferName)) {
87
121
  const byteLength = this.getUniformBufferByteLength(uniformBufferName);
88
- const uniformBuffer = device.createBuffer({
122
+ const uniformBuffer = this.device.createBuffer({
89
123
  usage: Buffer.UNIFORM | Buffer.COPY_DST,
90
124
  byteLength
91
125
  });
@@ -95,7 +129,11 @@ export class UniformStore {
95
129
  // @ts-ignore
96
130
  return this.uniformBuffers.get(uniformBufferName);
97
131
  }
98
- /** Updates all uniform buffers where values have changed */
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
+ */
99
137
  updateUniformBuffers() {
100
138
  let reason = false;
101
139
  for (const uniformBufferName of this.uniformBlocks.keys()) {
@@ -107,7 +145,11 @@ export class UniformStore {
107
145
  }
108
146
  return reason;
109
147
  }
110
- /** Update one uniform buffer. Only updates if values have changed */
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
+ */
111
153
  updateUniformBuffer(uniformBufferName) {
112
154
  const uniformBlock = this.uniformBlocks.get(uniformBufferName);
113
155
  let uniformBuffer = this.uniformBuffers.get(uniformBufferName);
@@ -125,4 +167,10 @@ export class UniformStore {
125
167
  return reason;
126
168
  }
127
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
+ }
128
176
  //# sourceMappingURL=uniform-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uniform-store.js","sourceRoot":"","sources":["../../src/portable/uniform-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TypedArray, TypedArrayConstructor } from "../../types.js";
2
+ import { SignedDataType, NormalizedDataType, DataTypeInfo, TypedArrayConstructorT } from "./data-types.js";
3
+ export declare class DataTypeDecoder {
4
+ /**
5
+ * Gets info about a data type constant (signed or normalized)
6
+ * @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
7
+ */
8
+ getDataTypeInfo<T extends NormalizedDataType = NormalizedDataType>(type: T): DataTypeInfo<T>;
9
+ /** Build a vertex format from a signed data type and a component */
10
+ getNormalizedDataType(signedDataType: SignedDataType): NormalizedDataType;
11
+ /** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
12
+ alignTo(size: number, count: number): number;
13
+ /** Returns the VariableShaderType that corresponds to a typed array */
14
+ getDataType(arrayOrType: TypedArray | TypedArrayConstructor): SignedDataType;
15
+ /** Returns the TypedArray that corresponds to a shader data type */
16
+ getTypedArrayConstructor<T extends NormalizedDataType>(type: NormalizedDataType): TypedArrayConstructorT<T>;
17
+ }
18
+ /** Entry point for decoding luma.gl data types */
19
+ export declare const dataTypeDecoder: DataTypeDecoder;
20
+ //# sourceMappingURL=data-type-decoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-type-decoder.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-type-decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,uBAAoB;AAC9D,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACvB,wBAAqB;AAEtB,qBAAa,eAAe;IAC1B;;;OAGG;IACH,eAAe,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAgB5F,oEAAoE;IACpE,qBAAqB,CAAC,cAAc,EAAE,cAAc,GAAG,kBAAkB;IAYzE,4DAA4D;IAC5D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAS5C,uEAAuE;IACvE,WAAW,CAAC,WAAW,EAAE,UAAU,GAAG,qBAAqB,GAAG,cAAc;IAY5E,oEAAoE;IACpE,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EACnD,IAAI,EAAE,kBAAkB,GACvB,sBAAsB,CAAC,CAAC,CAAC;CAI7B;AAED,kDAAkD;AAClD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -0,0 +1,79 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export class DataTypeDecoder {
5
+ /**
6
+ * Gets info about a data type constant (signed or normalized)
7
+ * @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
8
+ */
9
+ getDataTypeInfo(type) {
10
+ const [signedType, primitiveType, byteLength] = NORMALIZED_TYPE_MAP[type];
11
+ const normalized = type.includes('norm');
12
+ const integer = !normalized && !type.startsWith('float');
13
+ const signed = type.startsWith('s');
14
+ return {
15
+ signedType: signedType,
16
+ primitiveType: primitiveType,
17
+ byteLength: byteLength,
18
+ normalized: normalized,
19
+ integer: integer,
20
+ signed: signed
21
+ // TODO - add webglOnly flag
22
+ };
23
+ }
24
+ /** Build a vertex format from a signed data type and a component */
25
+ getNormalizedDataType(signedDataType) {
26
+ const dataType = signedDataType;
27
+ // biome-ignore format: preserve layout
28
+ switch (dataType) {
29
+ case 'uint8': return 'unorm8';
30
+ case 'sint8': return 'snorm8';
31
+ case 'uint16': return 'unorm16';
32
+ case 'sint16': return 'snorm16';
33
+ default: return dataType;
34
+ }
35
+ }
36
+ /** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
37
+ alignTo(size, count) {
38
+ // biome-ignore format: preserve layout
39
+ switch (count) {
40
+ case 1: return size; // Pad upwards to even multiple of 2
41
+ case 2: return size + (size % 2); // Pad upwards to even multiple of 2
42
+ default: return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4
43
+ }
44
+ }
45
+ /** Returns the VariableShaderType that corresponds to a typed array */
46
+ getDataType(arrayOrType) {
47
+ const Constructor = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;
48
+ if (Constructor === Uint8ClampedArray) {
49
+ return 'uint8';
50
+ }
51
+ const info = Object.values(NORMALIZED_TYPE_MAP).find(entry => Constructor === entry[4]);
52
+ if (!info) {
53
+ throw new Error(Constructor.name);
54
+ }
55
+ return info[0];
56
+ }
57
+ /** Returns the TypedArray that corresponds to a shader data type */
58
+ getTypedArrayConstructor(type) {
59
+ const [, , , , Constructor] = NORMALIZED_TYPE_MAP[type];
60
+ return Constructor;
61
+ }
62
+ }
63
+ /** Entry point for decoding luma.gl data types */
64
+ export const dataTypeDecoder = new DataTypeDecoder();
65
+ const NORMALIZED_TYPE_MAP = {
66
+ uint8: ['uint8', 'u32', 1, false, Uint8Array],
67
+ sint8: ['sint8', 'i32', 1, false, Int8Array],
68
+ unorm8: ['uint8', 'f32', 1, true, Uint8Array],
69
+ snorm8: ['sint8', 'f32', 1, true, Int8Array],
70
+ uint16: ['uint16', 'u32', 2, false, Uint16Array],
71
+ sint16: ['sint16', 'i32', 2, false, Int16Array],
72
+ unorm16: ['uint16', 'u32', 2, true, Uint16Array],
73
+ snorm16: ['sint16', 'i32', 2, true, Int16Array],
74
+ float16: ['float16', 'f16', 2, false, Uint16Array],
75
+ float32: ['float32', 'f32', 4, false, Float32Array],
76
+ uint32: ['uint32', 'u32', 4, false, Uint32Array],
77
+ sint32: ['sint32', 'i32', 4, false, Int32Array]
78
+ };
79
+ //# sourceMappingURL=data-type-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-type-decoder.js","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-type-decoder.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@ export type PrimitiveDataType = 'u32' | 'i32' | 'f32' | 'f16';
8
8
  * Signed data types describe signed and unsigned integers as well as floats of varying sizes
9
9
  * @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
10
10
  */
11
- export type SignedDataType = 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32' | 'sint32' | 'float16' | 'float32';
11
+ export type DataType = 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32' | 'sint32' | 'float16' | 'float32';
12
+ export type SignedDataType = DataType;
12
13
  /**
13
14
  * Normalized data types describe signed and unsigned integers as well as floats of varying sizes together with normalization behavior
14
15
  * @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
@@ -17,16 +18,34 @@ export type SignedDataType = 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32'
17
18
  */
18
19
  export type NormalizedDataType = SignedDataType | 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16';
19
20
  /** Returns information about a signed or normalized DataType */
20
- export type DataTypeInfo = {
21
- signedType: SignedDataType;
22
- primitiveType: PrimitiveDataType;
23
- byteLength: 1 | 2 | 4;
24
- normalized: boolean;
25
- integer: boolean;
26
- signed: boolean;
21
+ export type DataTypeInfo<T extends NormalizedDataType = NormalizedDataType> = {
22
+ /** The corresponding data type without normalization */
23
+ signedType: SignedDataTypeT<T>;
24
+ /** The primitive data type (what the shader sees) */
25
+ primitiveType: PrimitiveDataTypeT<T>;
26
+ /** @type number - Length in bytes of the data type */
27
+ byteLength: DataTypeByteLengthT<T>;
28
+ /** @type boolean - indicating whether the data type is normalized */
29
+ normalized: DataTypeIsNormalizedT<T>;
30
+ /** @type boolean - indicating whether the data type is integer */
31
+ integer: DataTypeIsIntegerT<T>;
32
+ /** @type boolean - indicating whether the data type is signed */
33
+ signed: DataTypeIsSignedT<T>;
27
34
  };
28
- /** Returns a typed array appropriate to hold the actual values of a data type (integers for normalized integers) */
29
- export type DataTypeArray<T extends NormalizedDataType> = T extends 'uint8' ? Uint8Array : T extends 'sint8' ? Int8Array : T extends 'unorm8' ? Uint8Array : T extends 'snorm8' ? Int8Array : T extends 'uint16' ? Uint16Array : T extends 'sint16' ? Int16Array : T extends 'unorm16' ? Uint16Array : T extends 'snorm16' ? Int16Array : T extends 'uint32' ? Uint32Array : T extends 'sint32' ? Int32Array : T extends 'float16' ? Uint16Array : T extends 'float32' ? Float32Array : never;
30
- /** Returns a type array appropriate to hold the logical values of a data type (floats for normalized integers) */
31
- export type NormalizedDataTypeArray<T extends NormalizedDataType> = T extends 'uint8' ? Uint8Array : T extends 'sint8' ? Int8Array : T extends 'unorm8' ? Float32Array : T extends 'snorm8' ? Float32Array : T extends 'uint16' ? Uint16Array : T extends 'sint16' ? Int16Array : T extends 'unorm16' ? Uint16Array : T extends 'snorm16' ? Int16Array : T extends 'uint32' ? Uint32Array : T extends 'sint32' ? Int32Array : T extends 'float16' ? Float32Array : T extends 'float32' ? Float32Array : never;
35
+ /** @type the primitive data type seen by the shader */
36
+ export type PrimitiveDataTypeT<T extends NormalizedDataType> = T extends 'float32' ? 'f32' : T extends 'float16' ? 'f16' : T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16' ? 'f32' : T extends 'uint8' | 'uint16' | 'uint32' ? 'u32' : T extends 'sint8' | 'sint16' | 'sint32' ? 'i32' : never;
37
+ /** @type The signed data type representing a normalized data type */
38
+ export type SignedDataTypeT<T extends NormalizedDataType> = T extends 'unorm8' ? 'uint8' : T extends 'snorm8' ? 'sint8' : T extends 'unorm16' ? 'uint16' : T extends 'snorm16' ? 'sint16' : T extends NormalizedDataType ? T : never;
39
+ /** @type a number type that is is the length in bytes of the data type */
40
+ export type DataTypeByteLengthT<T extends NormalizedDataType = NormalizedDataType> = T extends 'uint8' | 'sint8' | 'unorm8' | 'snorm8' ? 1 : T extends 'uint16' | 'sint16' | 'unorm16' | 'snorm16' | 'float16' ? 2 : T extends 'uint32' | 'sint32' | 'float32' ? 4 : never;
41
+ /** @type a boolean type that is true if the data format is signed */
42
+ export type DataTypeIsSignedT<T extends NormalizedDataType = NormalizedDataType> = T extends 'sint8' | 'sint16' | 'sint32' ? true : false;
43
+ /** @type a boolean type that is true if the data format is a normalized format */
44
+ export type DataTypeIsNormalizedT<T extends NormalizedDataType = NormalizedDataType> = T extends SignedDataType ? false : true;
45
+ /** @type a boolean type that is true if the data format is an integer format */
46
+ export type DataTypeIsIntegerT<T extends NormalizedDataType = NormalizedDataType> = T extends 'uint8' | 'sint8' | 'uint16' | 'sint16' | 'uint32' | 'sint32' ? true : false;
47
+ /** @type A typed array constructor type appropriate to hold the actual values of a data type (i.e. integers for normalized data types) */
48
+ export type TypedArrayConstructorT<T extends NormalizedDataType> = T extends 'uint8' ? Uint8ArrayConstructor : T extends 'sint8' ? Int8ArrayConstructor : T extends 'unorm8' ? Uint8ArrayConstructor : T extends 'snorm8' ? Int8ArrayConstructor : T extends 'uint16' ? Uint16ArrayConstructor : T extends 'sint16' ? Int16ArrayConstructor : T extends 'unorm16' ? Uint16ArrayConstructor : T extends 'snorm16' ? Int16ArrayConstructor : T extends 'uint32' ? Uint32ArrayConstructor : T extends 'sint32' ? Int32ArrayConstructor : T extends 'float16' ? Uint16ArrayConstructor : T extends 'float32' ? Float32ArrayConstructor : never;
49
+ /** @type A typed array constructor appropriate to hold the logical values of a data type (i.e. floats for normalized data types) */
50
+ export type NormalizedTypedArrayConstructorT<T extends NormalizedDataType> = T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16' ? Float32ArrayConstructor : TypedArrayConstructorT<T>;
32
51
  //# sourceMappingURL=data-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-types.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,CAAC;AAEd;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9F,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,aAAa,EAAE,iBAAiB,CAAC;IACjC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,oHAAoH;AACpH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,kBAAkB,IAAI,CAAC,SAAS,OAAO,GACvE,UAAU,GACV,CAAC,SAAS,OAAO,GACf,SAAS,GACT,CAAC,SAAS,QAAQ,GAChB,UAAU,GACV,CAAC,SAAS,QAAQ,GAChB,SAAS,GACT,CAAC,SAAS,QAAQ,GAChB,WAAW,GACX,CAAC,SAAS,QAAQ,GAChB,UAAU,GACV,CAAC,SAAS,SAAS,GACjB,WAAW,GACX,CAAC,SAAS,SAAS,GACjB,UAAU,GACV,CAAC,SAAS,QAAQ,GAChB,WAAW,GACX,CAAC,SAAS,QAAQ,GAChB,UAAU,GACV,CAAC,SAAS,SAAS,GACjB,WAAW,GACX,CAAC,SAAS,SAAS,GACjB,YAAY,GACZ,KAAK,CAAC;AAEhC,kHAAkH;AAClH,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,IAAI,CAAC,SAAS,OAAO,GACjF,UAAU,GACV,CAAC,SAAS,OAAO,GACf,SAAS,GACT,CAAC,SAAS,QAAQ,GAChB,YAAY,GACZ,CAAC,SAAS,QAAQ,GAChB,YAAY,GACZ,CAAC,SAAS,QAAQ,GAChB,WAAW,GACX,CAAC,SAAS,QAAQ,GAChB,UAAU,GACV,CAAC,SAAS,SAAS,GACjB,WAAW,GACX,CAAC,SAAS,SAAS,GACjB,UAAU,GACV,CAAC,SAAS,QAAQ,GAChB,WAAW,GACX,CAAC,SAAS,QAAQ,GAChB,UAAU,GACV,CAAC,SAAS,SAAS,GACjB,YAAY,GACZ,CAAC,SAAS,SAAS,GACjB,YAAY,GACZ,KAAK,CAAC"}
1
+ {"version":3,"file":"data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/data-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decode-data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,uBAAoB;AAC9D,OAAO,EAAoB,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAC,wBAAqB;AAEjG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,CAatE;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,cAAc,GAAG,kBAAkB,CAUxF;AAED,4DAA4D;AAC5D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,WAAW,EAAE,UAAU,GAAG,qBAAqB,GAAG,cAAc,CAU3F;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,qBAAqB,CAGxF"}
1
+ {"version":3,"file":"decode-data-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,uBAAoB;AAC9D,OAAO,EAAoB,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAC,wBAAqB;AAEjG;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,CActE;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,cAAc,GAAG,kBAAkB,CAUxF;AAED,4DAA4D;AAC5D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,WAAW,EAAE,UAAU,GAAG,qBAAqB,GAAG,cAAc,CAU3F;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,qBAAqB,CAGxF"}
@@ -6,10 +6,11 @@
6
6
  * @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
7
7
  */
8
8
  export function getDataTypeInfo(type) {
9
- const [signedType, primitiveType, byteLength] = NORMALIZED_TYPE_MAP[type];
10
9
  const normalized = type.includes('norm');
11
10
  const integer = !normalized && !type.startsWith('float');
12
11
  const signed = type.startsWith('s');
12
+ const typeInfo = NORMALIZED_TYPE_MAP[type];
13
+ const [signedType, primitiveType, byteLength] = typeInfo || ['uint8 ', 'i32', 1];
13
14
  return {
14
15
  signedType,
15
16
  primitiveType,
@@ -22,7 +23,7 @@ export function getDataTypeInfo(type) {
22
23
  /** Build a vertex format from a signed data type and a component */
23
24
  export function getNormalizedDataType(signedDataType) {
24
25
  const dataType = signedDataType;
25
- // prettier-ignore
26
+ // biome-ignore format: preserve layout
26
27
  switch (dataType) {
27
28
  case 'uint8': return 'unorm8';
28
29
  case 'sint8': return 'snorm8';
@@ -33,7 +34,7 @@ export function getNormalizedDataType(signedDataType) {
33
34
  }
34
35
  /** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */
35
36
  export function alignTo(size, count) {
36
- // prettier-ignore
37
+ // biome-ignore format: preserve layout
37
38
  switch (count) {
38
39
  case 1: return size; // Pad upwards to even multiple of 2
39
40
  case 2: return size + (size % 2); // Pad upwards to even multiple of 2
@@ -1 +1 @@
1
- {"version":3,"file":"decode-data-types.js","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAY,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,MAAM,GAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,UAAU;QACV,aAAa;QACb,UAAU;QACV,UAAU;QACV,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,qBAAqB,CAAC,cAA8B;IAClE,MAAM,QAAQ,GAAuB,cAAc,CAAC;IACpD,kBAAkB;IAClB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC9B,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;QAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;QAChC,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IACjD,kBAAkB;IAClB,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,oCAAoC;QACzD,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC;QACtE,OAAO,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC;IACrF,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,WAA+C;IACzE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;IAC5F,IAAI,WAAW,KAAK,iBAAiB,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,wBAAwB,CAAC,IAAwB;IAC/D,MAAM,CAAC,EAAE,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,WAAW,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,mBAAmB,GASrB;IACF,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAC7C,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5C,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC;IAC7C,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAC5C,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;IAC/C,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC;IAChD,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC;IAC/C,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC;IAClD,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC;IACnD,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC;CAChD,CAAC"}
1
+ {"version":3,"file":"decode-data-types.js","sourceRoot":"","sources":["../../../src/shadertypes/data-types/decode-data-types.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,6 @@
3
3
  * @note ImageData can be used for contiguous 8 bit data via Uint8ClampedArray
4
4
  */
5
5
  export type ExternalImage = ImageBitmap | ImageData | HTMLImageElement | HTMLVideoElement | VideoFrame | HTMLCanvasElement | OffscreenCanvas;
6
- export type ExternalImageData = {
7
- data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
8
- byteOffset?: number;
9
- bytesPerRow?: number;
10
- rowsPerImage?: number;
11
- };
12
6
  /** Check if data is an external image */
13
7
  export declare function isExternalImage(data: unknown): data is ExternalImage;
14
8
  /** Determine size (width and height) of provided image data */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/image-types/image-types.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,UAAU,GACV,iBAAiB,GACjB,eAAe,CAAC;AAEpB,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAUpE;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAoBzF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-types.js","sourceRoot":"","sources":["../../../src/shadertypes/image-types/image-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAepC,yCAAyC;AACzC,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,CACL,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,IAAI,YAAY,SAAS,CAAC;QAC/D,CAAC,OAAO,WAAW,KAAK,WAAW,IAAI,IAAI,YAAY,WAAW,CAAC;QACnE,CAAC,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,CAAC;QAC7E,CAAC,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,CAAC;QAC7E,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,IAAI,YAAY,UAAU,CAAC;QACjE,CAAC,OAAO,iBAAiB,KAAK,WAAW,IAAI,IAAI,YAAY,iBAAiB,CAAC;QAC/E,CAAC,OAAO,eAAe,KAAK,WAAW,IAAI,IAAI,YAAY,eAAe,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,IAAmB;IACtD,IACE,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,IAAI,YAAY,SAAS,CAAC;QAC/D,CAAC,OAAO,WAAW,KAAK,WAAW,IAAI,IAAI,YAAY,WAAW,CAAC;QACnE,CAAC,OAAO,iBAAiB,KAAK,WAAW,IAAI,IAAI,YAAY,iBAAiB,CAAC;QAC/E,CAAC,OAAO,eAAe,KAAK,WAAW,IAAI,IAAI,YAAY,eAAe,CAAC,EAC3E,CAAC;QACD,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;QAChF,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,IAAI,YAAY,gBAAgB,EAAE,CAAC;QAChF,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QACpE,uDAAuD;QACvD,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { PrimitiveDataType } from "../data-types/data-types.js";
2
+ import type { CompositeShaderType, VariableShaderType } from "./shader-types.js";
3
+ /**
4
+ * Describes the packing for one flattened field in a shader block.
5
+ *
6
+ * Offsets, sizes, and strides are expressed in 32-bit words so the result can
7
+ * be consumed directly by typed-array writers.
8
+ */
9
+ export type ShaderBlockLayoutEntry = {
10
+ /** Offset in 32-bit words from the start of the block. */
11
+ offset: number;
12
+ /** Occupied size in 32-bit words, excluding external array stride. */
13
+ size: number;
14
+ /** Number of logical scalar components in the declared value. */
15
+ components: number;
16
+ /** Number of matrix columns, or `1` for scalars and vectors. */
17
+ columns: number;
18
+ /** Number of rows in each column, or vector length for vectors. */
19
+ rows: number;
20
+ /** Distance between matrix columns in 32-bit words. */
21
+ columnStride: number;
22
+ /** Canonical shader type after alias resolution. */
23
+ shaderType: VariableShaderType;
24
+ /** Scalar data type used to write the value. */
25
+ type: PrimitiveDataType;
26
+ };
27
+ /**
28
+ * Options for {@link makeShaderBlockLayout}.
29
+ */
30
+ export type ShaderBlockLayoutOptions = {
31
+ /**
32
+ * Packing rules to apply when building the layout.
33
+ *
34
+ * Defaults to `'std140'`.
35
+ */
36
+ layout?: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
37
+ };
38
+ /**
39
+ * Immutable layout metadata for a uniform or storage-style shader block.
40
+ */
41
+ export type ShaderBlockLayout = {
42
+ /** Packing rules used when this layout was created. */
43
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
44
+ /** Exact number of packed bytes required by the block. */
45
+ byteLength: number;
46
+ /** Original composite shader type declarations keyed by top-level field. */
47
+ uniformTypes: Record<string, CompositeShaderType>;
48
+ /** Flattened leaf field layouts keyed by field path. */
49
+ fields: Record<string, ShaderBlockLayoutEntry>;
50
+ };
51
+ /**
52
+ * Builds a deterministic shader-block layout from composite shader type declarations.
53
+ *
54
+ * The returned value is pure layout metadata. It records the packed field
55
+ * offsets and exact packed byte length, but it does not allocate buffers or
56
+ * serialize values.
57
+ */
58
+ export declare function makeShaderBlockLayout(uniformTypes: Readonly<Record<string, CompositeShaderType>>, options?: ShaderBlockLayoutOptions): ShaderBlockLayout;
59
+ /**
60
+ * Returns the layout metadata for a scalar, vector, or matrix leaf type.
61
+ *
62
+ * The result includes both the occupied size in 32-bit words and the alignment
63
+ * requirement that must be applied before placing the value in a shader block.
64
+ */
65
+ export declare function getLeafLayoutInfo(type: VariableShaderType, layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'): Omit<ShaderBlockLayoutEntry, 'offset'> & {
66
+ alignment: 1 | 2 | 4;
67
+ };
68
+ /**
69
+ * Type guard for composite struct declarations.
70
+ */
71
+ export declare function isCompositeShaderTypeStruct(value: CompositeShaderType): value is Record<string, CompositeShaderType>;
72
+ //# sourceMappingURL=shader-block-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-block-layout.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-block-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,iBAAiB,EAAC,oCAAiC;AAChE,OAAO,KAAK,EAAC,mBAAmB,EAAE,kBAAkB,EAAC,0BAAuB;AAI5E;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,gDAAgD;IAChD,IAAI,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uDAAuD;IACvD,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;IACnD,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAClD,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,EAC3D,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAkBnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,GACjD,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,GAAG;IAAC,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAC,CAgDjE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,GACzB,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAE9C"}