@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
@@ -0,0 +1,209 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { alignTo } from "../data-types/decode-data-types.js";
5
+ import { getVariableShaderTypeInfo, resolveVariableShaderTypeAlias } from "./shader-type-decoder.js";
6
+ /**
7
+ * Builds a deterministic shader-block layout from composite shader type declarations.
8
+ *
9
+ * The returned value is pure layout metadata. It records the packed field
10
+ * offsets and exact packed byte length, but it does not allocate buffers or
11
+ * serialize values.
12
+ */
13
+ export function makeShaderBlockLayout(uniformTypes, options = {}) {
14
+ const copiedUniformTypes = { ...uniformTypes };
15
+ const layout = options.layout ?? 'std140';
16
+ const fields = {};
17
+ let size = 0;
18
+ for (const [key, uniformType] of Object.entries(copiedUniformTypes)) {
19
+ size = addToLayout(fields, key, uniformType, size, layout);
20
+ }
21
+ size = alignTo(size, getTypeAlignment(copiedUniformTypes, layout));
22
+ return {
23
+ layout,
24
+ byteLength: size * 4,
25
+ uniformTypes: copiedUniformTypes,
26
+ fields
27
+ };
28
+ }
29
+ /**
30
+ * Returns the layout metadata for a scalar, vector, or matrix leaf type.
31
+ *
32
+ * The result includes both the occupied size in 32-bit words and the alignment
33
+ * requirement that must be applied before placing the value in a shader block.
34
+ */
35
+ export function getLeafLayoutInfo(type, layout) {
36
+ const resolvedType = resolveVariableShaderTypeAlias(type);
37
+ const decodedType = getVariableShaderTypeInfo(resolvedType);
38
+ const matrixMatch = /^mat(\d)x(\d)<.+>$/.exec(resolvedType);
39
+ if (matrixMatch) {
40
+ const columns = Number(matrixMatch[1]);
41
+ const rows = Number(matrixMatch[2]);
42
+ const columnInfo = getVectorLayoutInfo(rows, resolvedType, decodedType.type, layout);
43
+ const columnStride = getMatrixColumnStride(columnInfo.size, columnInfo.alignment, layout);
44
+ return {
45
+ alignment: columnInfo.alignment,
46
+ size: columns * columnStride,
47
+ components: columns * rows,
48
+ columns,
49
+ rows,
50
+ columnStride,
51
+ shaderType: resolvedType,
52
+ type: decodedType.type
53
+ };
54
+ }
55
+ const vectorMatch = /^vec(\d)<.+>$/.exec(resolvedType);
56
+ if (vectorMatch) {
57
+ return getVectorLayoutInfo(Number(vectorMatch[1]), resolvedType, decodedType.type, layout);
58
+ }
59
+ return {
60
+ alignment: 1,
61
+ size: 1,
62
+ components: 1,
63
+ columns: 1,
64
+ rows: 1,
65
+ columnStride: 1,
66
+ shaderType: resolvedType,
67
+ type: decodedType.type
68
+ };
69
+ }
70
+ /**
71
+ * Type guard for composite struct declarations.
72
+ */
73
+ export function isCompositeShaderTypeStruct(value) {
74
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
75
+ }
76
+ /**
77
+ * Recursively adds a composite type to the flattened field map.
78
+ *
79
+ * @returns The next free 32-bit-word offset after the inserted type.
80
+ */
81
+ function addToLayout(fields, name, type, offset, layout) {
82
+ if (typeof type === 'string') {
83
+ const info = getLeafLayoutInfo(type, layout);
84
+ const alignedOffset = alignTo(offset, info.alignment);
85
+ fields[name] = {
86
+ offset: alignedOffset,
87
+ ...info
88
+ };
89
+ return alignedOffset + info.size;
90
+ }
91
+ if (Array.isArray(type)) {
92
+ if (Array.isArray(type[0])) {
93
+ throw new Error(`Nested arrays are not supported for ${name}`);
94
+ }
95
+ const elementType = type[0];
96
+ const length = type[1];
97
+ const stride = getArrayStride(elementType, layout);
98
+ const arrayOffset = alignTo(offset, getTypeAlignment(type, layout));
99
+ for (let i = 0; i < length; i++) {
100
+ addToLayout(fields, `${name}[${i}]`, elementType, arrayOffset + i * stride, layout);
101
+ }
102
+ return arrayOffset + stride * length;
103
+ }
104
+ if (isCompositeShaderTypeStruct(type)) {
105
+ const structAlignment = getTypeAlignment(type, layout);
106
+ let structOffset = alignTo(offset, structAlignment);
107
+ for (const [memberName, memberType] of Object.entries(type)) {
108
+ structOffset = addToLayout(fields, `${name}.${memberName}`, memberType, structOffset, layout);
109
+ }
110
+ return alignTo(structOffset, structAlignment);
111
+ }
112
+ throw new Error(`Unsupported CompositeShaderType for ${name}`);
113
+ }
114
+ /**
115
+ * Returns the occupied size of a composite type in 32-bit words.
116
+ */
117
+ function getTypeSize(type, layout) {
118
+ if (typeof type === 'string') {
119
+ return getLeafLayoutInfo(type, layout).size;
120
+ }
121
+ if (Array.isArray(type)) {
122
+ const elementType = type[0];
123
+ const length = type[1];
124
+ if (Array.isArray(elementType)) {
125
+ throw new Error('Nested arrays are not supported');
126
+ }
127
+ return getArrayStride(elementType, layout) * length;
128
+ }
129
+ let size = 0;
130
+ for (const memberType of Object.values(type)) {
131
+ const compositeMemberType = memberType;
132
+ size = alignTo(size, getTypeAlignment(compositeMemberType, layout));
133
+ size += getTypeSize(compositeMemberType, layout);
134
+ }
135
+ return alignTo(size, getTypeAlignment(type, layout));
136
+ }
137
+ /**
138
+ * Returns the required alignment of a composite type in 32-bit words.
139
+ */
140
+ function getTypeAlignment(type, layout) {
141
+ if (typeof type === 'string') {
142
+ return getLeafLayoutInfo(type, layout).alignment;
143
+ }
144
+ if (Array.isArray(type)) {
145
+ const elementType = type[0];
146
+ const elementAlignment = getTypeAlignment(elementType, layout);
147
+ return uses16ByteArrayAlignment(layout)
148
+ ? Math.max(elementAlignment, 4)
149
+ : elementAlignment;
150
+ }
151
+ let maxAlignment = 1;
152
+ for (const memberType of Object.values(type)) {
153
+ const memberAlignment = getTypeAlignment(memberType, layout);
154
+ maxAlignment = Math.max(maxAlignment, memberAlignment);
155
+ }
156
+ return uses16ByteStructAlignment(layout)
157
+ ? Math.max(maxAlignment, 4)
158
+ : maxAlignment;
159
+ }
160
+ /**
161
+ * Returns the layout metadata for a vector leaf type.
162
+ */
163
+ function getVectorLayoutInfo(components, shaderType, type, layout) {
164
+ return {
165
+ alignment: components === 2 ? 2 : 4,
166
+ size: components === 3 ? 3 : components,
167
+ components,
168
+ columns: 1,
169
+ rows: components,
170
+ columnStride: components === 3 ? 3 : components,
171
+ shaderType,
172
+ type
173
+ };
174
+ }
175
+ /**
176
+ * Returns the stride of an array element in 32-bit words.
177
+ *
178
+ * This includes any layout-specific padding between adjacent array elements.
179
+ */
180
+ function getArrayStride(elementType, layout) {
181
+ const elementSize = getTypeSize(elementType, layout);
182
+ const elementAlignment = getTypeAlignment(elementType, layout);
183
+ return getArrayLikeStride(elementSize, elementAlignment, layout);
184
+ }
185
+ /**
186
+ * Returns the common stride rule shared by array-like elements in the target layout.
187
+ */
188
+ function getArrayLikeStride(size, alignment, layout) {
189
+ return alignTo(size, uses16ByteArrayAlignment(layout) ? 4 : alignment);
190
+ }
191
+ /**
192
+ * Returns the stride of a matrix column in 32-bit words.
193
+ */
194
+ function getMatrixColumnStride(size, alignment, layout) {
195
+ return layout === 'std140' ? 4 : alignTo(size, alignment);
196
+ }
197
+ /**
198
+ * Returns `true` when arrays must be rounded up to 16-byte boundaries.
199
+ */
200
+ function uses16ByteArrayAlignment(layout) {
201
+ return layout === 'std140' || layout === 'wgsl-uniform';
202
+ }
203
+ /**
204
+ * Returns `true` when structs must be rounded up to 16-byte boundaries.
205
+ */
206
+ function uses16ByteStructAlignment(layout) {
207
+ return layout === 'std140' || layout === 'wgsl-uniform';
208
+ }
209
+ //# sourceMappingURL=shader-block-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-block-layout.js","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-block-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type PrimitiveDataType } from "../data-types/data-types.js";
2
+ import { type VariableShaderType, type AttributeShaderType, type VariableShaderTypeAlias, type AttributeShaderTypeAlias } from "./shader-types.js";
3
+ /** Information extracted from a VariableShaderType constant */
4
+ export type VariableShaderTypeInfo = {
5
+ type: PrimitiveDataType;
6
+ components: number;
7
+ };
8
+ /** Information extracted from a AttributeShaderType constant */
9
+ export type AttributeShaderTypeInfo = {
10
+ /** WGSL-style primitive data type, f32, i32, u32 */
11
+ primitiveType: PrimitiveDataType;
12
+ /** Whether this is a normalized integer (that must be used as float) */
13
+ components: 1 | 2 | 3 | 4;
14
+ /** Length in bytes of the data for one vertex */
15
+ byteLength?: number;
16
+ /** Whether this is for integer or float vert */
17
+ integer: boolean;
18
+ /** Whether this data type is signed */
19
+ signed: boolean;
20
+ };
21
+ /** Split a uniform type string into type and components */
22
+ export declare function getVariableShaderTypeInfo(format: VariableShaderType | VariableShaderTypeAlias): VariableShaderTypeInfo;
23
+ /** Decodes a vertex type, returning byte length and flags (integer, signed, normalized) */
24
+ export declare function getAttributeShaderTypeInfo(attributeType: AttributeShaderType | AttributeShaderTypeAlias): AttributeShaderTypeInfo;
25
+ export declare class ShaderTypeDecoder {
26
+ getVariableShaderTypeInfo(format: VariableShaderType | VariableShaderTypeAlias): VariableShaderTypeInfo;
27
+ getAttributeShaderTypeInfo(attributeType: AttributeShaderType | AttributeShaderTypeAlias): AttributeShaderTypeInfo;
28
+ makeShaderAttributeType(primitiveType: PrimitiveDataType, components: 1 | 2 | 3 | 4): AttributeShaderType;
29
+ resolveAttributeShaderTypeAlias(alias: AttributeShaderTypeAlias | AttributeShaderType): AttributeShaderType;
30
+ resolveVariableShaderTypeAlias(alias: VariableShaderTypeAlias | VariableShaderType): VariableShaderType;
31
+ }
32
+ export declare function makeShaderAttributeType(primitiveType: PrimitiveDataType, components: 1 | 2 | 3 | 4): AttributeShaderType;
33
+ export declare function resolveAttributeShaderTypeAlias(alias: AttributeShaderTypeAlias | AttributeShaderType): AttributeShaderType;
34
+ export declare function resolveVariableShaderTypeAlias(alias: VariableShaderTypeAlias | VariableShaderType): VariableShaderType;
35
+ /** Decoder for luma.gl shader types */
36
+ export declare const shaderTypeDecoder: ShaderTypeDecoder;
37
+ /** Predeclared aliases @see https://www.w3.org/TR/WGSL/#vector-types */
38
+ export declare const WGSL_ATTRIBUTE_TYPE_ALIAS_MAP: Record<AttributeShaderTypeAlias, AttributeShaderType>;
39
+ /** @todo These tables are quite big, consider parsing alias strings instead */
40
+ export declare const WGSL_VARIABLE_TYPE_ALIAS_MAP: Record<VariableShaderTypeAlias, VariableShaderType>;
41
+ //# sourceMappingURL=shader-type-decoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-type-decoder.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-type-decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,KAAK,iBAAiB,EAAC,oCAAiC;AAChE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,0BAAuB;AAExB,+DAA+D;AAC/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,uBAAuB,GAAG;IACpC,oDAAoD;IACpD,aAAa,EAAE,iBAAiB,CAAC;IACjC,wEAAwE;IACxE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,kBAAkB,GAAG,uBAAuB,GACnD,sBAAsB,CAOxB;AAED,2FAA2F;AAC3F,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,mBAAmB,GAAG,wBAAwB,GAC5D,uBAAuB,CAkBzB;AAED,qBAAa,iBAAiB;IAC5B,yBAAyB,CACvB,MAAM,EAAE,kBAAkB,GAAG,uBAAuB,GACnD,sBAAsB;IAIzB,0BAA0B,CACxB,aAAa,EAAE,mBAAmB,GAAG,wBAAwB,GAC5D,uBAAuB;IAI1B,uBAAuB,CACrB,aAAa,EAAE,iBAAiB,EAChC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACxB,mBAAmB;IAItB,+BAA+B,CAC7B,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,GACpD,mBAAmB;IAItB,8BAA8B,CAC5B,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,GAClD,kBAAkB;CAGtB;AAED,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,iBAAiB,EAChC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACxB,mBAAmB,CAErB;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,GACpD,mBAAmB,CAErB;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,GAClD,kBAAkB,CAEpB;AAED,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AA6FzD,yEAAyE;AACzE,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,wBAAwB,EAAE,mBAAmB,CAe7F,CAAC;AAEJ,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAoD5F,CAAC"}
@@ -3,12 +3,21 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  /** Split a uniform type string into type and components */
5
5
  export function getVariableShaderTypeInfo(format) {
6
- const decoded = UNIFORM_FORMATS[format];
6
+ const resolvedFormat = resolveVariableShaderTypeAlias(format);
7
+ const decoded = UNIFORM_FORMATS[resolvedFormat];
8
+ if (!decoded) {
9
+ throw new Error(`Unsupported variable shader type: ${format}`);
10
+ }
7
11
  return decoded;
8
12
  }
9
13
  /** Decodes a vertex type, returning byte length and flags (integer, signed, normalized) */
10
14
  export function getAttributeShaderTypeInfo(attributeType) {
11
- const [primitiveType, components] = TYPE_INFO[attributeType];
15
+ const resolvedAttributeType = resolveAttributeShaderTypeAlias(attributeType);
16
+ const decoded = TYPE_INFO[resolvedAttributeType];
17
+ if (!decoded) {
18
+ throw new Error(`Unsupported attribute shader type: ${attributeType}`);
19
+ }
20
+ const [primitiveType, components] = decoded;
12
21
  const integer = primitiveType === 'i32' || primitiveType === 'u32';
13
22
  const signed = primitiveType !== 'u32';
14
23
  const byteLength = PRIMITIVE_TYPE_SIZES[primitiveType] * components;
@@ -20,6 +29,23 @@ export function getAttributeShaderTypeInfo(attributeType) {
20
29
  signed
21
30
  };
22
31
  }
32
+ export class ShaderTypeDecoder {
33
+ getVariableShaderTypeInfo(format) {
34
+ return getVariableShaderTypeInfo(format);
35
+ }
36
+ getAttributeShaderTypeInfo(attributeType) {
37
+ return getAttributeShaderTypeInfo(attributeType);
38
+ }
39
+ makeShaderAttributeType(primitiveType, components) {
40
+ return makeShaderAttributeType(primitiveType, components);
41
+ }
42
+ resolveAttributeShaderTypeAlias(alias) {
43
+ return resolveAttributeShaderTypeAlias(alias);
44
+ }
45
+ resolveVariableShaderTypeAlias(alias) {
46
+ return resolveVariableShaderTypeAlias(alias);
47
+ }
48
+ }
23
49
  export function makeShaderAttributeType(primitiveType, components) {
24
50
  return components === 1 ? primitiveType : `vec${components}<${primitiveType}>`;
25
51
  }
@@ -29,6 +55,8 @@ export function resolveAttributeShaderTypeAlias(alias) {
29
55
  export function resolveVariableShaderTypeAlias(alias) {
30
56
  return WGSL_VARIABLE_TYPE_ALIAS_MAP[alias] || alias;
31
57
  }
58
+ /** Decoder for luma.gl shader types */
59
+ export const shaderTypeDecoder = new ShaderTypeDecoder();
32
60
  // TABLES
33
61
  const PRIMITIVE_TYPE_SIZES = {
34
62
  f32: 4,
@@ -130,7 +158,18 @@ export const WGSL_ATTRIBUTE_TYPE_ALIAS_MAP = {
130
158
  };
131
159
  /** @todo These tables are quite big, consider parsing alias strings instead */
132
160
  export const WGSL_VARIABLE_TYPE_ALIAS_MAP = {
133
- ...WGSL_ATTRIBUTE_TYPE_ALIAS_MAP,
161
+ vec2i: 'vec2<i32>',
162
+ vec3i: 'vec3<i32>',
163
+ vec4i: 'vec4<i32>',
164
+ vec2u: 'vec2<u32>',
165
+ vec3u: 'vec3<u32>',
166
+ vec4u: 'vec4<u32>',
167
+ vec2f: 'vec2<f32>',
168
+ vec3f: 'vec3<f32>',
169
+ vec4f: 'vec4<f32>',
170
+ vec2h: 'vec2<f16>',
171
+ vec3h: 'vec3<f16>',
172
+ vec4h: 'vec4<f16>',
134
173
  mat2x2f: 'mat2x2<f32>',
135
174
  mat2x3f: 'mat2x3<f32>',
136
175
  mat2x4f: 'mat2x4<f32>',
@@ -168,4 +207,4 @@ export const WGSL_VARIABLE_TYPE_ALIAS_MAP = {
168
207
  mat4x3h: 'mat4x3<f16>',
169
208
  mat4x4h: 'mat4x4<f16>'
170
209
  };
171
- //# sourceMappingURL=decode-shader-types.js.map
210
+ //# sourceMappingURL=shader-type-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-type-decoder.js","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-type-decoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { PrimitiveDataType } from "../data-types/data-types.js";
2
+ /**
3
+ * @type the type of an attribute as defined in the shader source code.
4
+ * @note This is a subset of shader variable types
5
+ * @note Buffers with various `VertexFormat`s can be supplied for each type, GPU will convert them at runtime/
6
+ */
7
+ export type AttributeShaderType = 'i32' | 'u32' | 'f32' | 'f16' | `vec2<${PrimitiveDataType}>` | `vec3<${PrimitiveDataType}>` | `vec4<${PrimitiveDataType}>`;
8
+ /**
9
+ * @type Describes the type of a variable that can declared in shader source code.
10
+ * @note Uniforms can be declared using these types
11
+ * @note Uniforms can be of a wider range of types than attributes.
12
+ * @note to WebGL users: "bindings" (textures, samplers, and uniform buffers) are considered "bindings", not shader variables/uniforms
13
+ */
14
+ export type VariableShaderType = 'i32' | 'u32' | 'f32' | 'f16' | `vec2<${PrimitiveDataType}>` | `vec3<${PrimitiveDataType}>` | `vec4<${PrimitiveDataType}>` | `mat2x2<${PrimitiveDataType}>` | `mat2x3<${PrimitiveDataType}>` | `mat2x4<${PrimitiveDataType}>` | `mat3x2<${PrimitiveDataType}>` | `mat3x3<${PrimitiveDataType}>` | `mat3x4<${PrimitiveDataType}>` | `mat4x2<${PrimitiveDataType}>` | `mat4x3<${PrimitiveDataType}>` | `mat4x4<${PrimitiveDataType}>`;
15
+ /** @type A composite shader type can include structs and arrays, recursively */
16
+ export type CompositeShaderType = VariableShaderType | StructShaderType | ArrayShaderType;
17
+ /** @type Represents a struct in WGSL */
18
+ export type StructShaderType = {
19
+ [memberName: string]: CompositeShaderType;
20
+ };
21
+ /** @type Represents an array in WGSL */
22
+ export type ArrayShaderType = readonly [type: CompositeShaderType, length: number];
23
+ /** @type Shorthand type aliases recognized by WGSL */
24
+ export type AttributeShaderTypeAlias = keyof AttributeShaderTypeAliasMap;
25
+ /** @note work around for lack of type narrowing in conditional generics */
26
+ type AttributeShaderTypeAliasMap = {
27
+ vec2f: 'vec2<f32>';
28
+ vec3f: 'vec3<f32>';
29
+ vec4f: 'vec4<f32>';
30
+ vec2i: 'vec2<i32>';
31
+ vec3i: 'vec3<i32>';
32
+ vec4i: 'vec4<i32>';
33
+ vec2u: 'vec2<u32>';
34
+ vec3u: 'vec3<u32>';
35
+ vec4u: 'vec4<u32>';
36
+ vec2h: 'vec2<f16>';
37
+ vec3h: 'vec3<f16>';
38
+ vec4h: 'vec4<f16>';
39
+ };
40
+ /** @type Shorthand type aliases recognized by WGSL */
41
+ export type VariableShaderTypeAlias = keyof VariableShaderTypeAliasMap;
42
+ /** @note work around for lack of type narrowing in conditional generics */
43
+ type VariableShaderTypeAliasMap = {
44
+ vec2f: 'vec2<f32>';
45
+ vec3f: 'vec3<f32>';
46
+ vec4f: 'vec4<f32>';
47
+ vec2i: 'vec2<i32>';
48
+ vec3i: 'vec3<i32>';
49
+ vec4i: 'vec4<i32>';
50
+ vec2u: 'vec2<u32>';
51
+ vec3u: 'vec3<u32>';
52
+ vec4u: 'vec4<u32>';
53
+ vec2h: 'vec2<f16>';
54
+ vec3h: 'vec3<f16>';
55
+ vec4h: 'vec4<f16>';
56
+ mat2x2f: 'mat2x2<f32>';
57
+ mat2x3f: 'mat2x3<f32>';
58
+ mat2x4f: 'mat2x4<f32>';
59
+ mat3x2f: 'mat3x2<f32>';
60
+ mat3x3f: 'mat3x3<f32>';
61
+ mat3x4f: 'mat3x4<f32>';
62
+ mat4x2f: 'mat4x2<f32>';
63
+ mat4x3f: 'mat4x3<f32>';
64
+ mat4x4f: 'mat4x4<f32>';
65
+ mat2x2i: 'mat2x2<i32>';
66
+ mat2x3i: 'mat2x3<i32>';
67
+ mat2x4i: 'mat2x4<i32>';
68
+ mat3x2i: 'mat3x2<i32>';
69
+ mat3x3i: 'mat3x3<i32>';
70
+ mat3x4i: 'mat3x4<i32>';
71
+ mat4x2i: 'mat4x2<i32>';
72
+ mat4x3i: 'mat4x3<i32>';
73
+ mat4x4i: 'mat4x4<i32>';
74
+ mat2x2u: 'mat2x2<u32>';
75
+ mat2x3u: 'mat2x3<u32>';
76
+ mat2x4u: 'mat2x4<u32>';
77
+ mat3x2u: 'mat3x2<u32>';
78
+ mat3x3u: 'mat3x3<u32>';
79
+ mat3x4u: 'mat3x4<u32>';
80
+ mat4x2u: 'mat4x2<u32>';
81
+ mat4x3u: 'mat4x3<u32>';
82
+ mat4x4u: 'mat4x4<u32>';
83
+ mat2x2h: 'mat2x2<f16>';
84
+ mat2x3h: 'mat2x3<f16>';
85
+ mat2x4h: 'mat2x4<f16>';
86
+ mat3x2h: 'mat3x2<f16>';
87
+ mat3x3h: 'mat3x3<f16>';
88
+ mat3x4h: 'mat3x4<f16>';
89
+ mat4x2h: 'mat4x2<f16>';
90
+ mat4x3h: 'mat4x3<f16>';
91
+ mat4x4h: 'mat4x4<f16>';
92
+ };
93
+ /** @type The unaliased type */
94
+ export type AttributeShaderTypeT<T extends AttributeShaderTypeAlias | AttributeShaderType> = T extends AttributeShaderTypeAlias ? AttributeShaderTypeAliasMap[T] : T;
95
+ /** @type The unaliased type */
96
+ export type VariableShaderTypeT<T extends VariableShaderType | keyof VariableShaderTypeAliasMap> = T extends VariableShaderTypeAlias ? VariableShaderTypeAliasMap[T] : T;
97
+ type TypeOfAliasSuffix<T extends string> = T extends 'f' ? 'f32' : T extends 'i' ? 'i32' : T extends 'u' ? 'u32' : T extends 'h' ? 'f16' : never;
98
+ export type AttributeShaderTypeAliasT<T extends AttributeShaderTypeAlias> = T extends `vec2${infer S}` ? `vec2<${TypeOfAliasSuffix<S>}>` : T extends `vec3${infer S}` ? `vec3<${TypeOfAliasSuffix<S>}>` : T extends `vec4${infer S}` ? `vec4<${TypeOfAliasSuffix<S>}>` : never;
99
+ export type VariableShaderTypeAliasT<T extends VariableShaderTypeAlias> = T extends `vec2${infer S}` ? `vec2<${TypeOfAliasSuffix<S>}>` : T extends `vec3${infer S}` ? `vec3<${TypeOfAliasSuffix<S>}>` : T extends `vec4${infer S}` ? `vec4<${TypeOfAliasSuffix<S>}>` : T extends `mat2x2${infer S}` ? `mat2x2<${TypeOfAliasSuffix<S>}>` : T extends `mat2x3${infer S}` ? `mat2x3<${TypeOfAliasSuffix<S>}>` : T extends `mat2x4${infer S}` ? `mat2x4<${TypeOfAliasSuffix<S>}>` : T extends `mat3x2${infer S}` ? `mat3x2<${TypeOfAliasSuffix<S>}>` : T extends `mat3x3${infer S}` ? `mat3x3<${TypeOfAliasSuffix<S>}>` : T extends `mat3x4${infer S}` ? `mat3x4<${TypeOfAliasSuffix<S>}>` : T extends `mat4x2${infer S}` ? `mat4x2<${TypeOfAliasSuffix<S>}>` : T extends `mat4x3${infer S}` ? `mat4x3<${TypeOfAliasSuffix<S>}>` : T extends `mat4x4${infer S}` ? `mat4x4<${TypeOfAliasSuffix<S>}>` : never;
100
+ export {};
101
+ //# sourceMappingURL=shader-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-types.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-types.ts"],"names":[],"mappings":"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,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,CAAC,SAAS,SAAS,MAAM,CAAC,EAAE,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAChE,KAAK,CAAC"}
@@ -0,0 +1,30 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export {};
5
+ // : T extends `vec2<${infer S}>`
6
+ // ? `vec2<${S}>`
7
+ // : T extends `vec3<${infer S}>`
8
+ // ? `vec3<${S}>`
9
+ // : T extends `vec4<${infer S}>`
10
+ // ? `vec4<${S}>`
11
+ // : T extends `mat2x2<${infer S}>`
12
+ // ? `mat2x2<${S}>`
13
+ // : T extends `mat2x3<${infer S}>`
14
+ // ? `mat2x3<${S}>`
15
+ // : T extends `mat2x4<${infer S}>`
16
+ // ? `mat2x4<${S}>`
17
+ // : T extends `mat3x2<${infer S}>`
18
+ // ? `mat3x2<${S}>`
19
+ // : T extends `mat3x3<${infer S}>`
20
+ // ? `mat3x3<${S}>`
21
+ // : T extends `mat3x4<${infer S}>`
22
+ // ? `mat3x4<${S}>`
23
+ // : T extends `mat4x2<${infer S}>`
24
+ // ? `mat4x2<${S}>`
25
+ // : T extends `mat4x3<${infer S}>`
26
+ // ? `mat4x3<${S}>`
27
+ // : T extends `mat4x4<${infer S}>`
28
+ // ? `mat4x4<${S}>`
29
+ // : never;
30
+ //# sourceMappingURL=shader-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-types.js","sourceRoot":"","sources":["../../../src/shadertypes/shader-types/shader-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;;AAoLpC,iCAAiC;AACjC,mBAAmB;AACnB,mCAAmC;AACnC,qBAAqB;AACrB,qCAAqC;AACrC,uBAAuB;AACvB,yCAAyC;AACzC,2BAA2B;AAC3B,2CAA2C;AAC3C,6BAA6B;AAC7B,6CAA6C;AAC7C,+BAA+B;AAC/B,+CAA+C;AAC/C,iCAAiC;AACjC,iDAAiD;AACjD,mCAAmC;AACnC,mDAAmD;AACnD,qCAAqC;AACrC,qDAAqD;AACrD,uCAAuC;AACvC,uDAAuD;AACvD,yCAAyC;AACzC,yDAAyD;AACzD,2CAA2C;AAC3C,mCAAmC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel-utils.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/texture-types/pixel-utils.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG;IACtB,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sNAAsN;IACtN,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BE;AAEF,wBAAgB,SAAS,CACvB,SAAS,EAAE,SAAS,EACpB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC/C,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CA6BlC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BE;AACF,wBAAgB,UAAU,CACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACtC,IAAI,CAUN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,CA0BR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAkCN"}
@@ -45,7 +45,7 @@ export function readPixel(pixelData, x, y, bitsPerChannel) {
45
45
  const channels = [];
46
46
  // Extract each of the four channels.
47
47
  for (let i = 0; i < 4; i++) {
48
- const bits = bitsPerChannel[i];
48
+ const bits = bitsPerChannel[i] ?? 0;
49
49
  // If a channel's bit width is zero or negative, consider it not present.
50
50
  if (bits <= 0) {
51
51
  channels.push(0);
@@ -56,7 +56,7 @@ export function readPixel(pixelData, x, y, bitsPerChannel) {
56
56
  bitOffsetWithinPixel += bits;
57
57
  }
58
58
  }
59
- return [channels[0], channels[1], channels[2], channels[3]];
59
+ return [channels[0] ?? 0, channels[1] ?? 0, channels[2] ?? 0, channels[3] ?? 0];
60
60
  }
61
61
  /**
62
62
  * Encodes an RGBA pixel into a DataView at a given bit offset according to a specified bit layout.
@@ -92,10 +92,10 @@ The dataView now contains the 16-bit packed pixel value in big-endian order.
92
92
  export function writePixel(dataView, bitOffset, bitsPerChannel, pixel) {
93
93
  let currentBitOffset = bitOffset;
94
94
  for (let channel = 0; channel < 4; channel++) {
95
- const bits = bitsPerChannel[channel];
95
+ const bits = bitsPerChannel[channel] ?? 0;
96
96
  // Clamp the channel value to the maximum allowed by the bit width.
97
97
  const maxValue = (1 << bits) - 1;
98
- const channelValue = pixel[channel] & maxValue;
98
+ const channelValue = (pixel[channel] ?? 0) & maxValue;
99
99
  writeBitsToDataView(dataView, currentBitOffset, bits, channelValue);
100
100
  currentBitOffset += bits;
101
101
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel-utils.js","sourceRoot":"","sources":["../../../src/shadertypes/texture-types/pixel-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { TextureFormat, TextureFormatCompressed, TextureFormatInfo, TextureFormatCapabilities, TextureFormatColor, TextureMemoryLayout, TextureFormatDepthStencil } from "./texture-formats.js";
2
+ /** Options to calculate a texture layout */
3
+ export type TextureMemoryLayoutOptions = {
4
+ /** Number of bytes per pixel */
5
+ format: TextureFormat;
6
+ /** Width of the texture in pixels */
7
+ width: number;
8
+ /** Height of the texture in pixels */
9
+ height: number;
10
+ /** Number of images in the texture */
11
+ depth: number;
12
+ /** Alignment of each row */
13
+ byteAlignment: number;
14
+ };
15
+ /** Class that helps applications work with texture formats */
16
+ export declare class TextureFormatDecoder {
17
+ /** Checks if a texture format is color */
18
+ isColor(format: TextureFormat): format is TextureFormatColor;
19
+ /** Checks if a texture format is depth or stencil */
20
+ isDepthStencil(format: TextureFormat): format is TextureFormatDepthStencil;
21
+ /** Checks if a texture format is compressed */
22
+ isCompressed(format: TextureFormat): format is TextureFormatCompressed;
23
+ /** Returns information about a texture format, e.g. attachment type, components, byte length and flags (integer, signed, normalized) */
24
+ getInfo(format: TextureFormat): TextureFormatInfo;
25
+ /** "static" capabilities of a texture format. @note Needs to be adjusted against current device */
26
+ getCapabilities(format: TextureFormat): TextureFormatCapabilities;
27
+ /** Computes the memory layout for a texture, in particular including row byte alignment */
28
+ computeMemoryLayout(opts: TextureMemoryLayoutOptions): TextureMemoryLayout;
29
+ }
30
+ /** Decoder for luma.gl texture types */
31
+ export declare const textureFormatDecoder: TextureFormatDecoder;
32
+ /**
33
+ * Decodes a texture format, returning e.g. attatchment type, components, byte length and flags (integer, signed, normalized)
34
+ */
35
+ export declare function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo;
36
+ //# sourceMappingURL=texture-format-decoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texture-format-decoder.d.ts","sourceRoot":"","sources":["../../../src/shadertypes/texture-types/texture-format-decoder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EAC1B,6BAA0B;AAa3B,4CAA4C;AAC5C,MAAM,MAAM,0BAA0B,GAAG;IACvC,gCAAgC;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,8DAA8D;AAC9D,qBAAa,oBAAoB;IAC/B,0CAA0C;IAC1C,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI,kBAAkB;IAI5D,qDAAqD;IACrD,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI,yBAAyB;IAI1E,+CAA+C;IAC/C,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI,uBAAuB;IAItE,wIAAwI;IACxI,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB;IAIjD,oGAAoG;IACpG,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,yBAAyB;IAIjE,2FAA2F;IAC3F,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,mBAAmB;CAG3E;AAED,wCAAwC;AACxC,eAAO,MAAM,oBAAoB,sBAA6B,CAAC;AAqE/D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAiE7E"}