@luma.gl/core 9.3.0-alpha.6 → 9.3.0-alpha.9

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 (202) hide show
  1. package/dist/adapter/canvas-surface.d.ts +1 -1
  2. package/dist/adapter/canvas-surface.d.ts.map +1 -1
  3. package/dist/adapter/device.d.ts +13 -3
  4. package/dist/adapter/device.d.ts.map +1 -1
  5. package/dist/adapter/device.js +73 -6
  6. package/dist/adapter/device.js.map +1 -1
  7. package/dist/adapter/luma.js +1 -1
  8. package/dist/adapter/resources/command-buffer.d.ts +3 -1
  9. package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
  10. package/dist/adapter/resources/command-buffer.js +3 -1
  11. package/dist/adapter/resources/command-buffer.js.map +1 -1
  12. package/dist/adapter/resources/command-encoder.d.ts +3 -1
  13. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  14. package/dist/adapter/resources/command-encoder.js +3 -1
  15. package/dist/adapter/resources/command-encoder.js.map +1 -1
  16. package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
  17. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
  18. package/dist/adapter/resources/framebuffer.d.ts +1 -1
  19. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  20. package/dist/adapter/resources/render-pipeline.d.ts +10 -4
  21. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  22. package/dist/adapter/resources/render-pipeline.js +2 -1
  23. package/dist/adapter/resources/render-pipeline.js.map +1 -1
  24. package/dist/adapter/resources/texture-view.d.ts +1 -1
  25. package/dist/adapter/resources/texture-view.d.ts.map +1 -1
  26. package/dist/adapter/resources/texture.d.ts +5 -4
  27. package/dist/adapter/resources/texture.d.ts.map +1 -1
  28. package/dist/adapter/resources/texture.js +4 -3
  29. package/dist/adapter/resources/texture.js.map +1 -1
  30. package/dist/adapter/types/attachments.d.ts +1 -1
  31. package/dist/adapter/types/attachments.d.ts.map +1 -1
  32. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  33. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  34. package/dist/adapter/types/parameters.d.ts +3 -1
  35. package/dist/adapter/types/parameters.d.ts.map +1 -1
  36. package/dist/adapter/types/parameters.js +1 -0
  37. package/dist/adapter/types/parameters.js.map +1 -1
  38. package/dist/adapter/types/shader-layout.d.ts +10 -6
  39. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  40. package/dist/adapter/types/uniforms.d.ts +6 -0
  41. package/dist/adapter/types/uniforms.d.ts.map +1 -1
  42. package/dist/adapter-utils/bind-groups.d.ts +9 -0
  43. package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
  44. package/dist/adapter-utils/bind-groups.js +41 -0
  45. package/dist/adapter-utils/bind-groups.js.map +1 -0
  46. package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
  47. package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
  48. package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
  49. package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
  50. package/dist/dist.dev.js +983 -223
  51. package/dist/dist.min.js +5 -5
  52. package/dist/factories/bind-group-factory.d.ts +20 -0
  53. package/dist/factories/bind-group-factory.d.ts.map +1 -0
  54. package/dist/factories/bind-group-factory.js +79 -0
  55. package/dist/factories/bind-group-factory.js.map +1 -0
  56. package/dist/factories/core-module-state.d.ts +7 -0
  57. package/dist/factories/core-module-state.d.ts.map +1 -0
  58. package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
  59. package/dist/factories/core-module-state.js.map +1 -0
  60. package/dist/factories/pipeline-factory.d.ts +54 -0
  61. package/dist/factories/pipeline-factory.d.ts.map +1 -0
  62. package/dist/factories/pipeline-factory.js +270 -0
  63. package/dist/factories/pipeline-factory.js.map +1 -0
  64. package/dist/factories/shader-factory.d.ts +20 -0
  65. package/dist/factories/shader-factory.d.ts.map +1 -0
  66. package/dist/factories/shader-factory.js +84 -0
  67. package/dist/factories/shader-factory.js.map +1 -0
  68. package/dist/index.cjs +942 -221
  69. package/dist/index.cjs.map +4 -4
  70. package/dist/index.d.ts +22 -14
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +13 -9
  73. package/dist/index.js.map +1 -1
  74. package/dist/portable/uniform-block.d.ts +1 -1
  75. package/dist/portable/uniform-block.d.ts.map +1 -1
  76. package/dist/portable/uniform-buffer-layout.d.ts +20 -15
  77. package/dist/portable/uniform-buffer-layout.d.ts.map +1 -1
  78. package/dist/portable/uniform-buffer-layout.js +188 -43
  79. package/dist/portable/uniform-buffer-layout.js.map +1 -1
  80. package/dist/portable/uniform-store.d.ts +5 -6
  81. package/dist/portable/uniform-store.d.ts.map +1 -1
  82. package/dist/portable/uniform-store.js +6 -3
  83. package/dist/portable/uniform-store.js.map +1 -1
  84. package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
  85. package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
  86. package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
  87. package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
  88. package/dist/shadertypes/data-types/data-types.d.ts +31 -12
  89. package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
  90. package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
  91. package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
  92. package/dist/shadertypes/image-types/image-types.js.map +1 -0
  93. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
  94. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
  95. package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +32 -2
  96. package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
  97. package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
  98. package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
  99. package/dist/shadertypes/shader-types/shader-types.js +30 -0
  100. package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
  101. package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
  102. package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
  103. package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.d.ts +1 -0
  104. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
  105. package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +4 -3
  106. package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
  107. package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
  108. package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
  109. package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
  110. package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
  111. package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
  112. package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +5 -1
  113. package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
  114. package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
  115. package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
  116. package/dist/shadertypes/{textures → texture-types}/texture-layout.d.ts +1 -1
  117. package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
  118. package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
  119. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
  120. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
  121. package/dist/shadertypes/vertex-types/vertex-format-decoder.js +106 -0
  122. package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
  123. package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
  124. package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
  125. package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
  126. package/package.json +2 -2
  127. package/src/adapter/canvas-surface.ts +1 -1
  128. package/src/adapter/device.ts +115 -10
  129. package/src/adapter/resources/command-buffer.ts +3 -1
  130. package/src/adapter/resources/command-encoder.ts +3 -1
  131. package/src/adapter/resources/compute-pipeline.ts +2 -2
  132. package/src/adapter/resources/framebuffer.ts +1 -1
  133. package/src/adapter/resources/render-pipeline.ts +12 -5
  134. package/src/adapter/resources/texture-view.ts +1 -1
  135. package/src/adapter/resources/texture.ts +6 -5
  136. package/src/adapter/types/attachments.ts +1 -1
  137. package/src/adapter/types/buffer-layout.ts +1 -1
  138. package/src/adapter/types/parameters.ts +4 -1
  139. package/src/adapter/types/shader-layout.ts +15 -9
  140. package/src/adapter/types/uniforms.ts +12 -0
  141. package/src/adapter-utils/bind-groups.ts +71 -0
  142. package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
  143. package/src/factories/bind-group-factory.ts +139 -0
  144. package/src/factories/core-module-state.ts +11 -0
  145. package/src/factories/pipeline-factory.ts +328 -0
  146. package/src/factories/shader-factory.ts +103 -0
  147. package/src/index.ts +47 -26
  148. package/src/portable/uniform-block.ts +1 -1
  149. package/src/portable/uniform-buffer-layout.ts +269 -62
  150. package/src/portable/uniform-store.ts +14 -11
  151. package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
  152. package/src/shadertypes/data-types/data-types.ts +100 -48
  153. package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
  154. package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +76 -11
  155. package/src/shadertypes/shader-types/shader-types.ts +207 -0
  156. package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +4 -3
  157. package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
  158. package/src/shadertypes/{textures → texture-types}/texture-formats.ts +14 -2
  159. package/src/shadertypes/vertex-types/vertex-format-decoder.ts +131 -0
  160. package/src/shadertypes/vertex-types/vertex-formats.ts +183 -0
  161. package/dist/image-utils/image-types.d.ts.map +0 -1
  162. package/dist/image-utils/image-types.js.map +0 -1
  163. package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
  164. package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
  165. package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
  166. package/dist/shadertypes/data-types/shader-types.d.ts +0 -43
  167. package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
  168. package/dist/shadertypes/data-types/shader-types.js.map +0 -1
  169. package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
  170. package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
  171. package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
  172. package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
  173. package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
  174. package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
  175. package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
  176. package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
  177. package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
  178. package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
  179. package/dist/shadertypes/textures/texture-formats.js.map +0 -1
  180. package/dist/shadertypes/textures/texture-layout.d.ts.map +0 -1
  181. package/dist/shadertypes/textures/texture-layout.js.map +0 -1
  182. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
  183. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
  184. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
  185. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
  186. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
  187. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
  188. package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
  189. package/src/shadertypes/data-types/shader-types.ts +0 -94
  190. package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
  191. package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
  192. /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
  193. /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
  194. /package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +0 -0
  195. /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
  196. /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
  197. /package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +0 -0
  198. /package/dist/shadertypes/{textures → texture-types}/texture-layout.js +0 -0
  199. /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
  200. /package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +0 -0
  201. /package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +0 -0
  202. /package/src/shadertypes/{textures → texture-types}/texture-layout.ts +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>;
@@ -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 (
@@ -2,20 +2,38 @@
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 | VariableShaderTypeAlias): {
13
+ /** Information extracted from a VariableShaderType constant */
14
+ export type VariableShaderTypeInfo = {
16
15
  type: PrimitiveDataType;
17
16
  components: number;
18
- } {
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 {
19
37
  const resolvedFormat = resolveVariableShaderTypeAlias(format);
20
38
  const decoded = UNIFORM_FORMATS[resolvedFormat];
21
39
  if (!decoded) {
@@ -47,6 +65,39 @@ export function getAttributeShaderTypeInfo(
47
65
  };
48
66
  }
49
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
+
50
101
  export function makeShaderAttributeType(
51
102
  primitiveType: PrimitiveDataType,
52
103
  components: 1 | 2 | 3 | 4
@@ -66,6 +117,9 @@ export function resolveVariableShaderTypeAlias(
66
117
  return WGSL_VARIABLE_TYPE_ALIAS_MAP[alias as VariableShaderTypeAlias] || alias;
67
118
  }
68
119
 
120
+ /** Decoder for luma.gl shader types */
121
+ export const shaderTypeDecoder = new ShaderTypeDecoder();
122
+
69
123
  // TABLES
70
124
 
71
125
  const PRIMITIVE_TYPE_SIZES: Record<PrimitiveDataType, 2 | 4> = {
@@ -177,7 +231,18 @@ export const WGSL_ATTRIBUTE_TYPE_ALIAS_MAP: Record<AttributeShaderTypeAlias, Att
177
231
 
178
232
  /** @todo These tables are quite big, consider parsing alias strings instead */
179
233
  export const WGSL_VARIABLE_TYPE_ALIAS_MAP: Record<VariableShaderTypeAlias, VariableShaderType> = {
180
- ...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>',
181
246
  mat2x2f: 'mat2x2<f32>',
182
247
  mat2x3f: 'mat2x3<f32>',
183
248
  mat2x4f: 'mat2x4<f32>',
@@ -0,0 +1,207 @@
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
+
7
+ /**
8
+ * @type the type of an attribute as defined in the shader source code.
9
+ * @note This is a subset of shader variable types
10
+ * @note Buffers with various `VertexFormat`s can be supplied for each type, GPU will convert them at runtime/
11
+ */
12
+ export type AttributeShaderType =
13
+ | 'i32'
14
+ | 'u32'
15
+ | 'f32'
16
+ | 'f16'
17
+ | `vec2<${PrimitiveDataType}>`
18
+ | `vec3<${PrimitiveDataType}>`
19
+ | `vec4<${PrimitiveDataType}>`;
20
+
21
+ /**
22
+ * @type Describes the type of a variable that can declared in shader source code.
23
+ * @note Uniforms can be declared using these types
24
+ * @note Uniforms can be of a wider range of types than attributes.
25
+ * @note to WebGL users: "bindings" (textures, samplers, and uniform buffers) are considered "bindings", not shader variables/uniforms
26
+ */
27
+ export type VariableShaderType =
28
+ | 'i32'
29
+ | 'u32'
30
+ | 'f32'
31
+ | 'f16'
32
+ | `vec2<${PrimitiveDataType}>`
33
+ | `vec3<${PrimitiveDataType}>`
34
+ | `vec4<${PrimitiveDataType}>`
35
+ | `mat2x2<${PrimitiveDataType}>`
36
+ | `mat2x3<${PrimitiveDataType}>`
37
+ | `mat2x4<${PrimitiveDataType}>`
38
+ | `mat3x2<${PrimitiveDataType}>`
39
+ | `mat3x3<${PrimitiveDataType}>`
40
+ | `mat3x4<${PrimitiveDataType}>`
41
+ | `mat4x2<${PrimitiveDataType}>`
42
+ | `mat4x3<${PrimitiveDataType}>`
43
+ | `mat4x4<${PrimitiveDataType}>`;
44
+
45
+ /** @type A composite shader type can include structs and arrays, recursively */
46
+ export type CompositeShaderType = VariableShaderType | StructShaderType | ArrayShaderType;
47
+
48
+ /** @type Represents a struct in WGSL */
49
+ export type StructShaderType = {
50
+ [memberName: string]: CompositeShaderType;
51
+ };
52
+
53
+ /** @type Represents an array in WGSL */
54
+ export type ArrayShaderType = readonly [type: CompositeShaderType, length: number];
55
+
56
+ // Alias types
57
+
58
+ /** @type Shorthand type aliases recognized by WGSL */
59
+ export type AttributeShaderTypeAlias = keyof AttributeShaderTypeAliasMap;
60
+
61
+ /** @note work around for lack of type narrowing in conditional generics */
62
+ // prettier-ignore
63
+ type AttributeShaderTypeAliasMap = {
64
+ vec2f: 'vec2<f32>';
65
+ vec3f: 'vec3<f32>';
66
+ vec4f: 'vec4<f32>';
67
+ vec2i: 'vec2<i32>';
68
+ vec3i: 'vec3<i32>';
69
+ vec4i: 'vec4<i32>';
70
+ vec2u: 'vec2<u32>';
71
+ vec3u: 'vec3<u32>';
72
+ vec4u: 'vec4<u32>';
73
+ vec2h: 'vec2<f16>';
74
+ vec3h: 'vec3<f16>';
75
+ vec4h: 'vec4<f16>';
76
+ };
77
+
78
+ /** @type Shorthand type aliases recognized by WGSL */
79
+ export type VariableShaderTypeAlias = keyof VariableShaderTypeAliasMap;
80
+
81
+ /** @note work around for lack of type narrowing in conditional generics */
82
+ // prettier-ignore
83
+ type VariableShaderTypeAliasMap = {
84
+ // Vector aliases
85
+ vec2f: 'vec2<f32>';
86
+ vec3f: 'vec3<f32>';
87
+ vec4f: 'vec4<f32>';
88
+ vec2i: 'vec2<i32>';
89
+ vec3i: 'vec3<i32>';
90
+ vec4i: 'vec4<i32>';
91
+ vec2u: 'vec2<u32>';
92
+ vec3u: 'vec3<u32>';
93
+ vec4u: 'vec4<u32>';
94
+ vec2h: 'vec2<f16>';
95
+ vec3h: 'vec3<f16>';
96
+ vec4h: 'vec4<f16>';
97
+
98
+ // Matrix aliases
99
+ mat2x2f: 'mat2x2<f32>';
100
+ mat2x3f: 'mat2x3<f32>';
101
+ mat2x4f: 'mat2x4<f32>';
102
+ mat3x2f: 'mat3x2<f32>';
103
+ mat3x3f: 'mat3x3<f32>';
104
+ mat3x4f: 'mat3x4<f32>';
105
+ mat4x2f: 'mat4x2<f32>';
106
+ mat4x3f: 'mat4x3<f32>';
107
+ mat4x4f: 'mat4x4<f32>';
108
+
109
+ mat2x2i: 'mat2x2<i32>';
110
+ mat2x3i: 'mat2x3<i32>';
111
+ mat2x4i: 'mat2x4<i32>';
112
+ mat3x2i: 'mat3x2<i32>';
113
+ mat3x3i: 'mat3x3<i32>';
114
+ mat3x4i: 'mat3x4<i32>';
115
+ mat4x2i: 'mat4x2<i32>';
116
+ mat4x3i: 'mat4x3<i32>';
117
+ mat4x4i: 'mat4x4<i32>';
118
+
119
+ mat2x2u: 'mat2x2<u32>';
120
+ mat2x3u: 'mat2x3<u32>';
121
+ mat2x4u: 'mat2x4<u32>';
122
+ mat3x2u: 'mat3x2<u32>';
123
+ mat3x3u: 'mat3x3<u32>';
124
+ mat3x4u: 'mat3x4<u32>';
125
+ mat4x2u: 'mat4x2<u32>';
126
+ mat4x3u: 'mat4x3<u32>';
127
+ mat4x4u: 'mat4x4<u32>';
128
+
129
+ mat2x2h: 'mat2x2<f16>';
130
+ mat2x3h: 'mat2x3<f16>';
131
+ mat2x4h: 'mat2x4<f16>';
132
+ mat3x2h: 'mat3x2<f16>';
133
+ mat3x3h: 'mat3x3<f16>';
134
+ mat3x4h: 'mat3x4<f16>';
135
+ mat4x2h: 'mat4x2<f16>';
136
+ mat4x3h: 'mat4x3<f16>';
137
+ mat4x4h: 'mat4x4<f16>';
138
+ };
139
+
140
+ // GENERICS
141
+
142
+ /** @type The unaliased type */
143
+ export type AttributeShaderTypeT<T extends AttributeShaderTypeAlias | AttributeShaderType> =
144
+ T extends AttributeShaderTypeAlias ? AttributeShaderTypeAliasMap[T] : T;
145
+
146
+ /** @type The unaliased type */
147
+ export type VariableShaderTypeT<T extends VariableShaderType | keyof VariableShaderTypeAliasMap> =
148
+ T extends VariableShaderTypeAlias ? VariableShaderTypeAliasMap[T] : T;
149
+
150
+ // HELPER TYPES
151
+
152
+ // prettier-ignore
153
+ type TypeOfAliasSuffix<T extends string> =
154
+ T extends 'f' ? 'f32' :
155
+ T extends 'i' ? 'i32' :
156
+ T extends 'u' ? 'u32' :
157
+ T extends 'h' ? 'f16' :
158
+ never;
159
+
160
+ // prettier-ignore
161
+ export type AttributeShaderTypeAliasT<T extends AttributeShaderTypeAlias> =
162
+ T extends `vec2${infer S}` ? `vec2<${TypeOfAliasSuffix<S>}>` :
163
+ T extends `vec3${infer S}` ? `vec3<${TypeOfAliasSuffix<S>}>` :
164
+ T extends `vec4${infer S}` ? `vec4<${TypeOfAliasSuffix<S>}>` :
165
+ never;
166
+
167
+ // prettier-ignore
168
+ export type VariableShaderTypeAliasT<T extends VariableShaderTypeAlias> =
169
+ T extends `vec2${infer S}` ? `vec2<${TypeOfAliasSuffix<S>}>` :
170
+ T extends `vec3${infer S}` ? `vec3<${TypeOfAliasSuffix<S>}>` :
171
+ T extends `vec4${infer S}` ? `vec4<${TypeOfAliasSuffix<S>}>` :
172
+ T extends `mat2x2${infer S}` ? `mat2x2<${TypeOfAliasSuffix<S>}>` :
173
+ T extends `mat2x3${infer S}` ? `mat2x3<${TypeOfAliasSuffix<S>}>` :
174
+ T extends `mat2x4${infer S}` ? `mat2x4<${TypeOfAliasSuffix<S>}>` :
175
+ T extends `mat3x2${infer S}` ? `mat3x2<${TypeOfAliasSuffix<S>}>` :
176
+ T extends `mat3x3${infer S}` ? `mat3x3<${TypeOfAliasSuffix<S>}>` :
177
+ T extends `mat3x4${infer S}` ? `mat3x4<${TypeOfAliasSuffix<S>}>` :
178
+ T extends `mat4x2${infer S}` ? `mat4x2<${TypeOfAliasSuffix<S>}>` :
179
+ T extends `mat4x3${infer S}` ? `mat4x3<${TypeOfAliasSuffix<S>}>` :
180
+ T extends `mat4x4${infer S}` ? `mat4x4<${TypeOfAliasSuffix<S>}>` :
181
+ never;
182
+
183
+ // : T extends `vec2<${infer S}>`
184
+ // ? `vec2<${S}>`
185
+ // : T extends `vec3<${infer S}>`
186
+ // ? `vec3<${S}>`
187
+ // : T extends `vec4<${infer S}>`
188
+ // ? `vec4<${S}>`
189
+ // : T extends `mat2x2<${infer S}>`
190
+ // ? `mat2x2<${S}>`
191
+ // : T extends `mat2x3<${infer S}>`
192
+ // ? `mat2x3<${S}>`
193
+ // : T extends `mat2x4<${infer S}>`
194
+ // ? `mat2x4<${S}>`
195
+ // : T extends `mat3x2<${infer S}>`
196
+ // ? `mat3x2<${S}>`
197
+ // : T extends `mat3x3<${infer S}>`
198
+ // ? `mat3x3<${S}>`
199
+ // : T extends `mat3x4<${infer S}>`
200
+ // ? `mat3x4<${S}>`
201
+ // : T extends `mat4x2<${infer S}>`
202
+ // ? `mat4x2<${S}>`
203
+ // : T extends `mat4x3<${infer S}>`
204
+ // ? `mat4x3<${S}>`
205
+ // : T extends `mat4x4<${infer S}>`
206
+ // ? `mat4x4<${S}>`
207
+ // : never;
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {NormalizedDataType} from '../data-types/data-types';
6
- import {getDataTypeInfo} from '../data-types/decode-data-types';
6
+ import {dataTypeDecoder} from '../data-types/data-type-decoder';
7
7
  import type {
8
8
  TextureFormat,
9
9
  TextureFormatCompressed,
@@ -72,6 +72,7 @@ export class TextureFormatDecoder {
72
72
  }
73
73
  }
74
74
 
75
+ /** Decoder for luma.gl texture types */
75
76
  export const textureFormatDecoder = new TextureFormatDecoder();
76
77
 
77
78
  // HELPERS - MEMORY LAYOUT
@@ -163,11 +164,11 @@ export function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
163
164
  }
164
165
 
165
166
  // Fill in missing information that can be derived from the format string
166
- const matches = RGB_FORMAT_REGEX.exec(format as string);
167
+ const matches = !formatInfo.packed ? RGB_FORMAT_REGEX.exec(format as string) : null;
167
168
  if (matches) {
168
169
  const [, channels, length, type, srgb, suffix] = matches;
169
170
  const dataType = `${type}${length}` as NormalizedDataType;
170
- const decodedType = getDataTypeInfo(dataType);
171
+ const decodedType = dataTypeDecoder.getDataTypeInfo(dataType);
171
172
  const bits = decodedType.byteLength * 8;
172
173
  const components = (channels?.length ?? 1) as 1 | 2 | 3 | 4;
173
174
  const bitsPerChannel: [number, number, number, number] = [
@@ -8,54 +8,8 @@ import {
8
8
  type TextureFormatCompressed
9
9
  } from './texture-formats';
10
10
 
11
- import {type DataTypeArray, NormalizedDataTypeArray} from '../data-types/data-types';
12
-
13
- export type TextureFormatTypedArray<T extends TextureFormat> = DataTypeArray<
14
- TextureFormatDataType<T>
15
- >;
16
-
17
- export type TextureFormatNormalizedTypedArray<T extends TextureFormat> = NormalizedDataTypeArray<
18
- TextureFormatDataType<T>
19
- >;
20
-
21
- /** A numeric array of length matching the number of components in the texture format */
22
- export type TextureFormatPixel<T extends TextureFormat> =
23
- TextureFormatPackedComponents<T> extends 1
24
- ? [number]
25
- : TextureFormatPackedComponents<T> extends 2
26
- ? [number, number]
27
- : TextureFormatPackedComponents<T> extends 3
28
- ? [number, number, number]
29
- : TextureFormatPackedComponents<T> extends 4
30
- ? [number, number, number, number]
31
- : never;
32
-
33
- /** @note packed formats have only one component. Use TextureFormatPackedComponents */
34
- export type TextureFormatComponents<T extends TextureFormat> = T extends
35
- | TextureFormatR
36
- | TextureFormatPackedRGB
37
- | TextureFormatPackedRGBA
38
- ? 1
39
- : T extends TextureFormatRG
40
- ? 2
41
- : T extends TextureFormatRGB
42
- ? 3
43
- : T extends TextureFormatRGBA
44
- ? 4
45
- : never;
46
-
47
- export type TextureFormatPackedComponents<T extends TextureFormat> = T extends TextureFormatR
48
- ? 1
49
- : T extends TextureFormatRG
50
- ? 2
51
- : T extends TextureFormatRGB | TextureFormatPackedRGB
52
- ? 3
53
- : T extends TextureFormatRGBA | TextureFormatPackedRGBA
54
- ? 4
55
- : never;
56
-
57
- /** Get the data type for a texture format */
58
- export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFormatUint8
11
+ /** @type data type for a texture format */
12
+ export type TextureFormatDataTypeT<T extends TextureFormat> = T extends TextureFormatUint8
59
13
  ? 'uint8'
60
14
  : T extends TextureFormatSint8
61
15
  ? 'sint8'
@@ -89,6 +43,46 @@ export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFo
89
43
  ? 'uint32'
90
44
  : never;
91
45
 
46
+ /** @type A numeric array of length matching the number of components in the texture format */
47
+ export type TextureFormatPixelT<T extends TextureFormat> =
48
+ TextureFormatPackedComponentsT<T> extends 1
49
+ ? [number]
50
+ : TextureFormatPackedComponentsT<T> extends 2
51
+ ? [number, number]
52
+ : TextureFormatPackedComponentsT<T> extends 3
53
+ ? [number, number, number]
54
+ : TextureFormatPackedComponentsT<T> extends 4
55
+ ? [number, number, number, number]
56
+ : never;
57
+
58
+ /**
59
+ * @type number - the number of components in a texture format
60
+ * @note packed formats have only one component. Use TextureFormatPackedComponentsT
61
+ */
62
+ export type TextureFormatComponentsT<T extends TextureFormat> = T extends
63
+ | TextureFormatR
64
+ | TextureFormatPackedRGB
65
+ | TextureFormatPackedRGBA
66
+ ? 1
67
+ : T extends TextureFormatRG
68
+ ? 2
69
+ : T extends TextureFormatRGB
70
+ ? 3
71
+ : T extends TextureFormatRGBA
72
+ ? 4
73
+ : never;
74
+
75
+ /** @type number - the number of components in a packed texture format */
76
+ export type TextureFormatPackedComponentsT<T extends TextureFormat> = T extends TextureFormatR
77
+ ? 1
78
+ : T extends TextureFormatRG
79
+ ? 2
80
+ : T extends TextureFormatRGB | TextureFormatPackedRGB
81
+ ? 3
82
+ : T extends TextureFormatRGBA | TextureFormatPackedRGBA
83
+ ? 4
84
+ : never;
85
+
92
86
  // Component groups
93
87
 
94
88
  type TextureFormatR =