typegpu 0.11.8 → 0.12.0

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 (362) hide show
  1. package/builtin.d.ts +51 -53
  2. package/builtin.js +30 -34
  3. package/common/fullScreenTriangle.d.ts +2 -10
  4. package/common/fullScreenTriangle.js +20 -28
  5. package/common/index.d.ts +2 -9
  6. package/common/index.js +3 -12
  7. package/common/writeSoA.d.ts +11 -12
  8. package/common/writeSoA.js +88 -76
  9. package/core/buffer/buffer.d.ts +79 -62
  10. package/core/buffer/buffer.js +279 -205
  11. package/core/buffer/bufferBinding.d.ts +71 -0
  12. package/core/buffer/bufferBinding.js +154 -0
  13. package/core/buffer/bufferUsage.d.ts +14 -45
  14. package/core/buffer/bufferUsage.js +1 -171
  15. package/core/buffer/laidOutBuffer.d.ts +25 -0
  16. package/core/buffer/laidOutBuffer.js +55 -0
  17. package/core/commandEncoder/attachments.d.ts +125 -0
  18. package/core/commandEncoder/attachments.js +29 -0
  19. package/core/commandEncoder/commandEncoder.d.ts +53 -0
  20. package/core/commandEncoder/commandEncoder.js +56 -0
  21. package/core/commandEncoder/computePass.d.ts +58 -0
  22. package/core/commandEncoder/computePass.js +63 -0
  23. package/core/commandEncoder/renderPass.d.ts +121 -0
  24. package/core/commandEncoder/renderPass.js +196 -0
  25. package/core/constant/tgpuConstant.d.ts +26 -26
  26. package/core/constant/tgpuConstant.js +76 -65
  27. package/core/declare/tgpuDeclare.d.ts +3 -6
  28. package/core/declare/tgpuDeclare.js +37 -38
  29. package/core/function/autoIO.d.ts +61 -33
  30. package/core/function/autoIO.js +68 -73
  31. package/core/function/comptime.d.ts +11 -13
  32. package/core/function/comptime.js +60 -52
  33. package/core/function/createCallableSchema.d.ts +16 -0
  34. package/core/function/createCallableSchema.js +50 -40
  35. package/core/function/dualImpl.d.ts +44 -0
  36. package/core/function/dualImpl.js +71 -50
  37. package/core/function/entryInputRouter.d.ts +26 -0
  38. package/core/function/entryInputRouter.js +31 -33
  39. package/core/function/extractArgs.d.ts +38 -0
  40. package/core/function/extractArgs.js +202 -200
  41. package/core/function/fnCore.d.ts +44 -0
  42. package/core/function/fnCore.js +148 -92
  43. package/core/function/fnTypes.d.ts +31 -29
  44. package/core/function/fnTypes.js +1 -0
  45. package/core/function/ioSchema.d.ts +12 -10
  46. package/core/function/ioSchema.js +65 -47
  47. package/core/function/shelllessImpl.d.ts +9 -12
  48. package/core/function/shelllessImpl.js +18 -20
  49. package/core/function/templateUtils.d.ts +2 -0
  50. package/core/function/templateUtils.js +9 -8
  51. package/core/function/tgpuComputeFn.d.ts +26 -28
  52. package/core/function/tgpuComputeFn.js +47 -48
  53. package/core/function/tgpuFn.d.ts +34 -37
  54. package/core/function/tgpuFn.js +179 -153
  55. package/core/function/tgpuFragmentFn.d.ts +52 -53
  56. package/core/function/tgpuFragmentFn.js +63 -56
  57. package/core/function/tgpuVertexFn.d.ts +36 -39
  58. package/core/function/tgpuVertexFn.js +56 -53
  59. package/core/pipeline/computePipeline.d.ts +141 -53
  60. package/core/pipeline/computePipeline.js +291 -225
  61. package/core/pipeline/connectAttachmentToShader.d.ts +4 -0
  62. package/core/pipeline/connectAttachmentToShader.js +25 -22
  63. package/core/pipeline/connectTargetsToShader.d.ts +3 -0
  64. package/core/pipeline/connectTargetsToShader.js +29 -27
  65. package/core/pipeline/drawState.d.ts +52 -0
  66. package/core/pipeline/drawState.js +225 -0
  67. package/core/pipeline/limitsOverflow.d.ts +2 -0
  68. package/core/pipeline/limitsOverflow.js +13 -10
  69. package/core/pipeline/performanceTracker.d.ts +14 -0
  70. package/core/pipeline/performanceTracker.js +34 -0
  71. package/core/pipeline/pipelineUtils.d.ts +18 -0
  72. package/core/pipeline/pipelineUtils.js +54 -25
  73. package/core/pipeline/priors.d.ts +1 -0
  74. package/core/pipeline/priors.js +12 -0
  75. package/core/pipeline/renderPipeline.d.ts +246 -261
  76. package/core/pipeline/renderPipeline.js +487 -480
  77. package/core/pipeline/timeable.d.ts +28 -18
  78. package/core/pipeline/timeable.js +90 -52
  79. package/core/pipeline/typeGuards.d.ts +17 -0
  80. package/core/pipeline/typeGuards.js +52 -22
  81. package/core/querySet/querySet.d.ts +26 -21
  82. package/core/querySet/querySet.js +127 -103
  83. package/core/rawCodeSnippet/tgpuRawCodeSnippet.d.ts +13 -18
  84. package/core/rawCodeSnippet/tgpuRawCodeSnippet.js +90 -93
  85. package/core/resolve/externals.d.ts +25 -7
  86. package/core/resolve/externals.js +79 -62
  87. package/core/resolve/namespace.d.ts +22 -25
  88. package/core/resolve/namespace.js +16 -21
  89. package/core/resolve/resolvableString.d.ts +7 -0
  90. package/core/resolve/resolvableString.js +13 -0
  91. package/core/resolve/resolveData.d.ts +10 -0
  92. package/core/resolve/resolveData.js +162 -121
  93. package/core/resolve/stitch.d.ts +8 -0
  94. package/core/resolve/stitch.js +23 -21
  95. package/core/resolve/tgpuResolve.d.ts +55 -53
  96. package/core/resolve/tgpuResolve.js +106 -55
  97. package/core/root/configurableImpl.d.ts +10 -0
  98. package/core/root/configurableImpl.js +17 -19
  99. package/core/root/init.d.ts +76 -38
  100. package/core/root/init.js +346 -454
  101. package/core/root/rootTypes.d.ts +461 -627
  102. package/core/root/rootTypes.js +1 -0
  103. package/core/sampler/sampler.d.ts +50 -31
  104. package/core/sampler/sampler.js +120 -113
  105. package/core/simulate/tgpuSimulate.d.ts +9 -12
  106. package/core/simulate/tgpuSimulate.js +68 -71
  107. package/core/slot/accessor.d.ts +36 -13
  108. package/core/slot/accessor.js +138 -91
  109. package/core/slot/internalSlots.d.ts +2 -0
  110. package/core/slot/internalSlots.js +1 -6
  111. package/core/slot/lazy.d.ts +2 -6
  112. package/core/slot/lazy.js +71 -39
  113. package/core/slot/slot.d.ts +2 -6
  114. package/core/slot/slot.js +45 -38
  115. package/core/slot/slotTypes.d.ts +78 -80
  116. package/core/slot/slotTypes.js +11 -16
  117. package/core/texture/externalTexture.d.ts +20 -11
  118. package/core/texture/externalTexture.js +46 -46
  119. package/core/texture/texture.d.ts +152 -97
  120. package/core/texture/texture.js +407 -314
  121. package/core/texture/textureFormats.d.ts +42 -23
  122. package/core/texture/textureFormats.js +104 -75
  123. package/core/texture/textureProps.d.ts +7 -10
  124. package/core/texture/textureProps.js +1 -0
  125. package/core/texture/textureUtils.d.ts +8 -0
  126. package/core/texture/textureUtils.js +185 -179
  127. package/core/texture/usageExtension.d.ts +21 -18
  128. package/core/texture/usageExtension.js +13 -17
  129. package/core/unroll/tgpuUnroll.d.ts +20 -19
  130. package/core/unroll/tgpuUnroll.js +82 -91
  131. package/core/valueProxyUtils.d.ts +3 -0
  132. package/core/valueProxyUtils.js +52 -41
  133. package/core/variable/tgpuVariable.d.ts +26 -27
  134. package/core/variable/tgpuVariable.js +93 -96
  135. package/core/vertexLayout/connectAttributesToShader.d.ts +9 -0
  136. package/core/vertexLayout/connectAttributesToShader.js +61 -56
  137. package/core/vertexLayout/vertexAttribute.d.ts +21 -17
  138. package/core/vertexLayout/vertexAttribute.js +1 -0
  139. package/core/vertexLayout/vertexLayout.d.ts +24 -18
  140. package/core/vertexLayout/vertexLayout.js +130 -99
  141. package/core/whitespaces.d.ts +2 -0
  142. package/core/whitespaces.js +16 -0
  143. package/data/alignIO.d.ts +7 -0
  144. package/data/alignIO.js +13 -13
  145. package/data/alignmentOf.d.ts +5 -8
  146. package/data/alignmentOf.js +90 -75
  147. package/data/array.d.ts +6 -9
  148. package/data/array.js +48 -40
  149. package/data/atomic.d.ts +2 -7
  150. package/data/atomic.js +26 -23
  151. package/data/attributes.d.ts +19 -21
  152. package/data/attributes.js +192 -132
  153. package/data/autoStruct.d.ts +36 -3
  154. package/data/autoStruct.js +84 -81
  155. package/data/compiledIO.d.ts +5 -0
  156. package/data/compiledIO.js +231 -214
  157. package/data/dataIO.d.ts +13 -11
  158. package/data/dataIO.js +643 -589
  159. package/data/dataTypes.d.ts +83 -65
  160. package/data/dataTypes.js +66 -68
  161. package/data/deepEqual.d.ts +2 -7
  162. package/data/deepEqual.js +80 -55
  163. package/data/disarray.d.ts +6 -10
  164. package/data/disarray.js +52 -46
  165. package/data/float16Conversion.d.ts +4 -0
  166. package/data/float16Conversion.js +7 -0
  167. package/data/getLongestContiguousPrefix.d.ts +4 -8
  168. package/data/getLongestContiguousPrefix.js +6 -11
  169. package/data/index.d.ts +30 -31
  170. package/data/index.js +39 -172
  171. package/data/instanceToSchema.d.ts +24 -27
  172. package/data/instanceToSchema.js +1 -0
  173. package/data/isContiguous.d.ts +4 -8
  174. package/data/isContiguous.js +6 -11
  175. package/data/matrix.d.ts +21 -21
  176. package/data/matrix.js +513 -505
  177. package/data/numberOps.d.ts +6 -0
  178. package/data/numberOps.js +26 -20
  179. package/data/numeric.d.ts +21 -12
  180. package/data/numeric.js +287 -192
  181. package/data/offsetUtils.d.ts +9 -13
  182. package/data/offsetUtils.js +204 -144
  183. package/data/offsets.d.ts +8 -0
  184. package/data/offsets.js +33 -33
  185. package/data/partialIO.d.ts +13 -8
  186. package/data/partialIO.js +124 -113
  187. package/data/ptr.d.ts +12 -12
  188. package/data/ptr.js +42 -44
  189. package/data/ref.d.ts +40 -27
  190. package/data/ref.js +125 -95
  191. package/data/sampler.d.ts +99 -101
  192. package/data/sampler.js +17 -21
  193. package/data/schemaCallWrapper.d.ts +19 -0
  194. package/data/schemaCallWrapper.js +31 -26
  195. package/data/schemaMemoryLayout.d.ts +8 -0
  196. package/data/schemaMemoryLayout.js +213 -185
  197. package/data/sizeOf.d.ts +4 -8
  198. package/data/sizeOf.js +6 -11
  199. package/data/snippet.d.ts +96 -20
  200. package/data/snippet.js +75 -86
  201. package/data/struct.d.ts +4 -7
  202. package/data/struct.js +51 -39
  203. package/data/texture.d.ts +253 -250
  204. package/data/texture.js +238 -200
  205. package/data/unstruct.d.ts +2 -7
  206. package/data/unstruct.js +43 -37
  207. package/data/vector.d.ts +33 -21
  208. package/data/vector.js +234 -221
  209. package/data/vectorImpl.d.ts +231 -0
  210. package/data/vectorImpl.js +563 -515
  211. package/data/vectorOps.d.ts +63 -0
  212. package/data/vectorOps.js +642 -630
  213. package/data/vertexFormatData.d.ts +181 -184
  214. package/data/vertexFormatData.js +104 -106
  215. package/data/wgslTypes.d.ts +665 -600
  216. package/data/wgslTypes.js +220 -198
  217. package/errors.d.ts +50 -24
  218. package/errors.js +146 -120
  219. package/execMode.d.ts +16 -0
  220. package/execMode.js +47 -40
  221. package/extension.d.ts +13 -8
  222. package/extension.js +10 -16
  223. package/getGPUValue.d.ts +1 -0
  224. package/getGPUValue.js +2 -7
  225. package/index.d.ts +28 -68
  226. package/index.js +8 -28
  227. package/indexNamedExports.d.ts +69 -42
  228. package/indexNamedExports.js +25 -0
  229. package/internal.d.ts +16 -0
  230. package/internal.js +12 -0
  231. package/mathUtils.d.ts +5 -0
  232. package/mathUtils.js +7 -11
  233. package/memo.d.ts +11 -0
  234. package/memo.js +20 -22
  235. package/minify.d.ts +5 -0
  236. package/minify.js +93 -0
  237. package/nameUtils.d.ts +29 -0
  238. package/nameUtils.js +428 -398
  239. package/package.json +9 -3
  240. package/resolutionCtx.d.ts +162 -22
  241. package/resolutionCtx.js +911 -624
  242. package/serial/registry.d.ts +15 -0
  243. package/serial/registry.js +106 -0
  244. package/serial/restore.d.ts +49 -0
  245. package/serial/restore.js +68 -0
  246. package/serial/schema.d.ts +58 -0
  247. package/serial/schema.js +209 -0
  248. package/serial/types.d.ts +5 -0
  249. package/serial/types.js +1 -0
  250. package/shared/env.d.ts +9 -0
  251. package/shared/env.js +9 -12
  252. package/shared/generators.d.ts +4 -0
  253. package/shared/generators.js +10 -12
  254. package/shared/meta.d.ts +29 -14
  255. package/shared/meta.js +71 -55
  256. package/shared/normalizeMetadata.d.ts +32 -27
  257. package/shared/normalizeMetadata.js +23 -36
  258. package/shared/repr.d.ts +73 -55
  259. package/shared/repr.js +1 -0
  260. package/shared/soul.d.ts +17 -0
  261. package/shared/soul.js +1 -0
  262. package/shared/stringify.d.ts +2 -0
  263. package/shared/stringify.js +29 -20
  264. package/shared/symbols.d.ts +26 -20
  265. package/shared/symbols.js +79 -79
  266. package/shared/tseynit.d.ts +2 -0
  267. package/shared/tseynit.js +160 -75
  268. package/shared/utilityTypes.d.ts +30 -14
  269. package/shared/utilityTypes.js +2 -6
  270. package/shared/vertexFormat.d.ts +41 -43
  271. package/shared/vertexFormat.js +59 -62
  272. package/std/array.d.ts +2 -7
  273. package/std/array.js +18 -23
  274. package/std/atomic.d.ts +14 -18
  275. package/std/atomic.js +96 -95
  276. package/std/bitcast.d.ts +193 -10
  277. package/std/bitcast.js +309 -39
  278. package/std/boolean.d.ts +19 -33
  279. package/std/boolean.js +296 -288
  280. package/std/copy.d.ts +2 -7
  281. package/std/copy.js +27 -24
  282. package/std/derivative.d.ts +11 -15
  283. package/std/derivative.js +56 -79
  284. package/std/discard.d.ts +1 -6
  285. package/std/discard.js +7 -14
  286. package/std/environment.d.ts +19 -14
  287. package/std/environment.js +71 -51
  288. package/std/extensions.d.ts +2 -8
  289. package/std/extensions.js +10 -11
  290. package/std/index.d.ts +20 -24
  291. package/std/index.js +32 -187
  292. package/std/matrix.d.ts +6 -12
  293. package/std/matrix.js +60 -69
  294. package/std/numeric.d.ts +143 -146
  295. package/std/numeric.js +858 -749
  296. package/std/operators.d.ts +19 -27
  297. package/std/operators.js +227 -193
  298. package/std/packing.d.ts +5 -11
  299. package/std/packing.js +67 -75
  300. package/std/range.d.ts +6 -11
  301. package/std/range.js +48 -36
  302. package/std/subgroup.d.ts +33 -37
  303. package/std/subgroup.js +180 -217
  304. package/std/texture.d.ts +70 -38
  305. package/std/texture.js +176 -172
  306. package/taskQueue.d.ts +6 -0
  307. package/taskQueue.js +30 -0
  308. package/tgpu.d.ts +16 -0
  309. package/tgpu.js +17 -44
  310. package/tgpuBindGroupLayout.d.ts +132 -152
  311. package/tgpuBindGroupLayout.js +346 -268
  312. package/tgpuLogger.d.ts +34 -0
  313. package/tgpuLogger.js +63 -0
  314. package/tgpuUnstable.d.ts +16 -22
  315. package/tgpuUnstable.js +13 -35
  316. package/tgsl/accessIndex.d.ts +2 -0
  317. package/tgsl/accessIndex.js +76 -33
  318. package/tgsl/accessProp.d.ts +2 -0
  319. package/tgsl/accessProp.js +142 -100
  320. package/tgsl/accessStructProp.d.ts +5 -0
  321. package/tgsl/accessStructProp.js +18 -0
  322. package/tgsl/consoleLog/deserializers.d.ts +13 -0
  323. package/tgsl/consoleLog/deserializers.js +119 -103
  324. package/tgsl/consoleLog/logGenerator.d.ts +21 -0
  325. package/tgsl/consoleLog/logGenerator.js +85 -80
  326. package/tgsl/consoleLog/serializers.d.ts +21 -0
  327. package/tgsl/consoleLog/serializers.js +119 -100
  328. package/tgsl/consoleLog/types.d.ts +40 -39
  329. package/tgsl/consoleLog/types.js +1 -0
  330. package/tgsl/conversion.d.ts +33 -0
  331. package/tgsl/conversion.js +272 -193
  332. package/tgsl/forOfUtils.d.ts +15 -0
  333. package/tgsl/forOfUtils.js +85 -70
  334. package/tgsl/generationHelpers.d.ts +22 -39
  335. package/tgsl/generationHelpers.js +85 -58
  336. package/tgsl/infixDispatch.d.ts +70 -0
  337. package/tgsl/infixDispatch.js +48 -46
  338. package/tgsl/jsPolyfills.d.ts +16 -19
  339. package/tgsl/jsPolyfills.js +44 -42
  340. package/tgsl/makeDereferenceable.d.ts +48 -0
  341. package/tgsl/makeDereferenceable.js +86 -0
  342. package/tgsl/makeResolvable.d.ts +22 -0
  343. package/tgsl/makeResolvable.js +33 -0
  344. package/tgsl/shaderGenerator.d.ts +77 -17
  345. package/tgsl/shaderGenerator.js +1 -0
  346. package/tgsl/shellless.d.ts +6 -9
  347. package/tgsl/shellless.js +73 -43
  348. package/tgsl/wgslGenerator.d.ts +66 -59
  349. package/tgsl/wgslGenerator.js +1344 -747
  350. package/types.d.ts +287 -221
  351. package/types.js +61 -44
  352. package/unwrapper.d.ts +31 -26
  353. package/unwrapper.js +1 -0
  354. package/wgslExtensions.d.ts +3 -5
  355. package/wgslExtensions.js +12 -16
  356. package/_virtual/rolldown_runtime.js +0 -13
  357. package/core/buffer/bufferShorthand.d.ts +0 -50
  358. package/core/buffer/bufferShorthand.js +0 -55
  359. package/core/pipeline/applyPipelineState.js +0 -37
  360. package/package.js +0 -5
  361. package/tgsl/shaderGenerator_members.d.ts +0 -33
  362. package/tgsl/shaderGenerator_members.js +0 -12
@@ -1,205 +1,207 @@
1
- //#region src/core/function/extractArgs.ts
1
+ import { blankSpaces, lineBreaks } from "../whitespaces.js";
2
2
  /**
3
- * Extracts info about arguments of a given WGSL function string.
4
- * @example
5
- * const code = `
6
- * fn add(a: i32, @location(0) b: i32, c) -> i32 {
7
- * return a + b + c;
8
- * }`;
9
- *
10
- * extractArgs(code);
11
- * // {
12
- * // args: [
13
- * // { identifier: 'a', attributes: [], type: 'i32' },
14
- * // { identifier: 'b', attributes: ['@location(0)'], type: 'i32' },
15
- * // { identifier: 'c', attributes: [], type: undefined }
16
- * // ],
17
- * // ret: { type: 'i32', attributes: [] },
18
- * // range: { begin: 11, end: 51 }
19
- * // }
20
- */
21
- function extractArgs(rawCode) {
22
- const { strippedCode, argRange: range } = strip(rawCode);
23
- const code = new ParsableString(strippedCode);
24
- code.consume("(");
25
- const args = [];
26
- while (!code.isAt(")")) {
27
- const attributes = [];
28
- while (code.isAt("@")) {
29
- code.parseUntil(closingParenthesis, parentheses);
30
- code.consume(")");
31
- attributes.push(code.lastParsed);
32
- }
33
- code.parseUntil(identifierEndSymbols);
34
- const identifier = code.lastParsed;
35
- let maybeType;
36
- if (code.isAt(":")) {
37
- code.consume(":");
38
- code.parseUntil(typeEndSymbols, angleBrackets);
39
- maybeType = code.lastParsed;
40
- }
41
- args.push({
42
- identifier,
43
- attributes,
44
- type: maybeType
45
- });
46
- if (code.isAt(",")) code.consume(",");
47
- }
48
- code.consume(")");
49
- let maybeRet;
50
- if (code.isAt("->")) {
51
- code.consume("->");
52
- const attributes = [];
53
- while (code.isAt("@")) {
54
- code.parseUntil(closingParenthesis, parentheses);
55
- code.consume(")");
56
- attributes.push(code.lastParsed);
57
- }
58
- maybeRet = {
59
- type: code.str.slice(code.pos),
60
- attributes
61
- };
62
- }
63
- return {
64
- args,
65
- ret: maybeRet,
66
- range: {
67
- begin: range[0],
68
- end: range[1]
69
- }
70
- };
3
+ * Extracts info about arguments of a given WGSL function string.
4
+ * @example
5
+ * const code = `
6
+ * fn add(a: i32, @location(0) b: i32, c) -> i32 {
7
+ * return a + b + c;
8
+ * }`;
9
+ *
10
+ * extractArgs(code);
11
+ * // {
12
+ * // args: [
13
+ * // { identifier: 'a', attributes: [], type: 'i32' },
14
+ * // { identifier: 'b', attributes: ['@location(0)'], type: 'i32' },
15
+ * // { identifier: 'c', attributes: [], type: undefined }
16
+ * // ],
17
+ * // ret: { type: 'i32', attributes: [] },
18
+ * // range: { begin: 11, end: 51 }
19
+ * // }
20
+ */
21
+ export function extractArgs(rawCode) {
22
+ const { strippedCode, argRange: range } = strip(rawCode);
23
+ const code = new ParsableString(strippedCode);
24
+ code.consume('(');
25
+ const args = [];
26
+ while (!code.isAt(')')) {
27
+ // In each loop iteration, process all the attributes, the identifier and the potential type of a single argument.
28
+ const attributes = [];
29
+ while (code.isAt('@')) {
30
+ code.parseUntil(closingParenthesis, parentheses);
31
+ code.consume(')');
32
+ attributes.push(code.lastParsed);
33
+ }
34
+ code.parseUntil(identifierEndSymbols);
35
+ const identifier = code.lastParsed;
36
+ let maybeType;
37
+ if (code.isAt(':')) {
38
+ code.consume(':');
39
+ code.parseUntil(typeEndSymbols, angleBrackets);
40
+ maybeType = code.lastParsed;
41
+ }
42
+ args.push({
43
+ identifier,
44
+ attributes,
45
+ type: maybeType,
46
+ });
47
+ if (code.isAt(',')) {
48
+ code.consume(',');
49
+ }
50
+ }
51
+ code.consume(')');
52
+ let maybeRet;
53
+ if (code.isAt('->')) {
54
+ code.consume('->');
55
+ const attributes = [];
56
+ while (code.isAt('@')) {
57
+ code.parseUntil(closingParenthesis, parentheses);
58
+ code.consume(')');
59
+ attributes.push(code.lastParsed);
60
+ }
61
+ maybeRet = { type: code.str.slice(code.pos), attributes };
62
+ }
63
+ return {
64
+ args,
65
+ ret: maybeRet,
66
+ range: { begin: range[0], end: range[1] },
67
+ };
71
68
  }
72
69
  /**
73
- * Strips comments, whitespaces, the name and the body of the function.
74
- * @example
75
- * const code = `
76
- * fn add( a, // first argument
77
- * @location(0) b : i32 ) -> i32 {
78
- * return a + b; // returns the sum
79
- * }`;
80
- *
81
- * strip(code); // "(a,@location(0)b:i32)->i32"
82
- */
70
+ * Strips comments, whitespaces, the name and the body of the function.
71
+ * @example
72
+ * const code = `
73
+ * fn add( a, // first argument
74
+ * @location(0) b : i32 ) -> i32 {
75
+ * return a + b; // returns the sum
76
+ * }`;
77
+ *
78
+ * strip(code); // "(a,@location(0)b:i32)->i32"
79
+ */
83
80
  function strip(rawCode) {
84
- const code = new ParsableString(rawCode);
85
- let strippedCode = "";
86
- let argsStart;
87
- while (!code.isFinished()) {
88
- if (code.isAt(blankSpaces)) {
89
- code.advanceBy(1);
90
- continue;
91
- }
92
- if (code.isAt("//")) {
93
- code.consume("//");
94
- code.parseUntil(lineBreaks);
95
- code.advanceBy(1);
96
- continue;
97
- }
98
- if (code.isAt("/*")) {
99
- code.parseUntil(openingCommentBlock, commentBlocks);
100
- code.consume("*/");
101
- continue;
102
- }
103
- if (code.isAt("{")) return {
104
- strippedCode,
105
- argRange: [argsStart, code.pos]
106
- };
107
- if (code.isAt("(") && argsStart === void 0) argsStart = code.pos;
108
- if (argsStart !== void 0) strippedCode += code.str[code.pos];
109
- code.advanceBy(1);
110
- }
111
- throw new Error("Invalid wgsl code!");
81
+ const code = new ParsableString(rawCode);
82
+ let strippedCode = '';
83
+ let argsStart;
84
+ while (!code.isFinished()) {
85
+ // parse character by character while ignoring comments and blankspaces until you find a `{`.
86
+ // skip any blankspace
87
+ if (code.isAt(blankSpaces)) {
88
+ code.advanceBy(1); // the blankspace character
89
+ continue;
90
+ }
91
+ // skip line comments
92
+ if (code.isAt('//')) {
93
+ code.consume('//');
94
+ code.parseUntil(lineBreaks);
95
+ code.advanceBy(1); // the line break
96
+ continue;
97
+ }
98
+ // skip block comments
99
+ if (code.isAt('/*')) {
100
+ code.parseUntil(openingCommentBlock, commentBlocks);
101
+ code.consume('*/');
102
+ continue;
103
+ }
104
+ if (code.isAt('{')) {
105
+ return {
106
+ strippedCode,
107
+ argRange: [argsStart, code.pos],
108
+ };
109
+ }
110
+ if (code.isAt('(') && argsStart === undefined) {
111
+ argsStart = code.pos;
112
+ }
113
+ if (argsStart !== undefined) {
114
+ strippedCode += code.str[code.pos];
115
+ }
116
+ code.advanceBy(1); // parsed character
117
+ }
118
+ throw new Error('Invalid wgsl code!');
112
119
  }
113
- var ParsableString = class {
114
- str;
115
- #parseStartPos;
116
- #pos;
117
- constructor(str) {
118
- this.str = str;
119
- this.#pos = 0;
120
- }
121
- get pos() {
122
- return this.#pos;
123
- }
124
- /**
125
- * This property is equivalent to the substring of `this.str`
126
- * from the position of the last `parseUntil` call, to the current position.
127
- */
128
- get lastParsed() {
129
- if (this.#parseStartPos === void 0) throw new Error("Parse was not called yet!");
130
- return this.str.slice(this.#parseStartPos, this.pos);
131
- }
132
- isFinished() {
133
- return this.#pos >= this.str.length;
134
- }
135
- isAt(substr) {
136
- if (typeof substr === "string") {
137
- for (let i = 0; i < substr.length; i++) if (this.str[this.#pos + i] !== substr[i]) return false;
138
- return true;
139
- }
140
- for (const elem of substr) if (this.isAt(elem)) return true;
141
- return false;
142
- }
143
- /**
144
- * @param toFind a set of strings either of which satisfy the search.
145
- * @param brackets a pair of brackets that has to be closed for result to be valid. This includes the found character(s).
146
- * @example
147
- * // internal state:
148
- * // '(@attribute(0) identifier: type)'
149
- * // ^
150
- * this.parse(new Set(')'), ['(', ')']);
151
- * // internal state:
152
- * // '(@attribute(0) identifier: type)'
153
- * // ^
154
- */
155
- parseUntil(toFind, brackets) {
156
- this.#parseStartPos = this.#pos;
157
- let openedBrackets = 0;
158
- while (this.#pos < this.str.length) {
159
- if (brackets && this.isAt(brackets[0])) openedBrackets += 1;
160
- if (brackets && this.isAt(brackets[1])) openedBrackets -= 1;
161
- if (openedBrackets === 0) {
162
- if (this.isAt(toFind)) return this.#pos;
163
- }
164
- this.#pos += 1;
165
- }
166
- throw new Error("Reached the end of the string without finding a match!");
167
- }
168
- advanceBy(steps) {
169
- this.#pos += steps;
170
- }
171
- consume(str) {
172
- if (!this.isAt(str)) throw new Error(`Expected '${str}' at position ${this.#pos}, but found '${this.str.slice(this.#pos, this.#pos + str.length)}'`);
173
- this.advanceBy(str.length);
174
- }
175
- };
176
- const lineBreaks = new Set([
177
- "\n",
178
- "\v",
179
- "\f",
180
- "\r",
181
- "…",
182
- "\u2028",
183
- "\u2029"
184
- ]);
185
- const blankSpaces = new Set([
186
- ...lineBreaks,
187
- " ",
188
- " ",
189
- "‎",
190
- "‏"
191
- ]);
192
- const closingParenthesis = new Set([")"]);
193
- const identifierEndSymbols = new Set([
194
- ":",
195
- ",",
196
- ")"
197
- ]);
198
- const typeEndSymbols = new Set([",", ")"]);
199
- const openingCommentBlock = new Set(["*/"]);
200
- const parentheses = ["(", ")"];
201
- const angleBrackets = ["<", ">"];
202
- const commentBlocks = ["/*", "*/"];
203
-
204
- //#endregion
205
- export { extractArgs };
120
+ class ParsableString {
121
+ str;
122
+ #parseStartPos;
123
+ #pos;
124
+ constructor(str) {
125
+ this.str = str;
126
+ this.#pos = 0;
127
+ }
128
+ get pos() {
129
+ return this.#pos;
130
+ }
131
+ /**
132
+ * This property is equivalent to the substring of `this.str`
133
+ * from the position of the last `parseUntil` call, to the current position.
134
+ */
135
+ get lastParsed() {
136
+ if (this.#parseStartPos === undefined) {
137
+ throw new Error('Parse was not called yet!');
138
+ }
139
+ return this.str.slice(this.#parseStartPos, this.pos);
140
+ }
141
+ isFinished() {
142
+ return this.#pos >= this.str.length;
143
+ }
144
+ isAt(substr) {
145
+ if (typeof substr === 'string') {
146
+ for (let i = 0; i < substr.length; i++) {
147
+ if (this.str[this.#pos + i] !== substr[i]) {
148
+ return false;
149
+ }
150
+ }
151
+ return true;
152
+ }
153
+ for (const elem of substr) {
154
+ if (this.isAt(elem)) {
155
+ return true;
156
+ }
157
+ }
158
+ return false;
159
+ }
160
+ /**
161
+ * @param toFind a set of strings either of which satisfy the search.
162
+ * @param brackets a pair of brackets that has to be closed for result to be valid. This includes the found character(s).
163
+ * @example
164
+ * // internal state:
165
+ * // '(@attribute(0) identifier: type)'
166
+ * // ^
167
+ * this.parse(new Set(')'), ['(', ')']);
168
+ * // internal state:
169
+ * // '(@attribute(0) identifier: type)'
170
+ * // ^
171
+ */
172
+ parseUntil(toFind, brackets) {
173
+ this.#parseStartPos = this.#pos;
174
+ let openedBrackets = 0;
175
+ while (this.#pos < this.str.length) {
176
+ if (brackets && this.isAt(brackets[0])) {
177
+ openedBrackets += 1;
178
+ }
179
+ if (brackets && this.isAt(brackets[1])) {
180
+ openedBrackets -= 1;
181
+ }
182
+ if (openedBrackets === 0) {
183
+ if (this.isAt(toFind)) {
184
+ return this.#pos;
185
+ }
186
+ }
187
+ this.#pos += 1;
188
+ }
189
+ throw new Error('Reached the end of the string without finding a match!');
190
+ }
191
+ advanceBy(steps) {
192
+ this.#pos += steps;
193
+ }
194
+ consume(str) {
195
+ if (!this.isAt(str)) {
196
+ throw new Error(`Expected '${str}' at position ${this.#pos}, but found '${this.str.slice(this.#pos, this.#pos + str.length)}'`);
197
+ }
198
+ this.advanceBy(str.length);
199
+ }
200
+ }
201
+ const closingParenthesis = new Set([')']);
202
+ const identifierEndSymbols = new Set([':', ',', ')']);
203
+ const typeEndSymbols = new Set([',', ')']);
204
+ const openingCommentBlock = new Set(['*/']);
205
+ const parentheses = ['(', ')'];
206
+ const angleBrackets = ['<', '>'];
207
+ const commentBlocks = ['/*', '*/'];
@@ -0,0 +1,44 @@
1
+ import { type ResolvedSnippet } from '../../data/snippet.ts';
2
+ import { type BaseData } from '../../data/wgslTypes.ts';
3
+ import type { ResolutionCtx, ShaderStage } from '../../types.ts';
4
+ import { type ExternalMap } from '../resolve/externals.ts';
5
+ import type { Implementation, SeparatedEntryArgs } from './fnTypes.ts';
6
+ export type FnExternals = {
7
+ /**
8
+ * Externals provided by calling `$uses()`.
9
+ */
10
+ userProvided?: ExternalMap;
11
+ /**
12
+ * Externals provided by unplugin-typegpu via function metadata.
13
+ */
14
+ pluginProvided?: ExternalMap;
15
+ /**
16
+ * Function arguments, for example `{ S: Schema }` in `tgpu.fn([Schema])('(arg: S) => {}')`,
17
+ * or { in: { position: 'position' } } in `fragmentFn({ in: { position: d.builtin.position }, out: d.vec4f, })('...')`
18
+ */
19
+ args?: ExternalMap;
20
+ /**
21
+ * Function return type, for example `{ Out: ... }` in both rawWgsl entrypoint functions and `vertexFnShell(in, Out)`.
22
+ */
23
+ out?: ExternalMap;
24
+ };
25
+ export interface FnCore {
26
+ setExternals: (key: keyof FnExternals, newExternal: ExternalMap) => void;
27
+ resolve(ctx: ResolutionCtx,
28
+ /**
29
+ * The argument types can be AutoStruct if they're determined based on usage
30
+ * (like in auto-entry functions).
31
+ */
32
+ argTypes: BaseData[],
33
+ /**
34
+ * The return type of the function. If undefined, the type should be inferred
35
+ * from the implementation (relevant for shellless functions).
36
+ */
37
+ returnType: BaseData | undefined,
38
+ /**
39
+ * For entry functions: positional args and optional data struct.
40
+ * When provided, takes precedence over `argTypes` for WGSL header generation.
41
+ */
42
+ entryInput?: SeparatedEntryArgs): ResolvedSnippet;
43
+ }
44
+ export declare function createFnCore(implementation: Implementation, functionType: 'normal' | ShaderStage, workgroupSize?: number[]): FnCore;