@luma.gl/core 9.2.5 → 9.3.0-alpha.10

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 (280) 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 +196 -10
  16. package/dist/adapter/device.js.map +1 -1
  17. package/dist/adapter/luma.js +1 -1
  18. package/dist/adapter/luma.js.map +1 -1
  19. package/dist/adapter/presentation-context.d.ts +11 -0
  20. package/dist/adapter/presentation-context.d.ts.map +1 -0
  21. package/dist/adapter/presentation-context.js +12 -0
  22. package/dist/adapter/presentation-context.js.map +1 -0
  23. package/dist/adapter/resources/buffer.d.ts +5 -5
  24. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  25. package/dist/adapter/resources/buffer.js +18 -7
  26. package/dist/adapter/resources/buffer.js.map +1 -1
  27. package/dist/adapter/resources/command-buffer.d.ts +3 -1
  28. package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
  29. package/dist/adapter/resources/command-buffer.js +3 -1
  30. package/dist/adapter/resources/command-buffer.js.map +1 -1
  31. package/dist/adapter/resources/command-encoder.d.ts +30 -7
  32. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  33. package/dist/adapter/resources/command-encoder.js +68 -2
  34. package/dist/adapter/resources/command-encoder.js.map +1 -1
  35. package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
  36. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
  37. package/dist/adapter/resources/fence.d.ts +16 -0
  38. package/dist/adapter/resources/fence.d.ts.map +1 -0
  39. package/dist/adapter/resources/fence.js +17 -0
  40. package/dist/adapter/resources/fence.js.map +1 -0
  41. package/dist/adapter/resources/framebuffer.d.ts +1 -1
  42. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  43. package/dist/adapter/resources/framebuffer.js +15 -12
  44. package/dist/adapter/resources/framebuffer.js.map +1 -1
  45. package/dist/adapter/resources/query-set.d.ts +17 -1
  46. package/dist/adapter/resources/query-set.d.ts.map +1 -1
  47. package/dist/adapter/resources/query-set.js.map +1 -1
  48. package/dist/adapter/resources/render-pipeline.d.ts +28 -10
  49. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  50. package/dist/adapter/resources/render-pipeline.js +21 -2
  51. package/dist/adapter/resources/render-pipeline.js.map +1 -1
  52. package/dist/adapter/resources/resource.d.ts +13 -0
  53. package/dist/adapter/resources/resource.d.ts.map +1 -1
  54. package/dist/adapter/resources/resource.js +243 -14
  55. package/dist/adapter/resources/resource.js.map +1 -1
  56. package/dist/adapter/resources/shader.js +27 -25
  57. package/dist/adapter/resources/shader.js.map +1 -1
  58. package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
  59. package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
  60. package/dist/adapter/resources/shared-render-pipeline.js +25 -0
  61. package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
  62. package/dist/adapter/resources/texture-view.d.ts +1 -1
  63. package/dist/adapter/resources/texture-view.d.ts.map +1 -1
  64. package/dist/adapter/resources/texture.d.ts +168 -28
  65. package/dist/adapter/resources/texture.d.ts.map +1 -1
  66. package/dist/adapter/resources/texture.js +284 -25
  67. package/dist/adapter/resources/texture.js.map +1 -1
  68. package/dist/adapter/types/attachments.d.ts +1 -1
  69. package/dist/adapter/types/attachments.d.ts.map +1 -1
  70. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  71. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  72. package/dist/adapter/types/parameters.d.ts +3 -1
  73. package/dist/adapter/types/parameters.d.ts.map +1 -1
  74. package/dist/adapter/types/parameters.js +1 -0
  75. package/dist/adapter/types/parameters.js.map +1 -1
  76. package/dist/adapter/types/shader-layout.d.ts +10 -6
  77. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  78. package/dist/adapter/types/uniforms.d.ts +6 -0
  79. package/dist/adapter/types/uniforms.d.ts.map +1 -1
  80. package/dist/adapter-utils/bind-groups.d.ts +9 -0
  81. package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
  82. package/dist/adapter-utils/bind-groups.js +41 -0
  83. package/dist/adapter-utils/bind-groups.js.map +1 -0
  84. package/dist/adapter-utils/format-compiler-log.d.ts.map +1 -1
  85. package/dist/adapter-utils/format-compiler-log.js +23 -15
  86. package/dist/adapter-utils/format-compiler-log.js.map +1 -1
  87. package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
  88. package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
  89. package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
  90. package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
  91. package/dist/dist.dev.js +2692 -645
  92. package/dist/dist.min.js +10 -9
  93. package/dist/factories/bind-group-factory.d.ts +20 -0
  94. package/dist/factories/bind-group-factory.d.ts.map +1 -0
  95. package/dist/factories/bind-group-factory.js +79 -0
  96. package/dist/factories/bind-group-factory.js.map +1 -0
  97. package/dist/factories/core-module-state.d.ts +7 -0
  98. package/dist/factories/core-module-state.d.ts.map +1 -0
  99. package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
  100. package/dist/factories/core-module-state.js.map +1 -0
  101. package/dist/factories/pipeline-factory.d.ts +54 -0
  102. package/dist/factories/pipeline-factory.d.ts.map +1 -0
  103. package/dist/factories/pipeline-factory.js +270 -0
  104. package/dist/factories/pipeline-factory.js.map +1 -0
  105. package/dist/factories/shader-factory.d.ts +20 -0
  106. package/dist/factories/shader-factory.d.ts.map +1 -0
  107. package/dist/factories/shader-factory.js +84 -0
  108. package/dist/factories/shader-factory.js.map +1 -0
  109. package/dist/index.cjs +2427 -554
  110. package/dist/index.cjs.map +4 -4
  111. package/dist/index.d.ts +30 -14
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +19 -7
  114. package/dist/index.js.map +1 -1
  115. package/dist/portable/shader-block-writer.d.ts +51 -0
  116. package/dist/portable/shader-block-writer.d.ts.map +1 -0
  117. package/dist/portable/shader-block-writer.js +185 -0
  118. package/dist/portable/shader-block-writer.js.map +1 -0
  119. package/dist/portable/uniform-block.d.ts +1 -1
  120. package/dist/portable/uniform-block.d.ts.map +1 -1
  121. package/dist/portable/uniform-store.d.ts +55 -24
  122. package/dist/portable/uniform-store.d.ts.map +1 -1
  123. package/dist/portable/uniform-store.js +73 -25
  124. package/dist/portable/uniform-store.js.map +1 -1
  125. package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
  126. package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
  127. package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
  128. package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
  129. package/dist/shadertypes/data-types/data-types.d.ts +31 -12
  130. package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
  131. package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
  132. package/dist/shadertypes/data-types/decode-data-types.js +2 -1
  133. package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
  134. package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
  135. package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
  136. package/dist/shadertypes/image-types/image-types.js.map +1 -0
  137. package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
  138. package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
  139. package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
  140. package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
  141. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
  142. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
  143. package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +43 -4
  144. package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
  145. package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
  146. package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
  147. package/dist/shadertypes/shader-types/shader-types.js +30 -0
  148. package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
  149. package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
  150. package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +4 -4
  151. package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
  152. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
  153. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
  154. package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +109 -37
  155. package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
  156. package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
  157. package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
  158. package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
  159. package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
  160. package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +10 -9
  161. package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
  162. package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
  163. package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
  164. package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
  165. package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
  166. package/dist/shadertypes/texture-types/texture-layout.d.ts +5 -0
  167. package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
  168. package/dist/shadertypes/texture-types/texture-layout.js +41 -0
  169. package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
  170. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
  171. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
  172. package/dist/shadertypes/vertex-types/vertex-format-decoder.js +106 -0
  173. package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
  174. package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
  175. package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
  176. package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
  177. package/dist/utils/array-equal.d.ts +1 -1
  178. package/dist/utils/array-equal.d.ts.map +1 -1
  179. package/dist/utils/array-equal.js +15 -9
  180. package/dist/utils/array-equal.js.map +1 -1
  181. package/dist/utils/assert.d.ts +5 -0
  182. package/dist/utils/assert.d.ts.map +1 -0
  183. package/dist/utils/assert.js +17 -0
  184. package/dist/utils/assert.js.map +1 -0
  185. package/dist/utils/stats-manager.d.ts.map +1 -1
  186. package/dist/utils/stats-manager.js +61 -1
  187. package/dist/utils/stats-manager.js.map +1 -1
  188. package/package.json +6 -6
  189. package/src/adapter/canvas-context.ts +7 -556
  190. package/src/adapter/canvas-observer.ts +130 -0
  191. package/src/adapter/canvas-surface.ts +521 -0
  192. package/src/adapter/device.ts +312 -24
  193. package/src/adapter/presentation-context.ts +16 -0
  194. package/src/adapter/resources/buffer.ts +19 -9
  195. package/src/adapter/resources/command-buffer.ts +4 -2
  196. package/src/adapter/resources/command-encoder.ts +101 -10
  197. package/src/adapter/resources/compute-pipeline.ts +2 -2
  198. package/src/adapter/resources/fence.ts +32 -0
  199. package/src/adapter/resources/framebuffer.ts +16 -13
  200. package/src/adapter/resources/query-set.ts +17 -1
  201. package/src/adapter/resources/render-pipeline.ts +52 -16
  202. package/src/adapter/resources/resource.ts +289 -14
  203. package/src/adapter/resources/shader.ts +28 -28
  204. package/src/adapter/resources/shared-render-pipeline.ts +40 -0
  205. package/src/adapter/resources/texture-view.ts +1 -1
  206. package/src/adapter/resources/texture.ts +427 -49
  207. package/src/adapter/types/attachments.ts +1 -1
  208. package/src/adapter/types/buffer-layout.ts +1 -1
  209. package/src/adapter/types/parameters.ts +4 -1
  210. package/src/adapter/types/shader-layout.ts +15 -9
  211. package/src/adapter/types/uniforms.ts +12 -0
  212. package/src/adapter-utils/bind-groups.ts +71 -0
  213. package/src/adapter-utils/format-compiler-log.ts +23 -15
  214. package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
  215. package/src/factories/bind-group-factory.ts +139 -0
  216. package/src/factories/core-module-state.ts +11 -0
  217. package/src/factories/pipeline-factory.ts +328 -0
  218. package/src/factories/shader-factory.ts +103 -0
  219. package/src/index.ts +70 -26
  220. package/src/portable/shader-block-writer.ts +254 -0
  221. package/src/portable/uniform-block.ts +1 -1
  222. package/src/portable/uniform-store.ts +98 -40
  223. package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
  224. package/src/shadertypes/data-types/data-types.ts +100 -48
  225. package/src/shadertypes/data-types/decode-data-types.ts +2 -1
  226. package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
  227. package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
  228. package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
  229. package/src/shadertypes/shader-types/shader-types.ts +207 -0
  230. package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
  231. package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +166 -45
  232. package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
  233. package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +10 -9
  234. package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
  235. package/src/shadertypes/texture-types/texture-layout.ts +60 -0
  236. package/src/shadertypes/vertex-types/vertex-format-decoder.ts +131 -0
  237. package/src/shadertypes/vertex-types/vertex-formats.ts +183 -0
  238. package/src/utils/array-equal.ts +21 -9
  239. package/src/utils/assert.ts +18 -0
  240. package/src/utils/stats-manager.ts +76 -2
  241. package/dist/image-utils/image-types.d.ts.map +0 -1
  242. package/dist/image-utils/image-types.js.map +0 -1
  243. package/dist/portable/uniform-buffer-layout.d.ts +0 -28
  244. package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
  245. package/dist/portable/uniform-buffer-layout.js +0 -96
  246. package/dist/portable/uniform-buffer-layout.js.map +0 -1
  247. package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
  248. package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
  249. package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
  250. package/dist/shadertypes/data-types/shader-types.d.ts +0 -45
  251. package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
  252. package/dist/shadertypes/data-types/shader-types.js.map +0 -1
  253. package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
  254. package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
  255. package/dist/shadertypes/textures/texture-format-decoder.d.ts +0 -18
  256. package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
  257. package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
  258. package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
  259. package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
  260. package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
  261. package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
  262. package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
  263. package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
  264. package/dist/shadertypes/textures/texture-formats.js.map +0 -1
  265. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
  266. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
  267. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
  268. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
  269. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
  270. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
  271. package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
  272. package/src/portable/uniform-buffer-layout.ts +0 -118
  273. package/src/shadertypes/data-types/shader-types.ts +0 -87
  274. package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
  275. package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
  276. /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
  277. /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
  278. /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
  279. /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
  280. /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
@@ -13,7 +13,7 @@ export type PrimitiveDataType = 'u32' | 'i32' | 'f32' | 'f16';
13
13
  * Signed data types describe signed and unsigned integers as well as floats of varying sizes
14
14
  * @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
15
15
  */
16
- export type SignedDataType =
16
+ export type DataType =
17
17
  | 'uint8'
18
18
  | 'sint8'
19
19
  | 'uint16'
@@ -23,6 +23,8 @@ export type SignedDataType =
23
23
  | 'float16'
24
24
  | 'float32';
25
25
 
26
+ export type SignedDataType = DataType;
27
+
26
28
  /**
27
29
  * Normalized data types describe signed and unsigned integers as well as floats of varying sizes together with normalization behavior
28
30
  * @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
@@ -32,65 +34,115 @@ export type SignedDataType =
32
34
  export type NormalizedDataType = SignedDataType | 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16';
33
35
 
34
36
  /** Returns information about a signed or normalized DataType */
35
- export type DataTypeInfo = {
36
- signedType: SignedDataType;
37
- primitiveType: PrimitiveDataType;
38
- byteLength: 1 | 2 | 4;
39
- normalized: boolean;
40
- integer: boolean;
41
- signed: boolean;
37
+ export type DataTypeInfo<T extends NormalizedDataType = NormalizedDataType> = {
38
+ /** The corresponding data type without normalization */
39
+ signedType: SignedDataTypeT<T>;
40
+ /** The primitive data type (what the shader sees) */
41
+ primitiveType: PrimitiveDataTypeT<T>;
42
+ /** @type number - Length in bytes of the data type */
43
+ byteLength: DataTypeByteLengthT<T>;
44
+ /** @type boolean - indicating whether the data type is normalized */
45
+ normalized: DataTypeIsNormalizedT<T>;
46
+ /** @type boolean - indicating whether the data type is integer */
47
+ integer: DataTypeIsIntegerT<T>;
48
+ /** @type boolean - indicating whether the data type is signed */
49
+ signed: DataTypeIsSignedT<T>;
42
50
  };
43
51
 
44
- /** Returns a typed array appropriate to hold the actual values of a data type (integers for normalized integers) */
45
- export type DataTypeArray<T extends NormalizedDataType> = T extends 'uint8'
46
- ? Uint8Array
47
- : T extends 'sint8'
48
- ? Int8Array
49
- : T extends 'unorm8'
50
- ? Uint8Array
51
- : T extends 'snorm8'
52
- ? Int8Array
53
- : T extends 'uint16'
54
- ? Uint16Array
55
- : T extends 'sint16'
56
- ? Int16Array
57
- : T extends 'unorm16'
58
- ? Uint16Array
59
- : T extends 'snorm16'
60
- ? Int16Array
61
- : T extends 'uint32'
62
- ? Uint32Array
63
- : T extends 'sint32'
64
- ? Int32Array
65
- : T extends 'float16'
66
- ? Uint16Array
67
- : T extends 'float32'
68
- ? Float32Array
69
- : never;
52
+ /** @type the primitive data type seen by the shader */
53
+ export type PrimitiveDataTypeT<T extends NormalizedDataType> = T extends 'float32'
54
+ ? 'f32'
55
+ : T extends 'float16'
56
+ ? 'f16'
57
+ : T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16'
58
+ ? 'f32'
59
+ : T extends 'uint8' | 'uint16' | 'uint32'
60
+ ? 'u32'
61
+ : T extends 'sint8' | 'sint16' | 'sint32'
62
+ ? 'i32'
63
+ : never;
64
+
65
+ /** @type The signed data type representing a normalized data type */
66
+ export type SignedDataTypeT<T extends NormalizedDataType> = T extends 'unorm8'
67
+ ? 'uint8'
68
+ : T extends 'snorm8'
69
+ ? 'sint8'
70
+ : T extends 'unorm16'
71
+ ? 'uint16'
72
+ : T extends 'snorm16'
73
+ ? 'sint16'
74
+ : T extends NormalizedDataType
75
+ ? T
76
+ : never;
77
+
78
+ /** @type a number type that is is the length in bytes of the data type */
79
+ export type DataTypeByteLengthT<T extends NormalizedDataType = NormalizedDataType> = T extends
80
+ | 'uint8'
81
+ | 'sint8'
82
+ | 'unorm8'
83
+ | 'snorm8'
84
+ ? 1
85
+ : T extends 'uint16' | 'sint16' | 'unorm16' | 'snorm16' | 'float16'
86
+ ? 2
87
+ : T extends 'uint32' | 'sint32' | 'float32'
88
+ ? 4
89
+ : never;
90
+
91
+ /** @type a boolean type that is true if the data format is signed */
92
+ export type DataTypeIsSignedT<T extends NormalizedDataType = NormalizedDataType> = T extends
93
+ | 'sint8'
94
+ | 'sint16'
95
+ | 'sint32'
96
+ ? true
97
+ : false;
70
98
 
71
- /** Returns a type array appropriate to hold the logical values of a data type (floats for normalized integers) */
72
- export type NormalizedDataTypeArray<T extends NormalizedDataType> = T extends 'uint8'
73
- ? Uint8Array
99
+ /** @type a boolean type that is true if the data format is a normalized format */
100
+ export type DataTypeIsNormalizedT<T extends NormalizedDataType = NormalizedDataType> =
101
+ T extends SignedDataType ? false : true;
102
+
103
+ /** @type a boolean type that is true if the data format is an integer format */
104
+ export type DataTypeIsIntegerT<T extends NormalizedDataType = NormalizedDataType> = T extends
105
+ | 'uint8'
106
+ | 'sint8'
107
+ | 'uint16'
108
+ | 'sint16'
109
+ | 'uint32'
110
+ | 'sint32'
111
+ ? true
112
+ : false;
113
+
114
+ /** @type A typed array constructor type appropriate to hold the actual values of a data type (i.e. integers for normalized data types) */
115
+ export type TypedArrayConstructorT<T extends NormalizedDataType> = T extends 'uint8'
116
+ ? Uint8ArrayConstructor
74
117
  : T extends 'sint8'
75
- ? Int8Array
118
+ ? Int8ArrayConstructor
76
119
  : T extends 'unorm8'
77
- ? Float32Array
120
+ ? Uint8ArrayConstructor
78
121
  : T extends 'snorm8'
79
- ? Float32Array
122
+ ? Int8ArrayConstructor
80
123
  : T extends 'uint16'
81
- ? Uint16Array
124
+ ? Uint16ArrayConstructor
82
125
  : T extends 'sint16'
83
- ? Int16Array
126
+ ? Int16ArrayConstructor
84
127
  : T extends 'unorm16'
85
- ? Uint16Array
128
+ ? Uint16ArrayConstructor
86
129
  : T extends 'snorm16'
87
- ? Int16Array
130
+ ? Int16ArrayConstructor
88
131
  : T extends 'uint32'
89
- ? Uint32Array
132
+ ? Uint32ArrayConstructor
90
133
  : T extends 'sint32'
91
- ? Int32Array
134
+ ? Int32ArrayConstructor
92
135
  : T extends 'float16'
93
- ? Float32Array
136
+ ? Uint16ArrayConstructor
94
137
  : T extends 'float32'
95
- ? Float32Array
138
+ ? Float32ArrayConstructor
96
139
  : never;
140
+
141
+ /** @type A typed array constructor appropriate to hold the logical values of a data type (i.e. floats for normalized data types) */
142
+ export type NormalizedTypedArrayConstructorT<T extends NormalizedDataType> = T extends
143
+ | 'unorm8'
144
+ | 'snorm8'
145
+ | 'unorm16'
146
+ | 'snorm16'
147
+ ? Float32ArrayConstructor
148
+ : TypedArrayConstructorT<T>;
@@ -10,10 +10,11 @@ import {PrimitiveDataType, SignedDataType, NormalizedDataType, DataTypeInfo} fro
10
10
  * @returns underlying primitive / signed types, byte length, normalization, integer, signed flags
11
11
  */
12
12
  export function getDataTypeInfo(type: NormalizedDataType): DataTypeInfo {
13
- const [signedType, primitiveType, byteLength] = NORMALIZED_TYPE_MAP[type];
14
13
  const normalized: boolean = type.includes('norm');
15
14
  const integer: boolean = !normalized && !type.startsWith('float');
16
15
  const signed: boolean = type.startsWith('s');
16
+ const typeInfo = NORMALIZED_TYPE_MAP[type];
17
+ const [signedType, primitiveType, byteLength] = typeInfo || ['uint8 ', 'i32', 1];
17
18
  return {
18
19
  signedType,
19
20
  primitiveType,
@@ -15,13 +15,6 @@ export type ExternalImage =
15
15
  | HTMLCanvasElement
16
16
  | OffscreenCanvas;
17
17
 
18
- export type ExternalImageData = {
19
- data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
20
- byteOffset?: number;
21
- bytesPerRow?: number;
22
- rowsPerImage?: number;
23
- };
24
-
25
18
  /** Check if data is an external image */
26
19
  export function isExternalImage(data: unknown): data is ExternalImage {
27
20
  return (
@@ -0,0 +1,340 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {PrimitiveDataType} from '../data-types/data-types';
6
+ import type {CompositeShaderType, VariableShaderType} from './shader-types';
7
+ import {alignTo} from '../data-types/decode-data-types';
8
+ import {getVariableShaderTypeInfo, resolveVariableShaderTypeAlias} from './shader-type-decoder';
9
+
10
+ /**
11
+ * Describes the packing for one flattened field in a shader block.
12
+ *
13
+ * Offsets, sizes, and strides are expressed in 32-bit words so the result can
14
+ * be consumed directly by typed-array writers.
15
+ */
16
+ export type ShaderBlockLayoutEntry = {
17
+ /** Offset in 32-bit words from the start of the block. */
18
+ offset: number;
19
+ /** Occupied size in 32-bit words, excluding external array stride. */
20
+ size: number;
21
+ /** Number of logical scalar components in the declared value. */
22
+ components: number;
23
+ /** Number of matrix columns, or `1` for scalars and vectors. */
24
+ columns: number;
25
+ /** Number of rows in each column, or vector length for vectors. */
26
+ rows: number;
27
+ /** Distance between matrix columns in 32-bit words. */
28
+ columnStride: number;
29
+ /** Canonical shader type after alias resolution. */
30
+ shaderType: VariableShaderType;
31
+ /** Scalar data type used to write the value. */
32
+ type: PrimitiveDataType;
33
+ };
34
+
35
+ /**
36
+ * Options for {@link makeShaderBlockLayout}.
37
+ */
38
+ export type ShaderBlockLayoutOptions = {
39
+ /**
40
+ * Packing rules to apply when building the layout.
41
+ *
42
+ * Defaults to `'std140'`.
43
+ */
44
+ layout?: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
45
+ };
46
+
47
+ /**
48
+ * Immutable layout metadata for a uniform or storage-style shader block.
49
+ */
50
+ export type ShaderBlockLayout = {
51
+ /** Packing rules used when this layout was created. */
52
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage';
53
+ /** Exact number of packed bytes required by the block. */
54
+ byteLength: number;
55
+ /** Original composite shader type declarations keyed by top-level field. */
56
+ uniformTypes: Record<string, CompositeShaderType>;
57
+ /** Flattened leaf field layouts keyed by field path. */
58
+ fields: Record<string, ShaderBlockLayoutEntry>;
59
+ };
60
+
61
+ /**
62
+ * Builds a deterministic shader-block layout from composite shader type declarations.
63
+ *
64
+ * The returned value is pure layout metadata. It records the packed field
65
+ * offsets and exact packed byte length, but it does not allocate buffers or
66
+ * serialize values.
67
+ */
68
+ export function makeShaderBlockLayout(
69
+ uniformTypes: Readonly<Record<string, CompositeShaderType>>,
70
+ options: ShaderBlockLayoutOptions = {}
71
+ ): ShaderBlockLayout {
72
+ const copiedUniformTypes = {...uniformTypes};
73
+ const layout = options.layout ?? 'std140';
74
+ const fields: Record<string, ShaderBlockLayoutEntry> = {};
75
+
76
+ let size = 0;
77
+ for (const [key, uniformType] of Object.entries(copiedUniformTypes)) {
78
+ size = addToLayout(fields, key, uniformType, size, layout);
79
+ }
80
+
81
+ size = alignTo(size, getTypeAlignment(copiedUniformTypes, layout));
82
+
83
+ return {
84
+ layout,
85
+ byteLength: size * 4,
86
+ uniformTypes: copiedUniformTypes,
87
+ fields
88
+ };
89
+ }
90
+
91
+ /**
92
+ * Returns the layout metadata for a scalar, vector, or matrix leaf type.
93
+ *
94
+ * The result includes both the occupied size in 32-bit words and the alignment
95
+ * requirement that must be applied before placing the value in a shader block.
96
+ */
97
+ export function getLeafLayoutInfo(
98
+ type: VariableShaderType,
99
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
100
+ ): Omit<ShaderBlockLayoutEntry, 'offset'> & {alignment: 1 | 2 | 4} {
101
+ const resolvedType = resolveVariableShaderTypeAlias(type);
102
+ const decodedType = getVariableShaderTypeInfo(resolvedType);
103
+ const matrixMatch = /^mat(\d)x(\d)<.+>$/.exec(resolvedType);
104
+
105
+ if (matrixMatch) {
106
+ const columns = Number(matrixMatch[1]);
107
+ const rows = Number(matrixMatch[2]);
108
+ const columnInfo = getVectorLayoutInfo(
109
+ rows as 2 | 3 | 4,
110
+ resolvedType,
111
+ decodedType.type,
112
+ layout
113
+ );
114
+ const columnStride = getMatrixColumnStride(columnInfo.size, columnInfo.alignment, layout);
115
+
116
+ return {
117
+ alignment: columnInfo.alignment,
118
+ size: columns * columnStride,
119
+ components: columns * rows,
120
+ columns,
121
+ rows,
122
+ columnStride,
123
+ shaderType: resolvedType,
124
+ type: decodedType.type
125
+ };
126
+ }
127
+
128
+ const vectorMatch = /^vec(\d)<.+>$/.exec(resolvedType);
129
+ if (vectorMatch) {
130
+ return getVectorLayoutInfo(
131
+ Number(vectorMatch[1]) as 2 | 3 | 4,
132
+ resolvedType,
133
+ decodedType.type,
134
+ layout
135
+ );
136
+ }
137
+
138
+ return {
139
+ alignment: 1,
140
+ size: 1,
141
+ components: 1,
142
+ columns: 1,
143
+ rows: 1,
144
+ columnStride: 1,
145
+ shaderType: resolvedType,
146
+ type: decodedType.type
147
+ };
148
+ }
149
+
150
+ /**
151
+ * Type guard for composite struct declarations.
152
+ */
153
+ export function isCompositeShaderTypeStruct(
154
+ value: CompositeShaderType
155
+ ): value is Record<string, CompositeShaderType> {
156
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
157
+ }
158
+
159
+ /**
160
+ * Recursively adds a composite type to the flattened field map.
161
+ *
162
+ * @returns The next free 32-bit-word offset after the inserted type.
163
+ */
164
+ function addToLayout(
165
+ fields: Record<string, ShaderBlockLayoutEntry>,
166
+ name: string,
167
+ type: CompositeShaderType,
168
+ offset: number,
169
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
170
+ ): number {
171
+ if (typeof type === 'string') {
172
+ const info = getLeafLayoutInfo(type, layout);
173
+ const alignedOffset = alignTo(offset, info.alignment);
174
+ fields[name] = {
175
+ offset: alignedOffset,
176
+ ...info
177
+ };
178
+ return alignedOffset + info.size;
179
+ }
180
+
181
+ if (Array.isArray(type)) {
182
+ if (Array.isArray(type[0])) {
183
+ throw new Error(`Nested arrays are not supported for ${name}`);
184
+ }
185
+
186
+ const elementType = type[0] as CompositeShaderType;
187
+ const length = type[1] as number;
188
+ const stride = getArrayStride(elementType, layout);
189
+ const arrayOffset = alignTo(offset, getTypeAlignment(type, layout));
190
+
191
+ for (let i = 0; i < length; i++) {
192
+ addToLayout(fields, `${name}[${i}]`, elementType, arrayOffset + i * stride, layout);
193
+ }
194
+ return arrayOffset + stride * length;
195
+ }
196
+
197
+ if (isCompositeShaderTypeStruct(type)) {
198
+ const structAlignment = getTypeAlignment(type, layout);
199
+ let structOffset = alignTo(offset, structAlignment);
200
+ for (const [memberName, memberType] of Object.entries(type)) {
201
+ structOffset = addToLayout(fields, `${name}.${memberName}`, memberType, structOffset, layout);
202
+ }
203
+ return alignTo(structOffset, structAlignment);
204
+ }
205
+
206
+ throw new Error(`Unsupported CompositeShaderType for ${name}`);
207
+ }
208
+
209
+ /**
210
+ * Returns the occupied size of a composite type in 32-bit words.
211
+ */
212
+ function getTypeSize(
213
+ type: CompositeShaderType,
214
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
215
+ ): number {
216
+ if (typeof type === 'string') {
217
+ return getLeafLayoutInfo(type, layout).size;
218
+ }
219
+
220
+ if (Array.isArray(type)) {
221
+ const elementType = type[0] as CompositeShaderType;
222
+ const length = type[1] as number;
223
+
224
+ if (Array.isArray(elementType)) {
225
+ throw new Error('Nested arrays are not supported');
226
+ }
227
+
228
+ return getArrayStride(elementType, layout) * length;
229
+ }
230
+
231
+ let size = 0;
232
+ for (const memberType of Object.values(type)) {
233
+ const compositeMemberType = memberType as CompositeShaderType;
234
+ size = alignTo(size, getTypeAlignment(compositeMemberType, layout));
235
+ size += getTypeSize(compositeMemberType, layout);
236
+ }
237
+
238
+ return alignTo(size, getTypeAlignment(type, layout));
239
+ }
240
+
241
+ /**
242
+ * Returns the required alignment of a composite type in 32-bit words.
243
+ */
244
+ function getTypeAlignment(
245
+ type: CompositeShaderType,
246
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
247
+ ): 1 | 2 | 4 {
248
+ if (typeof type === 'string') {
249
+ return getLeafLayoutInfo(type, layout).alignment;
250
+ }
251
+
252
+ if (Array.isArray(type)) {
253
+ const elementType = type[0] as CompositeShaderType;
254
+ const elementAlignment = getTypeAlignment(elementType, layout);
255
+ return uses16ByteArrayAlignment(layout)
256
+ ? (Math.max(elementAlignment, 4) as 1 | 2 | 4)
257
+ : elementAlignment;
258
+ }
259
+
260
+ let maxAlignment: 1 | 2 | 4 = 1;
261
+ for (const memberType of Object.values(type)) {
262
+ const memberAlignment = getTypeAlignment(memberType as CompositeShaderType, layout);
263
+ maxAlignment = Math.max(maxAlignment, memberAlignment) as 1 | 2 | 4;
264
+ }
265
+
266
+ return uses16ByteStructAlignment(layout)
267
+ ? (Math.max(maxAlignment, 4) as 1 | 2 | 4)
268
+ : maxAlignment;
269
+ }
270
+
271
+ /**
272
+ * Returns the layout metadata for a vector leaf type.
273
+ */
274
+ function getVectorLayoutInfo(
275
+ components: 2 | 3 | 4,
276
+ shaderType: VariableShaderType,
277
+ type: PrimitiveDataType,
278
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
279
+ ): Omit<ShaderBlockLayoutEntry, 'offset'> & {alignment: 1 | 2 | 4} {
280
+ return {
281
+ alignment: components === 2 ? 2 : 4,
282
+ size: components === 3 ? 3 : components,
283
+ components,
284
+ columns: 1,
285
+ rows: components,
286
+ columnStride: components === 3 ? 3 : components,
287
+ shaderType,
288
+ type
289
+ };
290
+ }
291
+
292
+ /**
293
+ * Returns the stride of an array element in 32-bit words.
294
+ *
295
+ * This includes any layout-specific padding between adjacent array elements.
296
+ */
297
+ function getArrayStride(
298
+ elementType: CompositeShaderType,
299
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
300
+ ): number {
301
+ const elementSize = getTypeSize(elementType, layout);
302
+ const elementAlignment = getTypeAlignment(elementType, layout);
303
+ return getArrayLikeStride(elementSize, elementAlignment, layout);
304
+ }
305
+
306
+ /**
307
+ * Returns the common stride rule shared by array-like elements in the target layout.
308
+ */
309
+ function getArrayLikeStride(
310
+ size: number,
311
+ alignment: 1 | 2 | 4,
312
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
313
+ ): number {
314
+ return alignTo(size, uses16ByteArrayAlignment(layout) ? 4 : alignment);
315
+ }
316
+
317
+ /**
318
+ * Returns the stride of a matrix column in 32-bit words.
319
+ */
320
+ function getMatrixColumnStride(
321
+ size: number,
322
+ alignment: 1 | 2 | 4,
323
+ layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'
324
+ ): number {
325
+ return layout === 'std140' ? 4 : alignTo(size, alignment);
326
+ }
327
+
328
+ /**
329
+ * Returns `true` when arrays must be rounded up to 16-byte boundaries.
330
+ */
331
+ function uses16ByteArrayAlignment(layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'): boolean {
332
+ return layout === 'std140' || layout === 'wgsl-uniform';
333
+ }
334
+
335
+ /**
336
+ * Returns `true` when structs must be rounded up to 16-byte boundaries.
337
+ */
338
+ function uses16ByteStructAlignment(layout: 'std140' | 'wgsl-uniform' | 'wgsl-storage'): boolean {
339
+ return layout === 'std140' || layout === 'wgsl-uniform';
340
+ }
@@ -2,29 +2,56 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {PrimitiveDataType} from './data-types';
6
- import type {
7
- VariableShaderType,
8
- AttributeShaderType,
9
- AttributeShaderTypeInfo,
10
- VariableShaderTypeAlias,
11
- AttributeShaderTypeAlias
5
+ import {type PrimitiveDataType} from '../data-types/data-types';
6
+ import {
7
+ type VariableShaderType,
8
+ type AttributeShaderType,
9
+ type VariableShaderTypeAlias,
10
+ type AttributeShaderTypeAlias
12
11
  } from './shader-types';
13
12
 
14
- /** Split a uniform type string into type and components */
15
- export function getVariableShaderTypeInfo(format: VariableShaderType): {
13
+ /** Information extracted from a VariableShaderType constant */
14
+ export type VariableShaderTypeInfo = {
16
15
  type: PrimitiveDataType;
17
16
  components: number;
18
- } {
19
- const decoded = UNIFORM_FORMATS[format];
17
+ };
18
+
19
+ /** Information extracted from a AttributeShaderType constant */
20
+ export type AttributeShaderTypeInfo = {
21
+ /** WGSL-style primitive data type, f32, i32, u32 */
22
+ primitiveType: PrimitiveDataType;
23
+ /** Whether this is a normalized integer (that must be used as float) */
24
+ components: 1 | 2 | 3 | 4;
25
+ /** Length in bytes of the data for one vertex */
26
+ byteLength?: number;
27
+ /** Whether this is for integer or float vert */
28
+ integer: boolean;
29
+ /** Whether this data type is signed */
30
+ signed: boolean;
31
+ };
32
+
33
+ /** Split a uniform type string into type and components */
34
+ export function getVariableShaderTypeInfo(
35
+ format: VariableShaderType | VariableShaderTypeAlias
36
+ ): VariableShaderTypeInfo {
37
+ const resolvedFormat = resolveVariableShaderTypeAlias(format);
38
+ const decoded = UNIFORM_FORMATS[resolvedFormat];
39
+ if (!decoded) {
40
+ throw new Error(`Unsupported variable shader type: ${format}`);
41
+ }
20
42
  return decoded;
21
43
  }
22
44
 
23
45
  /** Decodes a vertex type, returning byte length and flags (integer, signed, normalized) */
24
46
  export function getAttributeShaderTypeInfo(
25
- attributeType: AttributeShaderType
47
+ attributeType: AttributeShaderType | AttributeShaderTypeAlias
26
48
  ): AttributeShaderTypeInfo {
27
- const [primitiveType, components] = TYPE_INFO[attributeType];
49
+ const resolvedAttributeType = resolveAttributeShaderTypeAlias(attributeType);
50
+ const decoded = TYPE_INFO[resolvedAttributeType];
51
+ if (!decoded) {
52
+ throw new Error(`Unsupported attribute shader type: ${attributeType}`);
53
+ }
54
+ const [primitiveType, components] = decoded;
28
55
  const integer: boolean = primitiveType === 'i32' || primitiveType === 'u32';
29
56
  const signed: boolean = primitiveType !== 'u32';
30
57
 
@@ -38,6 +65,39 @@ export function getAttributeShaderTypeInfo(
38
65
  };
39
66
  }
40
67
 
68
+ export class ShaderTypeDecoder {
69
+ getVariableShaderTypeInfo(
70
+ format: VariableShaderType | VariableShaderTypeAlias
71
+ ): VariableShaderTypeInfo {
72
+ return getVariableShaderTypeInfo(format);
73
+ }
74
+
75
+ getAttributeShaderTypeInfo(
76
+ attributeType: AttributeShaderType | AttributeShaderTypeAlias
77
+ ): AttributeShaderTypeInfo {
78
+ return getAttributeShaderTypeInfo(attributeType);
79
+ }
80
+
81
+ makeShaderAttributeType(
82
+ primitiveType: PrimitiveDataType,
83
+ components: 1 | 2 | 3 | 4
84
+ ): AttributeShaderType {
85
+ return makeShaderAttributeType(primitiveType, components);
86
+ }
87
+
88
+ resolveAttributeShaderTypeAlias(
89
+ alias: AttributeShaderTypeAlias | AttributeShaderType
90
+ ): AttributeShaderType {
91
+ return resolveAttributeShaderTypeAlias(alias);
92
+ }
93
+
94
+ resolveVariableShaderTypeAlias(
95
+ alias: VariableShaderTypeAlias | VariableShaderType
96
+ ): VariableShaderType {
97
+ return resolveVariableShaderTypeAlias(alias);
98
+ }
99
+ }
100
+
41
101
  export function makeShaderAttributeType(
42
102
  primitiveType: PrimitiveDataType,
43
103
  components: 1 | 2 | 3 | 4
@@ -57,6 +117,9 @@ export function resolveVariableShaderTypeAlias(
57
117
  return WGSL_VARIABLE_TYPE_ALIAS_MAP[alias as VariableShaderTypeAlias] || alias;
58
118
  }
59
119
 
120
+ /** Decoder for luma.gl shader types */
121
+ export const shaderTypeDecoder = new ShaderTypeDecoder();
122
+
60
123
  // TABLES
61
124
 
62
125
  const PRIMITIVE_TYPE_SIZES: Record<PrimitiveDataType, 2 | 4> = {
@@ -168,7 +231,18 @@ export const WGSL_ATTRIBUTE_TYPE_ALIAS_MAP: Record<AttributeShaderTypeAlias, Att
168
231
 
169
232
  /** @todo These tables are quite big, consider parsing alias strings instead */
170
233
  export const WGSL_VARIABLE_TYPE_ALIAS_MAP: Record<VariableShaderTypeAlias, VariableShaderType> = {
171
- ...WGSL_ATTRIBUTE_TYPE_ALIAS_MAP,
234
+ vec2i: 'vec2<i32>',
235
+ vec3i: 'vec3<i32>',
236
+ vec4i: 'vec4<i32>',
237
+ vec2u: 'vec2<u32>',
238
+ vec3u: 'vec3<u32>',
239
+ vec4u: 'vec4<u32>',
240
+ vec2f: 'vec2<f32>',
241
+ vec3f: 'vec3<f32>',
242
+ vec4f: 'vec4<f32>',
243
+ vec2h: 'vec2<f16>',
244
+ vec3h: 'vec3<f16>',
245
+ vec4h: 'vec4<f16>',
172
246
  mat2x2f: 'mat2x2<f32>',
173
247
  mat2x3f: 'mat2x3<f32>',
174
248
  mat2x4f: 'mat2x4<f32>',