typegpu 0.11.9 → 0.12.1

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 (366) hide show
  1. package/bin.mjs +28 -6
  2. package/builtin.d.ts +51 -53
  3. package/builtin.js +30 -34
  4. package/common/fullScreenTriangle.d.ts +2 -10
  5. package/common/fullScreenTriangle.js +20 -28
  6. package/common/index.d.ts +2 -9
  7. package/common/index.js +3 -12
  8. package/common/writeSoA.d.ts +11 -12
  9. package/common/writeSoA.js +88 -76
  10. package/core/buffer/buffer.d.ts +79 -62
  11. package/core/buffer/buffer.js +283 -205
  12. package/core/buffer/bufferBinding.d.ts +71 -0
  13. package/core/buffer/bufferBinding.js +154 -0
  14. package/core/buffer/bufferUsage.d.ts +14 -45
  15. package/core/buffer/bufferUsage.js +1 -171
  16. package/core/buffer/laidOutBuffer.d.ts +25 -0
  17. package/core/buffer/laidOutBuffer.js +55 -0
  18. package/core/commandEncoder/attachments.d.ts +125 -0
  19. package/core/commandEncoder/attachments.js +29 -0
  20. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  21. package/core/commandEncoder/commandEncoder.js +56 -0
  22. package/core/commandEncoder/computePass.d.ts +58 -0
  23. package/core/commandEncoder/computePass.js +63 -0
  24. package/core/commandEncoder/renderPass.d.ts +121 -0
  25. package/core/commandEncoder/renderPass.js +196 -0
  26. package/core/constant/tgpuConstant.d.ts +26 -26
  27. package/core/constant/tgpuConstant.js +76 -65
  28. package/core/declare/tgpuDeclare.d.ts +3 -6
  29. package/core/declare/tgpuDeclare.js +36 -36
  30. package/core/function/autoIO.d.ts +61 -33
  31. package/core/function/autoIO.js +68 -73
  32. package/core/function/comptime.d.ts +11 -13
  33. package/core/function/comptime.js +60 -52
  34. package/core/function/createCallableSchema.d.ts +16 -0
  35. package/core/function/createCallableSchema.js +50 -40
  36. package/core/function/dualImpl.d.ts +44 -0
  37. package/core/function/dualImpl.js +71 -50
  38. package/core/function/entryInputRouter.d.ts +26 -0
  39. package/core/function/entryInputRouter.js +31 -33
  40. package/core/function/extractArgs.d.ts +38 -0
  41. package/core/function/extractArgs.js +202 -200
  42. package/core/function/fnCore.d.ts +44 -5
  43. package/core/function/fnCore.js +148 -93
  44. package/core/function/fnTypes.d.ts +31 -29
  45. package/core/function/fnTypes.js +1 -0
  46. package/core/function/ioSchema.d.ts +12 -10
  47. package/core/function/ioSchema.js +65 -47
  48. package/core/function/shelllessImpl.d.ts +9 -12
  49. package/core/function/shelllessImpl.js +17 -22
  50. package/core/function/templateUtils.d.ts +2 -0
  51. package/core/function/templateUtils.js +9 -8
  52. package/core/function/tgpuComputeFn.d.ts +26 -28
  53. package/core/function/tgpuComputeFn.js +47 -48
  54. package/core/function/tgpuFn.d.ts +34 -37
  55. package/core/function/tgpuFn.js +179 -153
  56. package/core/function/tgpuFragmentFn.d.ts +52 -53
  57. package/core/function/tgpuFragmentFn.js +63 -56
  58. package/core/function/tgpuVertexFn.d.ts +36 -39
  59. package/core/function/tgpuVertexFn.js +56 -53
  60. package/core/pipeline/computePipeline.d.ts +141 -53
  61. package/core/pipeline/computePipeline.js +291 -225
  62. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  63. package/core/pipeline/connectAttachmentToShader.js +25 -22
  64. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  65. package/core/pipeline/connectTargetsToShader.js +29 -27
  66. package/core/pipeline/drawState.d.ts +52 -0
  67. package/core/pipeline/drawState.js +225 -0
  68. package/core/pipeline/performanceTracker.d.ts +14 -0
  69. package/core/pipeline/performanceTracker.js +34 -0
  70. package/core/pipeline/pipelineUtils.d.ts +18 -0
  71. package/core/pipeline/pipelineUtils.js +54 -25
  72. package/core/pipeline/priors.d.ts +1 -0
  73. package/core/pipeline/priors.js +12 -0
  74. package/core/pipeline/renderPipeline.d.ts +246 -261
  75. package/core/pipeline/renderPipeline.js +487 -480
  76. package/core/pipeline/timeable.d.ts +28 -18
  77. package/core/pipeline/timeable.js +90 -52
  78. package/core/pipeline/typeGuards.d.ts +17 -0
  79. package/core/pipeline/typeGuards.js +52 -22
  80. package/core/pipeline/webgpuLimitations.d.ts +10 -0
  81. package/core/pipeline/webgpuLimitations.js +81 -0
  82. package/core/querySet/querySet.d.ts +26 -21
  83. package/core/querySet/querySet.js +127 -103
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  85. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +89 -90
  86. package/core/resolve/externals.d.ts +25 -8
  87. package/core/resolve/externals.js +78 -54
  88. package/core/resolve/namespace.d.ts +22 -25
  89. package/core/resolve/namespace.js +16 -21
  90. package/core/resolve/resolvableString.d.ts +7 -0
  91. package/core/resolve/resolvableString.js +13 -0
  92. package/core/resolve/resolveData.d.ts +10 -0
  93. package/core/resolve/resolveData.js +162 -121
  94. package/core/resolve/stitch.d.ts +8 -0
  95. package/core/resolve/stitch.js +23 -21
  96. package/core/resolve/tgpuResolve.d.ts +55 -53
  97. package/core/resolve/tgpuResolve.js +106 -53
  98. package/core/root/configurableImpl.d.ts +10 -0
  99. package/core/root/configurableImpl.js +17 -19
  100. package/core/root/init.d.ts +76 -38
  101. package/core/root/init.js +346 -455
  102. package/core/root/rootTypes.d.ts +461 -636
  103. package/core/root/rootTypes.js +1 -0
  104. package/core/sampler/sampler.d.ts +50 -31
  105. package/core/sampler/sampler.js +120 -113
  106. package/core/simulate/tgpuSimulate.d.ts +9 -12
  107. package/core/simulate/tgpuSimulate.js +68 -71
  108. package/core/slot/accessor.d.ts +36 -13
  109. package/core/slot/accessor.js +138 -91
  110. package/core/slot/internalSlots.d.ts +2 -0
  111. package/core/slot/internalSlots.js +1 -6
  112. package/core/slot/lazy.d.ts +2 -6
  113. package/core/slot/lazy.js +71 -39
  114. package/core/slot/slot.d.ts +2 -6
  115. package/core/slot/slot.js +45 -38
  116. package/core/slot/slotTypes.d.ts +78 -80
  117. package/core/slot/slotTypes.js +11 -16
  118. package/core/texture/externalTexture.d.ts +20 -11
  119. package/core/texture/externalTexture.js +46 -46
  120. package/core/texture/texture.d.ts +152 -97
  121. package/core/texture/texture.js +407 -314
  122. package/core/texture/textureFormats.d.ts +42 -23
  123. package/core/texture/textureFormats.js +104 -75
  124. package/core/texture/textureProps.d.ts +7 -10
  125. package/core/texture/textureProps.js +1 -0
  126. package/core/texture/textureUtils.d.ts +8 -0
  127. package/core/texture/textureUtils.js +185 -179
  128. package/core/texture/usageExtension.d.ts +21 -18
  129. package/core/texture/usageExtension.js +13 -17
  130. package/core/unroll/tgpuUnroll.d.ts +20 -19
  131. package/core/unroll/tgpuUnroll.js +82 -91
  132. package/core/valueProxyUtils.d.ts +3 -0
  133. package/core/valueProxyUtils.js +52 -41
  134. package/core/variable/tgpuVariable.d.ts +26 -27
  135. package/core/variable/tgpuVariable.js +93 -96
  136. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  137. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  138. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  139. package/core/vertexLayout/vertexAttribute.js +1 -0
  140. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  141. package/core/vertexLayout/vertexLayout.js +130 -99
  142. package/core/whitespaces.d.ts +2 -0
  143. package/core/whitespaces.js +16 -0
  144. package/data/alignIO.d.ts +7 -0
  145. package/data/alignIO.js +13 -13
  146. package/data/alignmentOf.d.ts +5 -8
  147. package/data/alignmentOf.js +90 -75
  148. package/data/array.d.ts +17 -9
  149. package/data/array.js +57 -40
  150. package/data/atomic.d.ts +2 -7
  151. package/data/atomic.js +26 -23
  152. package/data/attributes.d.ts +19 -21
  153. package/data/attributes.js +192 -132
  154. package/data/autoStruct.d.ts +36 -3
  155. package/data/autoStruct.js +84 -81
  156. package/data/compiledIO.d.ts +5 -0
  157. package/data/compiledIO.js +231 -215
  158. package/data/dataIO.d.ts +13 -11
  159. package/data/dataIO.js +643 -589
  160. package/data/dataTypes.d.ts +83 -65
  161. package/data/dataTypes.js +66 -68
  162. package/data/deepEqual.d.ts +2 -7
  163. package/data/deepEqual.js +80 -55
  164. package/data/disarray.d.ts +6 -10
  165. package/data/disarray.js +52 -46
  166. package/data/float16Conversion.d.ts +4 -0
  167. package/data/float16Conversion.js +7 -0
  168. package/data/generalizeFn.d.ts +25 -0
  169. package/data/generalizeFn.js +89 -0
  170. package/data/getLongestContiguousPrefix.d.ts +4 -8
  171. package/data/getLongestContiguousPrefix.js +6 -11
  172. package/data/index.d.ts +30 -31
  173. package/data/index.js +39 -172
  174. package/data/instanceToSchema.d.ts +24 -27
  175. package/data/instanceToSchema.js +1 -0
  176. package/data/isContiguous.d.ts +4 -8
  177. package/data/isContiguous.js +6 -11
  178. package/data/matrix.d.ts +21 -21
  179. package/data/matrix.js +513 -505
  180. package/data/numberOps.d.ts +5 -0
  181. package/data/numberOps.js +21 -21
  182. package/data/numeric.d.ts +21 -12
  183. package/data/numeric.js +287 -197
  184. package/data/offsetUtils.d.ts +9 -13
  185. package/data/offsetUtils.js +204 -144
  186. package/data/offsets.d.ts +8 -0
  187. package/data/offsets.js +33 -33
  188. package/data/partialIO.d.ts +13 -8
  189. package/data/partialIO.js +124 -113
  190. package/data/ptr.d.ts +12 -12
  191. package/data/ptr.js +42 -44
  192. package/data/ref.d.ts +40 -27
  193. package/data/ref.js +125 -95
  194. package/data/sampler.d.ts +99 -101
  195. package/data/sampler.js +17 -21
  196. package/data/schemaCallWrapper.d.ts +19 -0
  197. package/data/schemaCallWrapper.js +31 -26
  198. package/data/schemaMemoryLayout.d.ts +8 -0
  199. package/data/schemaMemoryLayout.js +213 -185
  200. package/data/sizeOf.d.ts +4 -8
  201. package/data/sizeOf.js +6 -11
  202. package/data/snippet.d.ts +96 -20
  203. package/data/snippet.js +75 -86
  204. package/data/struct.d.ts +4 -7
  205. package/data/struct.js +51 -39
  206. package/data/texture.d.ts +253 -250
  207. package/data/texture.js +238 -200
  208. package/data/unstruct.d.ts +2 -7
  209. package/data/unstruct.js +43 -37
  210. package/data/vector.d.ts +33 -21
  211. package/data/vector.js +234 -221
  212. package/data/vectorImpl.d.ts +231 -0
  213. package/data/vectorImpl.js +563 -515
  214. package/data/vectorOps.d.ts +25 -0
  215. package/data/vectorOps.js +118 -669
  216. package/data/vertexFormatData.d.ts +181 -184
  217. package/data/vertexFormatData.js +104 -106
  218. package/data/wgslTypes.d.ts +665 -600
  219. package/data/wgslTypes.js +220 -198
  220. package/errors.d.ts +50 -24
  221. package/errors.js +146 -126
  222. package/execMode.d.ts +16 -0
  223. package/execMode.js +47 -40
  224. package/extension.d.ts +13 -8
  225. package/extension.js +10 -16
  226. package/getGPUValue.d.ts +1 -0
  227. package/getGPUValue.js +2 -7
  228. package/index.d.ts +28 -68
  229. package/index.js +8 -28
  230. package/indexNamedExports.d.ts +69 -42
  231. package/indexNamedExports.js +25 -0
  232. package/internal.d.ts +16 -0
  233. package/internal.js +12 -0
  234. package/mathUtils.d.ts +5 -0
  235. package/mathUtils.js +7 -11
  236. package/memo.d.ts +11 -0
  237. package/memo.js +20 -22
  238. package/minify.d.ts +5 -0
  239. package/minify.js +93 -0
  240. package/nameUtils.d.ts +29 -0
  241. package/nameUtils.js +427 -394
  242. package/package.json +5 -1
  243. package/resolutionCtx.d.ts +162 -22
  244. package/resolutionCtx.js +911 -629
  245. package/serial/registry.d.ts +15 -0
  246. package/serial/registry.js +106 -0
  247. package/serial/restore.d.ts +49 -0
  248. package/serial/restore.js +68 -0
  249. package/serial/schema.d.ts +58 -0
  250. package/serial/schema.js +209 -0
  251. package/serial/types.d.ts +5 -0
  252. package/serial/types.js +1 -0
  253. package/shared/env.d.ts +9 -0
  254. package/shared/env.js +9 -12
  255. package/shared/generators.d.ts +4 -0
  256. package/shared/generators.js +10 -12
  257. package/shared/meta.d.ts +29 -14
  258. package/shared/meta.js +71 -55
  259. package/shared/normalizeMetadata.d.ts +32 -27
  260. package/shared/normalizeMetadata.js +23 -36
  261. package/shared/repr.d.ts +73 -55
  262. package/shared/repr.js +1 -0
  263. package/shared/soul.d.ts +17 -0
  264. package/shared/soul.js +1 -0
  265. package/shared/stringify.d.ts +2 -0
  266. package/shared/stringify.js +29 -20
  267. package/shared/symbols.d.ts +26 -20
  268. package/shared/symbols.js +79 -79
  269. package/shared/tseynit.d.ts +2 -0
  270. package/shared/tseynit.js +160 -75
  271. package/shared/utilityTypes.d.ts +30 -14
  272. package/shared/utilityTypes.js +2 -6
  273. package/shared/vertexFormat.d.ts +41 -43
  274. package/shared/vertexFormat.js +59 -62
  275. package/std/array.d.ts +2 -7
  276. package/std/array.js +18 -23
  277. package/std/atomic.d.ts +14 -18
  278. package/std/atomic.js +96 -95
  279. package/std/bitcast.d.ts +193 -10
  280. package/std/bitcast.js +309 -39
  281. package/std/boolean.d.ts +19 -33
  282. package/std/boolean.js +296 -292
  283. package/std/copy.d.ts +2 -7
  284. package/std/copy.js +27 -24
  285. package/std/derivative.d.ts +11 -15
  286. package/std/derivative.js +56 -79
  287. package/std/discard.d.ts +1 -6
  288. package/std/discard.js +7 -14
  289. package/std/environment.d.ts +19 -14
  290. package/std/environment.js +71 -51
  291. package/std/extensions.d.ts +2 -8
  292. package/std/extensions.js +10 -11
  293. package/std/index.d.ts +20 -24
  294. package/std/index.js +32 -187
  295. package/std/matrix.d.ts +6 -12
  296. package/std/matrix.js +60 -69
  297. package/std/numeric.d.ts +150 -146
  298. package/std/numeric.js +771 -727
  299. package/std/operators.d.ts +19 -27
  300. package/std/operators.js +195 -194
  301. package/std/packing.d.ts +5 -11
  302. package/std/packing.js +67 -75
  303. package/std/range.d.ts +6 -11
  304. package/std/range.js +48 -36
  305. package/std/subgroup.d.ts +33 -37
  306. package/std/subgroup.js +180 -217
  307. package/std/texture.d.ts +70 -38
  308. package/std/texture.js +176 -172
  309. package/taskQueue.d.ts +6 -0
  310. package/taskQueue.js +30 -0
  311. package/tgpu.d.ts +16 -0
  312. package/tgpu.js +17 -44
  313. package/tgpuBindGroupLayout.d.ts +132 -152
  314. package/tgpuBindGroupLayout.js +346 -268
  315. package/tgpuLogger.d.ts +34 -0
  316. package/tgpuLogger.js +64 -0
  317. package/tgpuUnstable.d.ts +16 -22
  318. package/tgpuUnstable.js +13 -35
  319. package/tgsl/accessIndex.d.ts +2 -0
  320. package/tgsl/accessIndex.js +76 -33
  321. package/tgsl/accessProp.d.ts +2 -0
  322. package/tgsl/accessProp.js +142 -101
  323. package/tgsl/accessStructProp.d.ts +5 -0
  324. package/tgsl/accessStructProp.js +13 -15
  325. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  326. package/tgsl/consoleLog/deserializers.js +119 -103
  327. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  328. package/tgsl/consoleLog/logGenerator.js +85 -80
  329. package/tgsl/consoleLog/serializers.d.ts +21 -0
  330. package/tgsl/consoleLog/serializers.js +119 -100
  331. package/tgsl/consoleLog/types.d.ts +40 -39
  332. package/tgsl/consoleLog/types.js +1 -0
  333. package/tgsl/conversion.d.ts +33 -0
  334. package/tgsl/conversion.js +271 -216
  335. package/tgsl/forOfUtils.d.ts +15 -0
  336. package/tgsl/forOfUtils.js +85 -70
  337. package/tgsl/generationHelpers.d.ts +22 -39
  338. package/tgsl/generationHelpers.js +85 -58
  339. package/tgsl/infixDispatch.d.ts +70 -0
  340. package/tgsl/infixDispatch.js +48 -46
  341. package/tgsl/jsPolyfills.d.ts +16 -19
  342. package/tgsl/jsPolyfills.js +44 -42
  343. package/tgsl/makeDereferenceable.d.ts +48 -0
  344. package/tgsl/makeDereferenceable.js +86 -0
  345. package/tgsl/makeResolvable.d.ts +22 -0
  346. package/tgsl/makeResolvable.js +33 -0
  347. package/tgsl/shaderGenerator.d.ts +77 -17
  348. package/tgsl/shaderGenerator.js +1 -0
  349. package/tgsl/shellless.d.ts +6 -9
  350. package/tgsl/shellless.js +73 -43
  351. package/tgsl/wgslGenerator.d.ts +66 -59
  352. package/tgsl/wgslGenerator.js +1345 -760
  353. package/types.d.ts +287 -222
  354. package/types.js +61 -44
  355. package/unwrapper.d.ts +31 -26
  356. package/unwrapper.js +1 -0
  357. package/wgslExtensions.d.ts +3 -5
  358. package/wgslExtensions.js +12 -16
  359. package/_virtual/rolldown_runtime.js +0 -13
  360. package/core/buffer/bufferShorthand.d.ts +0 -50
  361. package/core/buffer/bufferShorthand.js +0 -55
  362. package/core/pipeline/applyPipelineState.js +0 -37
  363. package/core/pipeline/limitsOverflow.js +0 -13
  364. package/package.js +0 -5
  365. package/tgsl/shaderGenerator_members.d.ts +0 -33
  366. package/tgsl/shaderGenerator_members.js +0 -12
@@ -1,59 +1,64 @@
1
- import { getCustomLocation, isData } from "../../data/dataTypes.js";
2
1
  import { isBuiltin } from "../../data/attributes.js";
3
-
4
- //#region src/core/vertexLayout/connectAttributesToShader.ts
5
- function isAttribute(value) {
6
- return typeof value?.format === "string";
2
+ import { getCustomLocation } from "../../data/dataTypes.js";
3
+ import { isData } from "../../data/dataTypes.js";
4
+ export function isAttribute(value) {
5
+ return typeof value?.format === 'string';
7
6
  }
8
- function connectAttributesToShader(shaderInputLayout, attributes) {
9
- const usedVertexLayouts = [];
10
- if (isData(shaderInputLayout)) {
11
- if (!isAttribute(attributes)) throw new Error("Shader expected a single attribute, not a record of attributes to be passed in.");
12
- usedVertexLayouts.push(attributes._layout);
13
- return {
14
- usedVertexLayouts,
15
- bufferDefinitions: [{
16
- arrayStride: attributes._layout.stride,
17
- stepMode: attributes._layout.stepMode,
18
- attributes: [{
19
- format: attributes.format,
20
- offset: attributes.offset,
21
- shaderLocation: getCustomLocation(shaderInputLayout) ?? 0
22
- }]
23
- }]
24
- };
25
- }
26
- const bufferDefinitions = [];
27
- const layoutToAttribListMap = /* @__PURE__ */ new WeakMap();
28
- let nextShaderLocation = 0;
29
- for (const [key, member] of Object.entries(shaderInputLayout)) {
30
- if (isBuiltin(member)) continue;
31
- const matchingAttribute = attributes[key];
32
- if (!matchingAttribute) throw new Error(`An attribute by the name of '${key}' was not provided to the shader.`);
33
- const layout = matchingAttribute._layout;
34
- let attribList = layoutToAttribListMap.get(layout);
35
- if (!attribList) {
36
- usedVertexLayouts.push(layout);
37
- attribList = [];
38
- bufferDefinitions.push({
39
- arrayStride: layout.stride,
40
- stepMode: layout.stepMode,
41
- attributes: attribList
42
- });
43
- layoutToAttribListMap.set(layout, attribList);
44
- }
45
- nextShaderLocation = getCustomLocation(member) ?? nextShaderLocation;
46
- attribList.push({
47
- format: matchingAttribute.format,
48
- offset: matchingAttribute.offset,
49
- shaderLocation: nextShaderLocation++
50
- });
51
- }
52
- return {
53
- usedVertexLayouts,
54
- bufferDefinitions
55
- };
7
+ export function connectAttributesToShader(shaderInputLayout, attributes) {
8
+ const usedVertexLayouts = [];
9
+ if (isData(shaderInputLayout)) {
10
+ // Expecting a single attribute, no record.
11
+ if (!isAttribute(attributes)) {
12
+ throw new Error('Shader expected a single attribute, not a record of attributes to be passed in.');
13
+ }
14
+ usedVertexLayouts.push(attributes._layout);
15
+ return {
16
+ usedVertexLayouts,
17
+ bufferDefinitions: [
18
+ {
19
+ arrayStride: attributes._layout.stride,
20
+ stepMode: attributes._layout.stepMode,
21
+ attributes: [
22
+ {
23
+ format: attributes.format,
24
+ offset: attributes.offset,
25
+ shaderLocation: getCustomLocation(shaderInputLayout) ?? 0,
26
+ },
27
+ ],
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ const bufferDefinitions = [];
33
+ const layoutToAttribListMap = new WeakMap();
34
+ let nextShaderLocation = 0;
35
+ for (const [key, member] of Object.entries(shaderInputLayout)) {
36
+ if (isBuiltin(member)) {
37
+ continue;
38
+ }
39
+ const matchingAttribute = attributes[key];
40
+ if (!matchingAttribute) {
41
+ throw new Error(`An attribute by the name of '${key}' was not provided to the shader.`);
42
+ }
43
+ const layout = matchingAttribute._layout;
44
+ let attribList = layoutToAttribListMap.get(layout);
45
+ if (!attribList) {
46
+ // First time seeing this layout
47
+ usedVertexLayouts.push(layout);
48
+ attribList = [];
49
+ bufferDefinitions.push({
50
+ arrayStride: layout.stride,
51
+ stepMode: layout.stepMode,
52
+ attributes: attribList,
53
+ });
54
+ layoutToAttribListMap.set(layout, attribList);
55
+ }
56
+ nextShaderLocation = getCustomLocation(member) ?? nextShaderLocation;
57
+ attribList.push({
58
+ format: matchingAttribute.format,
59
+ offset: matchingAttribute.offset,
60
+ shaderLocation: nextShaderLocation++,
61
+ });
62
+ }
63
+ return { usedVertexLayouts, bufferDefinitions };
56
64
  }
57
-
58
- //#endregion
59
- export { connectAttributesToShader, isAttribute };
@@ -1,10 +1,7 @@
1
- import { KindToAcceptedAttribMap, KindToDefaultFormatMap, TgpuVertexAttrib, VertexFormat } from "../../shared/vertexFormat.js";
2
- import { FormatToWGSLType } from "../../data/vertexFormatData.js";
3
- import { Decorated, WgslArray, WgslStruct } from "../../data/wgslTypes.js";
4
- import { Disarray, LooseDecorated, Unstruct } from "../../data/dataTypes.js";
5
-
6
- //#region src/core/vertexLayout/vertexAttribute.d.ts
7
-
1
+ import type { Disarray, LooseDecorated, Unstruct } from '../../data/dataTypes.ts';
2
+ import type { FormatToAcceptedData, FormatToWGSLType } from '../../data/vertexFormatData.ts';
3
+ import type { Decorated, WgslArray, WgslStruct } from '../../data/wgslTypes.ts';
4
+ import type { KindToAcceptedAttribMap, KindToDefaultFormatMap, TgpuVertexAttrib, VertexFormat } from '../../shared/vertexFormat.ts';
8
5
  /**
9
6
  * The array can hold T, where T is a single/multi-component numeric, or a struct with members of type T.
10
7
  * Examples of valid array members:
@@ -13,18 +10,25 @@ import { Disarray, LooseDecorated, Unstruct } from "../../data/dataTypes.js";
13
10
  * - WgslStruct<{ a: Vec3f, b: unorm8x2 }>
14
11
  * - WgslStruct<{ nested: WgslStruct<{ a: Vec3f }> }>
15
12
  */
16
- type DataToContainedAttribs<T> = T extends WgslStruct | Unstruct ? { [Key in keyof T['propTypes']]: DataToContainedAttribs<T['propTypes'][Key]> } : T extends {
17
- type: VertexFormat;
13
+ export type DataToContainedAttribs<T> = T extends WgslStruct | Unstruct ? {
14
+ [Key in keyof T['propTypes']]: DataToContainedAttribs<T['propTypes'][Key]>;
15
+ } : T extends {
16
+ type: VertexFormat;
18
17
  } ? TgpuVertexAttrib<T['type']> : T extends {
19
- type: keyof KindToDefaultFormatMap;
18
+ type: keyof KindToDefaultFormatMap;
20
19
  } ? TgpuVertexAttrib<KindToDefaultFormatMap[T['type']]> : T extends Decorated<infer TInner> ? DataToContainedAttribs<TInner> : T extends LooseDecorated<infer TInner> ? DataToContainedAttribs<TInner> : never;
21
20
  /**
22
21
  * Interprets an array as a set of vertex attributes.
23
22
  */
24
- type ArrayToContainedAttribs<T extends WgslArray | Disarray> = DataToContainedAttribs<T['elementType']>;
25
- type LayoutToAllowedAttribs<T> = T extends {
26
- type: keyof KindToAcceptedAttribMap;
27
- } ? KindToAcceptedAttribMap[T['type']] : T extends Record<string, unknown> ? { [Key in keyof T]: LayoutToAllowedAttribs<T[Key]> } : never;
28
- type AttribRecordToDefaultDataTypes<T extends Record<string, TgpuVertexAttrib>> = { [Key in keyof T]: FormatToWGSLType<T[Key]['format']> };
29
- //#endregion
30
- export { ArrayToContainedAttribs, AttribRecordToDefaultDataTypes, LayoutToAllowedAttribs };
23
+ export type ArrayToContainedAttribs<T extends WgslArray | Disarray> = DataToContainedAttribs<T['elementType']>;
24
+ export type LayoutToAllowedAttribs<T> = T extends {
25
+ type: keyof KindToAcceptedAttribMap;
26
+ } ? KindToAcceptedAttribMap[T['type']] : T extends Record<string, unknown> ? {
27
+ [Key in keyof T]: LayoutToAllowedAttribs<T[Key]>;
28
+ } : never;
29
+ export type AttribRecordToDefaultDataTypes<T extends Record<string, TgpuVertexAttrib>> = {
30
+ [Key in keyof T]: FormatToWGSLType<T[Key]['format']>;
31
+ };
32
+ export type AttribRecordToAcceptedDataTypes<T extends Record<string, TgpuVertexAttrib>> = {
33
+ [Key in keyof T]: FormatToAcceptedData[T[Key]['format']];
34
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,19 +1,25 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $internal } from "../../shared/symbols.js";
3
- import { ArrayToContainedAttribs } from "./vertexAttribute.js";
4
- import { WgslArray } from "../../data/wgslTypes.js";
5
- import { Disarray } from "../../data/dataTypes.js";
6
-
7
- //#region src/core/vertexLayout/vertexLayout.d.ts
8
- interface TgpuVertexLayout<TData extends WgslArray | Disarray = WgslArray | Disarray> extends TgpuNamable {
9
- readonly [$internal]: true;
10
- readonly resourceType: 'vertex-layout';
11
- readonly stride: number;
12
- readonly stepMode: 'vertex' | 'instance';
13
- readonly attrib: ArrayToContainedAttribs<TData>;
14
- readonly vertexLayout: GPUVertexBufferLayout;
15
- schemaForCount(n: number): TData;
1
+ import type { Disarray } from '../../data/dataTypes.ts';
2
+ import type { WgslArray } from '../../data/wgslTypes.ts';
3
+ import type { TgpuNamable } from '../../shared/meta.ts';
4
+ import type { TgpuSoul } from '../../shared/soul.ts';
5
+ import { $internal, $soul } from '../../shared/symbols.ts';
6
+ import type { ArrayToContainedAttribs } from './vertexAttribute.ts';
7
+ export interface TgpuVertexLayoutSoul extends TgpuSoul<'vertex-layout'> {
8
+ readonly schema: WgslArray | Disarray;
9
+ readonly stepMode: 'vertex' | 'instance';
16
10
  }
17
- declare function vertexLayout<TData extends WgslArray | Disarray>(schemaForCount: (count: number) => TData, stepMode?: 'vertex' | 'instance'): TgpuVertexLayout<TData>;
18
- //#endregion
19
- export { TgpuVertexLayout, vertexLayout };
11
+ export interface TgpuVertexLayout<TData extends WgslArray | Disarray = WgslArray | Disarray> extends TgpuNamable {
12
+ readonly [$internal]: true;
13
+ readonly [$soul]: TgpuVertexLayoutSoul;
14
+ readonly resourceType: 'vertex-layout';
15
+ readonly stride: number;
16
+ readonly stepMode: 'vertex' | 'instance';
17
+ readonly attrib: ArrayToContainedAttribs<TData>;
18
+ readonly vertexLayout: GPUVertexBufferLayout;
19
+ schemaForCount(n: number): TData;
20
+ }
21
+ export interface INTERNAL_TgpuVertexAttrib {
22
+ readonly _layout: TgpuVertexLayout;
23
+ }
24
+ export declare function vertexLayout<TData extends WgslArray | Disarray>(schemaForCount: (count: number) => TData, stepMode?: 'vertex' | 'instance'): TgpuVertexLayout<TData>;
25
+ export declare function isVertexLayout(value: unknown): value is TgpuVertexLayout;
@@ -1,105 +1,136 @@
1
- import { $internal } from "../../shared/symbols.js";
2
- import { isDecorated, isWgslStruct } from "../../data/wgslTypes.js";
3
- import { setName } from "../../shared/meta.js";
4
- import { kindToDefaultFormatMap, vertexFormats } from "../../shared/vertexFormat.js";
5
- import { getCustomLocation, isLooseDecorated, isUnstruct } from "../../data/dataTypes.js";
6
1
  import { alignmentOf, customAlignmentOf } from "../../data/alignmentOf.js";
7
- import { roundUp } from "../../mathUtils.js";
2
+ import { getCustomLocation, isLooseDecorated, isUnstruct } from "../../data/dataTypes.js";
8
3
  import { sizeOf } from "../../data/sizeOf.js";
9
-
10
- //#region src/core/vertexLayout/vertexLayout.ts
11
- function vertexLayout(schemaForCount, stepMode = "vertex") {
12
- return new TgpuVertexLayoutImpl(schemaForCount, stepMode);
4
+ import { isDecorated, isWgslStruct } from "../../data/wgslTypes.js";
5
+ import { roundUp } from "../../mathUtils.js";
6
+ import { setName } from "../../shared/meta.js";
7
+ import { $internal, $soul } from "../../shared/symbols.js";
8
+ import { kindToDefaultFormatMap, vertexFormats, } from "../../shared/vertexFormat.js";
9
+ export function vertexLayout(schemaForCount, stepMode = 'vertex') {
10
+ return new TgpuVertexLayoutImpl(schemaForCount, stepMode);
13
11
  }
14
- function isVertexLayout(value) {
15
- return value?.resourceType === "vertex-layout";
12
+ export function isVertexLayout(value) {
13
+ return value?.resourceType === 'vertex-layout';
16
14
  }
17
- const defaultAttribEntry = Symbol("defaultAttribEntry");
15
+ // --------------
16
+ // Implementation
17
+ // --------------
18
+ const defaultAttribEntry = Symbol('defaultAttribEntry');
18
19
  function dataToContainedAttribs(layout, data, offset, customLocationMap, key) {
19
- if (isDecorated(data) || isLooseDecorated(data)) {
20
- const customLocation = getCustomLocation(data);
21
- if (customLocation !== void 0) customLocationMap[key ?? defaultAttribEntry] = customLocation;
22
- return dataToContainedAttribs(layout, data.inner, roundUp(offset, customAlignmentOf(data)), customLocationMap);
23
- }
24
- if (isWgslStruct(data)) {
25
- let memberOffset = offset;
26
- const propTypes = data.propTypes;
27
- return Object.fromEntries(Object.entries(propTypes).map(([key$1, value]) => {
28
- memberOffset = roundUp(memberOffset, alignmentOf(value));
29
- const attrib = [key$1, dataToContainedAttribs(layout, value, memberOffset, customLocationMap, key$1)];
30
- memberOffset += sizeOf(value);
31
- return attrib;
32
- }));
33
- }
34
- if (isUnstruct(data)) {
35
- let memberOffset = offset;
36
- const propTypes = data.propTypes;
37
- return Object.fromEntries(Object.entries(propTypes).map(([key$1, value]) => {
38
- memberOffset = roundUp(memberOffset, customAlignmentOf(value));
39
- const attrib = [key$1, dataToContainedAttribs(layout, value, memberOffset, customLocationMap, key$1)];
40
- memberOffset += sizeOf(value);
41
- return attrib;
42
- }));
43
- }
44
- if ("type" in data && typeof data.type === "string") {
45
- if (vertexFormats.includes(data.type)) return {
46
- _layout: layout,
47
- format: data.type,
48
- offset
49
- };
50
- const format = kindToDefaultFormatMap[data.type];
51
- if (format) return {
52
- _layout: layout,
53
- format,
54
- offset
55
- };
56
- }
57
- throw new Error(`Unsupported data used in vertex layout: ${String(data)}`);
20
+ if (isDecorated(data) || isLooseDecorated(data)) {
21
+ const customLocation = getCustomLocation(data);
22
+ if (customLocation !== undefined) {
23
+ customLocationMap[key ?? defaultAttribEntry] = customLocation;
24
+ }
25
+ return dataToContainedAttribs(layout, data.inner, roundUp(offset, customAlignmentOf(data)), customLocationMap);
26
+ }
27
+ if (isWgslStruct(data)) {
28
+ let memberOffset = offset;
29
+ const propTypes = data.propTypes;
30
+ return Object.fromEntries(Object.entries(propTypes).map(([key, value]) => {
31
+ memberOffset = roundUp(memberOffset, alignmentOf(value));
32
+ const attrib = [
33
+ key,
34
+ dataToContainedAttribs(layout, value, memberOffset, customLocationMap, key),
35
+ ];
36
+ memberOffset += sizeOf(value);
37
+ return attrib;
38
+ }));
39
+ }
40
+ if (isUnstruct(data)) {
41
+ let memberOffset = offset;
42
+ const propTypes = data.propTypes;
43
+ return Object.fromEntries(Object.entries(propTypes).map(([key, value]) => {
44
+ memberOffset = roundUp(memberOffset, customAlignmentOf(value));
45
+ const attrib = [
46
+ key,
47
+ dataToContainedAttribs(layout, value, memberOffset, customLocationMap, key),
48
+ ];
49
+ memberOffset += sizeOf(value);
50
+ return attrib;
51
+ }));
52
+ }
53
+ if ('type' in data && typeof data.type === 'string') {
54
+ if (vertexFormats.includes(data.type)) {
55
+ return {
56
+ _layout: layout, // hidden property, used to determine which buffers to apply when executing the pipeline
57
+ format: data.type,
58
+ offset,
59
+ // oxlint-disable-next-line typescript/no-explicit-any -- too many type shenanigans
60
+ };
61
+ }
62
+ const format = kindToDefaultFormatMap[data.type];
63
+ if (format) {
64
+ return {
65
+ _layout: layout, // hidden property, used to determine which buffers to apply when executing the pipeline
66
+ format,
67
+ offset,
68
+ // oxlint-disable-next-line typescript/no-explicit-any -- too many type shenanigans
69
+ };
70
+ }
71
+ }
72
+ throw new Error(`Unsupported data used in vertex layout: ${String(data)}`);
73
+ }
74
+ class TgpuVertexLayoutImpl {
75
+ [$internal] = true;
76
+ [$soul];
77
+ resourceType = 'vertex-layout';
78
+ stride;
79
+ attrib;
80
+ schemaForCount;
81
+ #customLocationMap = {};
82
+ constructor(schemaForCount, stepMode) {
83
+ this.schemaForCount = schemaForCount;
84
+ // `0` signals that the data-type is runtime-sized, and should not be used to create buffers.
85
+ const arraySchema = schemaForCount(0);
86
+ this[$soul] = {
87
+ type: 'vertex-layout',
88
+ schema: arraySchema,
89
+ stepMode,
90
+ label: undefined,
91
+ };
92
+ this.stride = roundUp(sizeOf(arraySchema.elementType), alignmentOf(arraySchema));
93
+ this.attrib = dataToContainedAttribs(this, arraySchema.elementType, 0, this.#customLocationMap);
94
+ }
95
+ get stepMode() {
96
+ return this[$soul].stepMode;
97
+ }
98
+ get vertexLayout() {
99
+ // If defaultAttribEntry is in the custom location map,
100
+ // it means that the vertex layout is based on a single attribute
101
+ if (this.#customLocationMap[defaultAttribEntry] !== undefined) {
102
+ if (typeof this.attrib.format !== 'string' || typeof this.attrib.offset !== 'number') {
103
+ throw new Error('Single attribute vertex layouts must have a format and offset.');
104
+ }
105
+ return {
106
+ arrayStride: this.stride,
107
+ stepMode: this.stepMode,
108
+ attributes: [
109
+ {
110
+ format: this.attrib.format,
111
+ offset: this.attrib.offset,
112
+ shaderLocation: this.#customLocationMap[defaultAttribEntry],
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ // check if all attributes have custom locations
118
+ const allAttributesHaveCustomLocations = Object.keys(this.attrib).every((key) => this.#customLocationMap[key] !== undefined);
119
+ if (!allAttributesHaveCustomLocations) {
120
+ throw new Error('All attributes must have custom locations in order to unwrap a vertex layout.');
121
+ }
122
+ return {
123
+ arrayStride: this.stride,
124
+ stepMode: this.stepMode,
125
+ attributes: Object.entries(this.attrib).map(([key, attrib]) => ({
126
+ format: attrib.format,
127
+ offset: attrib.offset,
128
+ shaderLocation: this.#customLocationMap[key],
129
+ })),
130
+ };
131
+ }
132
+ $name(label) {
133
+ setName(this, label);
134
+ return this;
135
+ }
58
136
  }
59
- var TgpuVertexLayoutImpl = class {
60
- [$internal] = true;
61
- resourceType = "vertex-layout";
62
- stride;
63
- attrib;
64
- schemaForCount;
65
- stepMode;
66
- #customLocationMap = {};
67
- constructor(schemaForCount, stepMode) {
68
- this.schemaForCount = schemaForCount;
69
- this.stepMode = stepMode;
70
- const arraySchema = schemaForCount(0);
71
- this.stride = roundUp(sizeOf(arraySchema.elementType), alignmentOf(arraySchema));
72
- this.attrib = dataToContainedAttribs(this, arraySchema.elementType, 0, this.#customLocationMap);
73
- }
74
- get vertexLayout() {
75
- if (this.#customLocationMap[defaultAttribEntry] !== void 0) {
76
- if (typeof this.attrib.format !== "string" || typeof this.attrib.offset !== "number") throw new Error("Single attribute vertex layouts must have a format and offset.");
77
- return {
78
- arrayStride: this.stride,
79
- stepMode: this.stepMode,
80
- attributes: [{
81
- format: this.attrib.format,
82
- offset: this.attrib.offset,
83
- shaderLocation: this.#customLocationMap[defaultAttribEntry]
84
- }]
85
- };
86
- }
87
- if (!Object.keys(this.attrib).every((key) => this.#customLocationMap[key] !== void 0)) throw new Error("All attributes must have custom locations in order to unwrap a vertex layout.");
88
- return {
89
- arrayStride: this.stride,
90
- stepMode: this.stepMode,
91
- attributes: Object.entries(this.attrib).map(([key, attrib]) => ({
92
- format: attrib.format,
93
- offset: attrib.offset,
94
- shaderLocation: this.#customLocationMap[key]
95
- }))
96
- };
97
- }
98
- $name(label) {
99
- setName(this, label);
100
- return this;
101
- }
102
- };
103
-
104
- //#endregion
105
- export { isVertexLayout, vertexLayout };
@@ -0,0 +1,2 @@
1
+ export declare const lineBreaks: Set<string>;
2
+ export declare const blankSpaces: Set<string>;
@@ -0,0 +1,16 @@
1
+ export const lineBreaks = new Set([
2
+ '\u000A', // line feed
3
+ '\u000B', // vertical tab
4
+ '\u000C', // form feed
5
+ '\u000D', // carriage return
6
+ '\u0085', // next line
7
+ '\u2028', // line separator
8
+ '\u2029', // paragraph separator
9
+ ]);
10
+ export const blankSpaces = new Set([
11
+ ...lineBreaks,
12
+ '\u0020', // space
13
+ '\u0009', // horizontal tab
14
+ '\u200E', // left-to-right mark
15
+ '\u200F', // right-to-left mark
16
+ ]);
@@ -0,0 +1,7 @@
1
+ import type { IMeasurer, ISerialInput, ISerialOutput } from 'typed-binary';
2
+ /**
3
+ * @param io the IO to align
4
+ * @param baseAlignment must be power of 2
5
+ */
6
+ declare function alignIO(io: ISerialInput | ISerialOutput | IMeasurer, baseAlignment: number): void;
7
+ export default alignIO;
package/data/alignIO.js CHANGED
@@ -1,16 +1,16 @@
1
- //#region src/data/alignIO.ts
2
1
  /**
3
- * @param io the IO to align
4
- * @param baseAlignment must be power of 2
5
- */
2
+ * @param io the IO to align
3
+ * @param baseAlignment must be power of 2
4
+ */
6
5
  function alignIO(io, baseAlignment) {
7
- const currentPos = "size" in io ? io.size : io.currentByteOffset;
8
- const bitMask = baseAlignment - 1;
9
- const offset = currentPos & bitMask;
10
- if ("skipBytes" in io) io.skipBytes(baseAlignment - offset & bitMask);
11
- else io.add(baseAlignment - offset & bitMask);
6
+ const currentPos = 'size' in io ? io.size : io.currentByteOffset;
7
+ const bitMask = baseAlignment - 1;
8
+ const offset = currentPos & bitMask;
9
+ if ('skipBytes' in io) {
10
+ io.skipBytes((baseAlignment - offset) & bitMask);
11
+ }
12
+ else {
13
+ io.add((baseAlignment - offset) & bitMask);
14
+ }
12
15
  }
13
- var alignIO_default = alignIO;
14
-
15
- //#endregion
16
- export { alignIO_default as default };
16
+ export default alignIO;
@@ -1,11 +1,8 @@
1
- import "./wgslTypes.js";
2
- import { AnyData } from "./dataTypes.js";
3
-
4
- //#region src/data/alignmentOf.d.ts
5
-
1
+ import { type AnyData } from './dataTypes.ts';
2
+ import { type BaseData } from './wgslTypes.ts';
3
+ export declare function alignmentOf(data: BaseData): number;
4
+ export declare function customAlignmentOf(data: BaseData): number;
6
5
  /**
7
6
  * Returns the alignment (in bytes) of data represented by the `schema`.
8
7
  */
9
- declare function PUBLIC_alignmentOf(schema: AnyData): number;
10
- //#endregion
11
- export { PUBLIC_alignmentOf };
8
+ export declare function PUBLIC_alignmentOf(schema: AnyData): number;