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,72 +1,71 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $internal } from "../../shared/symbols.js";
3
- import { Prettify } from "../../shared/utilityTypes.js";
4
- import { AnyFragmentInputBuiltin, AnyFragmentOutputBuiltin, OmitBuiltins } from "../../builtin.js";
5
- import { InstanceToSchema } from "../../data/instanceToSchema.js";
6
- import { BaseIOData, IOLayout, IORecord, InferIO } from "./fnTypes.js";
7
- import { AnyAutoCustoms, AutoFragmentIn, AutoFragmentOut } from "./autoIO.js";
8
- import { IOLayoutToSchema } from "./ioSchema.js";
9
- import { BaseData, Decorated, Interpolate, Location, Vec4f, Vec4i, Vec4u, WgslStruct } from "../../data/wgslTypes.js";
10
- import { UndecorateRecord } from "../../data/dataTypes.js";
11
-
12
- //#region src/core/function/tgpuFragmentFn.d.ts
13
- type FragmentInConstrained = IORecord<BaseIOData | Decorated<BaseIOData, (Location | Interpolate)[]> | AnyFragmentInputBuiltin>;
14
- type VertexOutToVarying<T> = OmitBuiltins<{ [K in keyof T]: InstanceToSchema<T[K]> }>;
1
+ import type { AnyFragmentInputBuiltin, AnyFragmentOutputBuiltin, OmitBuiltins } from '../../builtin.ts';
2
+ import type { UndecorateRecord } from '../../data/dataTypes.ts';
3
+ import type { InstanceToSchema } from '../../data/instanceToSchema.ts';
4
+ import type { BaseData, Decorated, Interpolate, Location, Vec4f, Vec4i, Vec4u, WgslStruct } from '../../data/wgslTypes.ts';
5
+ import { type TgpuNamable } from '../../shared/meta.ts';
6
+ import { $internal } from '../../shared/symbols.ts';
7
+ import type { Prettify } from '../../shared/utilityTypes.ts';
8
+ import type { AnyAutoCustoms, AutoFragmentIn, AutoFragmentOut } from './autoIO.ts';
9
+ import type { BaseIOData, InferIO, IOLayout, IORecord } from './fnTypes.ts';
10
+ import { type IOLayoutToSchema } from './ioSchema.ts';
11
+ export type FragmentInConstrained = IORecord<BaseIOData | Decorated<BaseIOData, (Location | Interpolate)[]> | AnyFragmentInputBuiltin>;
12
+ export type VertexOutToVarying<T> = OmitBuiltins<{
13
+ [K in keyof T]: InstanceToSchema<T[K]>;
14
+ }>;
15
15
  type FragmentColorValue = Vec4f | Vec4i | Vec4u;
16
- type FragmentOutConstrained = IOLayout<FragmentColorValue | Decorated<FragmentColorValue, (Location | Interpolate)[]> | AnyFragmentOutputBuiltin>;
16
+ export type FragmentOutConstrained = IOLayout<FragmentColorValue | Decorated<FragmentColorValue, (Location | Interpolate)[]> | AnyFragmentOutputBuiltin>;
17
17
  /**
18
18
  * Describes a fragment entry function signature (its arguments, return type and targets)
19
19
  */
20
20
  type TgpuFragmentFnShellHeader<FragmentIn extends TgpuFragmentFn.In = TgpuFragmentFn.In, FragmentOut extends TgpuFragmentFn.Out = TgpuFragmentFn.Out> = {
21
- readonly in: FragmentIn | undefined;
22
- readonly out: FragmentOut;
23
- readonly returnType: IOLayoutToSchema<FragmentOut>;
24
- readonly entryPoint: 'fragment';
21
+ readonly in: FragmentIn | undefined;
22
+ readonly out: FragmentOut;
23
+ readonly returnType: IOLayoutToSchema<FragmentOut>;
24
+ readonly entryPoint: 'fragment';
25
25
  };
26
26
  type CleanIO<T> = T extends Record<string, BaseData> ? Prettify<UndecorateRecord<OmitBuiltins<T>>> : Prettify<UndecorateRecord<OmitBuiltins<{
27
- a: T;
27
+ a: T;
28
28
  }>>> extends {
29
- a: infer Result;
29
+ a: infer Result;
30
30
  } ? Result : Record<string, never>;
31
31
  /**
32
32
  * Describes a fragment entry function signature (its arguments, return type and targets).
33
33
  * Allows creating tgpu fragment functions by calling this shell
34
34
  * and passing the implementation (as WGSL string or JS function) as the argument.
35
35
  */
36
- interface TgpuFragmentFnShell<out TIn extends TgpuFragmentFn.In = TgpuFragmentFn.In, out TOut extends TgpuFragmentFn.Out = TgpuFragmentFn.Out> extends TgpuFragmentFnShellHeader<TIn, TOut> {
37
- /**
38
- * Creates a type-safe implementation of this signature
39
- */
40
- (implementation: (input: InferIO<TIn>, out: TOut extends IORecord ? WgslStruct<TOut> : TOut) => InferIO<TOut>): TgpuFragmentFn<CleanIO<TIn>, CleanIO<TOut>>;
41
- /**
42
- * @param implementation
43
- * Raw WGSL function implementation with header and body
44
- * without `fn` keyword and function name
45
- * e.g. `"(x: f32) -> f32 { return x; }"`;
46
- */
47
- (implementation: string): TgpuFragmentFn<CleanIO<TIn>, CleanIO<TOut>>;
48
- (strings: TemplateStringsArray, ...values: unknown[]): TgpuFragmentFn<CleanIO<TIn>, CleanIO<TOut>>;
36
+ export interface TgpuFragmentFnShell<out TIn extends TgpuFragmentFn.In = TgpuFragmentFn.In, out TOut extends TgpuFragmentFn.Out = TgpuFragmentFn.Out> extends TgpuFragmentFnShellHeader<TIn, TOut> {
37
+ /**
38
+ * Creates a type-safe implementation of this signature
39
+ */
40
+ (implementation: (input: InferIO<TIn>, out: TOut extends IORecord ? WgslStruct<TOut> : TOut) => InferIO<TOut>): TgpuFragmentFn<CleanIO<TIn>, CleanIO<TOut>>;
41
+ /**
42
+ * @param implementation
43
+ * Raw WGSL function implementation with header and body
44
+ * without `fn` keyword and function name
45
+ * e.g. `"(x: f32) -> f32 { return x; }"`;
46
+ */
47
+ (implementation: string): TgpuFragmentFn<CleanIO<TIn>, CleanIO<TOut>>;
48
+ (strings: TemplateStringsArray, ...values: unknown[]): TgpuFragmentFn<CleanIO<TIn>, CleanIO<TOut>>;
49
49
  }
50
- interface TgpuFragmentFn<in Varying extends TgpuFragmentFn.In = Record<string, never>, out Output extends TgpuFragmentFn.Out = TgpuFragmentFn.Out> extends TgpuNamable {
51
- readonly [$internal]: true;
52
- readonly shell: TgpuFragmentFnShellHeader<Varying, Output>;
53
- readonly outputType: IOLayoutToSchema<Output>;
54
- $uses(dependencyMap: Record<string, unknown>): this;
50
+ export interface TgpuFragmentFn<in Varying extends TgpuFragmentFn.In = Record<string, never>, out Output extends TgpuFragmentFn.Out = TgpuFragmentFn.Out> extends TgpuNamable {
51
+ readonly [$internal]: true;
52
+ readonly shell: TgpuFragmentFnShellHeader<Varying, Output>;
53
+ readonly outputType: IOLayoutToSchema<Output>;
54
+ $uses(dependencyMap: Record<string, unknown>): this;
55
55
  }
56
- declare namespace TgpuFragmentFn {
57
- type In = Record<string, BaseData>;
58
- type Out = Record<string, BaseData> | BaseData;
59
- type AutoIn<T extends AnyAutoCustoms> = AutoFragmentIn<T>;
60
- type AutoOut<T extends AnyAutoCustoms = AnyAutoCustoms> = AutoFragmentOut<T>;
61
- type AutoInEmpty = AutoFragmentIn<Record<string, never>>;
56
+ export declare namespace TgpuFragmentFn {
57
+ type In = Record<string, BaseData>;
58
+ type Out = Record<string, BaseData> | BaseData;
59
+ type AutoIn<T extends AnyAutoCustoms> = AutoFragmentIn<T>;
60
+ type AutoOut<T extends AnyAutoCustoms = AnyAutoCustoms> = AutoFragmentOut<T>;
61
+ type AutoInEmpty = AutoFragmentIn<Record<string, never>>;
62
62
  }
63
- declare function fragmentFn<FragmentOut extends FragmentOutConstrained>(options: {
64
- out: FragmentOut;
63
+ export declare function fragmentFn<FragmentOut extends FragmentOutConstrained>(options: {
64
+ out: FragmentOut;
65
65
  }): TgpuFragmentFnShell<{}, FragmentOut>;
66
- declare function fragmentFn<FragmentIn extends FragmentInConstrained, FragmentOut extends FragmentOutConstrained>(options: {
67
- in: FragmentIn;
68
- out: FragmentOut;
66
+ export declare function fragmentFn<FragmentIn extends FragmentInConstrained, FragmentOut extends FragmentOutConstrained>(options: {
67
+ in: FragmentIn;
68
+ out: FragmentOut;
69
69
  }): TgpuFragmentFnShell<FragmentIn, FragmentOut>;
70
- declare function isTgpuFragmentFn<FragmentIn extends FragmentInConstrained, FragmentOut extends FragmentOutConstrained>(value: unknown): value is TgpuFragmentFn<FragmentIn, FragmentOut>;
71
- //#endregion
72
- export { FragmentInConstrained, FragmentOutConstrained, TgpuFragmentFn, TgpuFragmentFnShell, VertexOutToVarying, fragmentFn, isTgpuFragmentFn };
70
+ export declare function isTgpuFragmentFn<FragmentIn extends FragmentInConstrained, FragmentOut extends FragmentOutConstrained>(value: unknown): value is TgpuFragmentFn<FragmentIn, FragmentOut>;
71
+ export {};
@@ -1,65 +1,72 @@
1
- import { $getNameForward, $internal, $resolve } from "../../shared/symbols.js";
2
1
  import { getName, isNamable, setName } from "../../shared/meta.js";
3
- import { createIoSchema, separateBuiltins } from "./ioSchema.js";
2
+ import { $getNameForward, $internal, $resolve } from "../../shared/symbols.js";
4
3
  import { addReturnTypeToExternals } from "../resolve/externals.js";
4
+ import { shaderStageSlot } from "../slot/internalSlots.js";
5
5
  import { createFnCore } from "./fnCore.js";
6
+ import { createIoSchema, separateBuiltins } from "./ioSchema.js";
6
7
  import { stripTemplate } from "./templateUtils.js";
7
- import { shaderStageSlot } from "../slot/internalSlots.js";
8
-
9
- //#region src/core/function/tgpuFragmentFn.ts
10
8
  /**
11
- * Creates a shell of a typed entry function for the fragment shader stage. Any function
12
- * that implements this shell can run for each fragment (pixel), allowing the inner code
13
- * to process information received from the vertex shader stage and builtins to determine
14
- * the final color of the pixel (many pixels in case of multiple targets).
15
- *
16
- * @param options.in
17
- * Values computed in the vertex stage and builtins to be made available to functions that implement this shell.
18
- * @param options.out
19
- * A `vec4f`, signaling this function outputs a color for one target, or a record containing colors for multiple targets.
20
- */
21
- function fragmentFn(options) {
22
- const shell = {
23
- in: options.in,
24
- out: options.out,
25
- returnType: createIoSchema(options.out),
26
- entryPoint: "fragment"
27
- };
28
- const call = (arg, ...values) => createFragmentFn(shell, stripTemplate(arg, ...values));
29
- return Object.assign(call, shell);
9
+ * Creates a shell of a typed entry function for the fragment shader stage. Any function
10
+ * that implements this shell can run for each fragment (pixel), allowing the inner code
11
+ * to process information received from the vertex shader stage and builtins to determine
12
+ * the final color of the pixel (many pixels in case of multiple targets).
13
+ *
14
+ * @param options.in
15
+ * Values computed in the vertex stage and builtins to be made available to functions that implement this shell.
16
+ * @param options.out
17
+ * A `vec4f`, signaling this function outputs a color for one target, or a record containing colors for multiple targets.
18
+ */
19
+ export function fragmentFn(options) {
20
+ const shell = {
21
+ in: options.in,
22
+ out: options.out,
23
+ returnType: createIoSchema(options.out),
24
+ entryPoint: 'fragment',
25
+ };
26
+ const call = (arg, ...values) => createFragmentFn(shell, stripTemplate(arg, ...values));
27
+ return Object.assign(call, shell);
30
28
  }
31
- function isTgpuFragmentFn(value) {
32
- return value?.shell?.entryPoint === "fragment";
29
+ export function isTgpuFragmentFn(value) {
30
+ return value?.shell?.entryPoint === 'fragment';
33
31
  }
32
+ // --------------
33
+ // Implementation
34
+ // --------------
34
35
  function createFragmentFn(shell, implementation) {
35
- const core = createFnCore(implementation, "fragment");
36
- const outputType = shell.returnType;
37
- if (typeof implementation === "string") addReturnTypeToExternals(implementation, outputType, core);
38
- return {
39
- shell,
40
- outputType,
41
- $uses(newExternals) {
42
- core.setExternals("userProvided", newExternals);
43
- return this;
44
- },
45
- [$internal]: true,
46
- [$getNameForward]: core,
47
- $name(newLabel) {
48
- setName(this, newLabel);
49
- if (isNamable(outputType)) outputType.$name(`${newLabel}_Output`);
50
- return this;
51
- },
52
- [$resolve](ctx) {
53
- const entryInput = separateBuiltins(shell.in ?? {}, ctx.varyingLocations ?? {});
54
- if (entryInput.dataSchema && isNamable(entryInput.dataSchema)) entryInput.dataSchema.$name(`${getName(this) ?? ""}_Input`);
55
- if (typeof implementation === "string") core.setExternals("out", { Out: outputType });
56
- return ctx.withSlots([[shaderStageSlot, "fragment"]], () => core.resolve(ctx, [], shell.returnType, entryInput));
57
- },
58
- toString() {
59
- return `fragmentFn:${getName(core) ?? "<unnamed>"}`;
60
- }
61
- };
36
+ const core = createFnCore(implementation, 'fragment');
37
+ const outputType = shell.returnType;
38
+ if (typeof implementation === 'string') {
39
+ addReturnTypeToExternals(implementation, outputType, core);
40
+ }
41
+ const result = {
42
+ shell,
43
+ outputType,
44
+ $uses(newExternals) {
45
+ core.setExternals('userProvided', newExternals);
46
+ return this;
47
+ },
48
+ [$internal]: true,
49
+ [$getNameForward]: core,
50
+ $name(newLabel) {
51
+ setName(this, newLabel);
52
+ if (isNamable(outputType)) {
53
+ outputType.$name(`${newLabel}_Output`);
54
+ }
55
+ return this;
56
+ },
57
+ [$resolve](ctx) {
58
+ const entryInput = separateBuiltins(shell.in ?? {}, ctx.varyingLocations ?? {});
59
+ if (entryInput.dataSchema && isNamable(entryInput.dataSchema)) {
60
+ entryInput.dataSchema.$name(`${getName(this) ?? ''}_Input`);
61
+ }
62
+ if (typeof implementation === 'string') {
63
+ core.setExternals('out', { Out: outputType });
64
+ }
65
+ return ctx.withSlots([[shaderStageSlot, 'fragment']], () => core.resolve(ctx, [], shell.returnType, entryInput));
66
+ },
67
+ toString() {
68
+ return `fragmentFn:${getName(core) ?? '<unnamed>'}`;
69
+ },
70
+ };
71
+ return result;
62
72
  }
63
-
64
- //#endregion
65
- export { fragmentFn, isTgpuFragmentFn };
@@ -1,59 +1,56 @@
1
- import { TgpuNamable } from "../../shared/meta.js";
2
- import { $internal } from "../../shared/symbols.js";
3
- import { Prettify } from "../../shared/utilityTypes.js";
4
- import { AnyVertexInputBuiltin, AnyVertexOutputBuiltin, OmitBuiltins } from "../../builtin.js";
5
- import { BaseIOData, IORecord, InferIO } from "./fnTypes.js";
6
- import { AnyAutoCustoms, AutoVertexOut, _AutoVertexIn } from "./autoIO.js";
7
- import { IOLayoutToSchema } from "./ioSchema.js";
8
- import { BaseData, Decorated, Interpolate, Location } from "../../data/wgslTypes.js";
9
- import { UndecorateRecord } from "../../data/dataTypes.js";
10
-
11
- //#region src/core/function/tgpuVertexFn.d.ts
1
+ import type { AnyVertexInputBuiltin, AnyVertexOutputBuiltin, OmitBuiltins } from '../../builtin.ts';
2
+ import type { UndecorateRecord } from '../../data/dataTypes.ts';
3
+ import type { BaseData, Decorated, Interpolate, Location } from '../../data/wgslTypes.ts';
4
+ import { type TgpuNamable } from '../../shared/meta.ts';
5
+ import { $internal } from '../../shared/symbols.ts';
6
+ import type { Prettify } from '../../shared/utilityTypes.ts';
7
+ import type { _AutoVertexIn, AnyAutoCustoms, AutoVertexOut } from './autoIO.ts';
8
+ import type { BaseIOData, InferIO, IORecord } from './fnTypes.ts';
9
+ import { type IOLayoutToSchema } from './ioSchema.ts';
12
10
  type VertexInConstrained = IORecord<BaseIOData | Decorated<BaseIOData, Location[]> | AnyVertexInputBuiltin>;
13
11
  type VertexOutConstrained = IORecord<BaseIOData | Decorated<BaseIOData, (Location | Interpolate)[]> | AnyVertexOutputBuiltin>;
14
12
  /**
15
13
  * Describes a vertex entry function signature (its arguments, return type and attributes)
16
14
  */
17
15
  type TgpuVertexFnShellHeader<VertexIn extends TgpuVertexFn.In, VertexOut extends TgpuVertexFn.Out> = {
18
- readonly in: VertexIn | undefined;
19
- readonly out: VertexOut;
20
- readonly argTypes: [IOLayoutToSchema<VertexIn>] | [];
21
- readonly entryPoint: 'vertex';
16
+ readonly in: VertexIn | undefined;
17
+ readonly out: VertexOut;
18
+ readonly argTypes: [IOLayoutToSchema<VertexIn>] | [];
19
+ readonly entryPoint: 'vertex';
22
20
  };
23
21
  type CleanIO<T> = T extends Record<string, BaseData> ? Prettify<UndecorateRecord<OmitBuiltins<T>>> : Prettify<UndecorateRecord<OmitBuiltins<{
24
- a: T;
22
+ a: T;
25
23
  }>>> extends {
26
- a: infer Result;
24
+ a: infer Result;
27
25
  } ? Result : never;
28
26
  /**
29
27
  * Describes a vertex entry function signature (its arguments, return type and attributes).
30
28
  * Allows creating tgpu vertex functions by calling this shell
31
29
  * and passing the implementation (as WGSL string or JS function) as the argument.
32
30
  */
33
- interface TgpuVertexFnShell<out TIn extends TgpuVertexFn.In, out TOut extends TgpuVertexFn.Out> extends TgpuVertexFnShellHeader<TIn, TOut> {
34
- (implementation: (input: InferIO<TIn>, out: IOLayoutToSchema<TOut>) => InferIO<TOut>): TgpuVertexFn<CleanIO<TIn>, CleanIO<TOut>>;
35
- (implementation: string): TgpuVertexFn<CleanIO<TIn>, CleanIO<TOut>>;
36
- (strings: TemplateStringsArray, ...values: unknown[]): TgpuVertexFn<CleanIO<TIn>, CleanIO<TOut>>;
31
+ export interface TgpuVertexFnShell<out TIn extends TgpuVertexFn.In, out TOut extends TgpuVertexFn.Out> extends TgpuVertexFnShellHeader<TIn, TOut> {
32
+ (implementation: (input: InferIO<TIn>, out: IOLayoutToSchema<TOut>) => InferIO<TOut>): TgpuVertexFn<CleanIO<TIn>, CleanIO<TOut>>;
33
+ (implementation: string): TgpuVertexFn<CleanIO<TIn>, CleanIO<TOut>>;
34
+ (strings: TemplateStringsArray, ...values: unknown[]): TgpuVertexFn<CleanIO<TIn>, CleanIO<TOut>>;
37
35
  }
38
- interface TgpuVertexFn<in VertexIn extends TgpuVertexFn.In = Record<string, never>, out VertexOut extends TgpuVertexFn.Out = TgpuVertexFn.Out> extends TgpuNamable {
39
- readonly [$internal]: true;
40
- readonly shell: TgpuVertexFnShellHeader<VertexIn, VertexOut>;
41
- $uses(dependencyMap: Record<string, unknown>): this;
36
+ export interface TgpuVertexFn<in VertexIn extends TgpuVertexFn.In = Record<string, never>, out VertexOut extends TgpuVertexFn.Out = TgpuVertexFn.Out> extends TgpuNamable {
37
+ readonly [$internal]: true;
38
+ readonly shell: TgpuVertexFnShellHeader<VertexIn, VertexOut>;
39
+ $uses(dependencyMap: Record<string, unknown>): this;
42
40
  }
43
- declare namespace TgpuVertexFn {
44
- type In = BaseData | Record<string, BaseData>;
45
- type Out = Record<string, BaseData>;
46
- type AutoIn<T> = _AutoVertexIn<T>;
47
- type AutoOut<T extends AnyAutoCustoms = AnyAutoCustoms> = AutoVertexOut<T>;
48
- type AutoInEmpty = _AutoVertexIn<Record<string, never>>;
41
+ export declare namespace TgpuVertexFn {
42
+ type In = BaseData | Record<string, BaseData>;
43
+ type Out = Record<string, BaseData>;
44
+ type AutoIn<T> = _AutoVertexIn<T>;
45
+ type AutoOut<T extends AnyAutoCustoms = AnyAutoCustoms> = AutoVertexOut<T>;
46
+ type AutoInEmpty = _AutoVertexIn<Record<string, never>>;
49
47
  }
50
- declare function vertexFn<VertexOut extends VertexOutConstrained>(options: {
51
- out: VertexOut;
48
+ export declare function vertexFn<VertexOut extends VertexOutConstrained>(options: {
49
+ out: VertexOut;
52
50
  }): TgpuVertexFnShell<{}, VertexOut>;
53
- declare function vertexFn<VertexIn extends VertexInConstrained, VertexOut extends VertexOutConstrained>(options: {
54
- in: VertexIn;
55
- out: VertexOut;
51
+ export declare function vertexFn<VertexIn extends VertexInConstrained, VertexOut extends VertexOutConstrained>(options: {
52
+ in: VertexIn;
53
+ out: VertexOut;
56
54
  }): TgpuVertexFnShell<VertexIn, VertexOut>;
57
- declare function isTgpuVertexFn<VertexIn extends VertexInConstrained, VertexOut extends VertexOutConstrained>(value: unknown): value is TgpuVertexFn<VertexIn, VertexOut>;
58
- //#endregion
59
- export { TgpuVertexFn, TgpuVertexFnShell, isTgpuVertexFn, vertexFn };
55
+ export declare function isTgpuVertexFn<VertexIn extends VertexInConstrained, VertexOut extends VertexOutConstrained>(value: unknown): value is TgpuVertexFn<VertexIn, VertexOut>;
56
+ export {};
@@ -1,61 +1,64 @@
1
- import { $getNameForward, $internal, $resolve } from "../../shared/symbols.js";
2
1
  import { getName, setName } from "../../shared/meta.js";
3
- import { createIoSchema, separateAllAsPositional } from "./ioSchema.js";
2
+ import { $getNameForward, $internal, $resolve } from "../../shared/symbols.js";
3
+ import { shaderStageSlot } from "../slot/internalSlots.js";
4
4
  import { createFnCore } from "./fnCore.js";
5
+ import { createIoSchema, separateAllAsPositional } from "./ioSchema.js";
5
6
  import { stripTemplate } from "./templateUtils.js";
6
- import { shaderStageSlot } from "../slot/internalSlots.js";
7
-
8
- //#region src/core/function/tgpuVertexFn.ts
9
7
  /**
10
- * Creates a shell of a typed entry function for the vertex shader stage. Any function
11
- * that implements this shell can run for each vertex, allowing the inner code to process
12
- * attributes and determine the final position of the vertex.
13
- *
14
- * @param options.in
15
- * Vertex attributes and builtins to be made available to functions that implement this shell.
16
- * @param options.out
17
- * A record containing the final position of the vertex, and any information
18
- * passed onto the fragment shader stage.
19
- */
20
- function vertexFn(options) {
21
- if (Object.keys(options.out).length === 0) throw new Error(`A vertexFn output cannot be empty since it must include the 'position' builtin.`);
22
- const shell = {
23
- in: options.in,
24
- out: options.out,
25
- argTypes: options.in && Object.keys(options.in).length !== 0 ? [createIoSchema(options.in)] : [],
26
- entryPoint: "vertex"
27
- };
28
- const call = (arg, ...values) => createVertexFn(shell, stripTemplate(arg, ...values));
29
- return Object.assign(call, shell);
8
+ * Creates a shell of a typed entry function for the vertex shader stage. Any function
9
+ * that implements this shell can run for each vertex, allowing the inner code to process
10
+ * attributes and determine the final position of the vertex.
11
+ *
12
+ * @param options.in
13
+ * Vertex attributes and builtins to be made available to functions that implement this shell.
14
+ * @param options.out
15
+ * A record containing the final position of the vertex, and any information
16
+ * passed onto the fragment shader stage.
17
+ */
18
+ export function vertexFn(options) {
19
+ if (Object.keys(options.out).length === 0) {
20
+ throw new Error(`A vertexFn output cannot be empty since it must include the 'position' builtin.`);
21
+ }
22
+ const shell = {
23
+ in: options.in,
24
+ out: options.out,
25
+ argTypes: options.in && Object.keys(options.in).length !== 0 ? [createIoSchema(options.in)] : [],
26
+ entryPoint: 'vertex',
27
+ };
28
+ const call = (arg, ...values) => createVertexFn(shell, stripTemplate(arg, ...values));
29
+ return Object.assign(call, shell);
30
30
  }
31
- function isTgpuVertexFn(value) {
32
- return value?.shell?.entryPoint === "vertex";
31
+ export function isTgpuVertexFn(value) {
32
+ return value?.shell?.entryPoint === 'vertex';
33
33
  }
34
+ // --------------
35
+ // Implementation
36
+ // --------------
34
37
  function createVertexFn(shell, implementation) {
35
- const core = createFnCore(implementation, "vertex");
36
- const entryInput = separateAllAsPositional(shell.in ?? {});
37
- return {
38
- shell,
39
- $uses(newExternals) {
40
- core.setExternals("userProvided", newExternals);
41
- return this;
42
- },
43
- [$internal]: true,
44
- [$getNameForward]: core,
45
- $name(newLabel) {
46
- setName(this, newLabel);
47
- return this;
48
- },
49
- [$resolve](ctx) {
50
- const outputWithLocation = createIoSchema(shell.out, ctx.varyingLocations).$name(`${getName(this) ?? ""}_Output`);
51
- if (typeof implementation === "string") core.setExternals("out", { Out: outputWithLocation });
52
- return ctx.withSlots([[shaderStageSlot, "vertex"]], () => core.resolve(ctx, [], outputWithLocation, entryInput));
53
- },
54
- toString() {
55
- return `vertexFn:${getName(core) ?? "<unnamed>"}`;
56
- }
57
- };
38
+ const core = createFnCore(implementation, 'vertex');
39
+ const entryInput = separateAllAsPositional(shell.in ?? {});
40
+ const result = {
41
+ shell,
42
+ $uses(newExternals) {
43
+ core.setExternals('userProvided', newExternals);
44
+ return this;
45
+ },
46
+ [$internal]: true,
47
+ [$getNameForward]: core,
48
+ $name(newLabel) {
49
+ setName(this, newLabel);
50
+ return this;
51
+ },
52
+ [$resolve](ctx) {
53
+ const outputWithLocation = createIoSchema(shell.out, ctx.varyingLocations).$name(`${getName(this) ?? ''}_Output`);
54
+ if (typeof implementation === 'string') {
55
+ core.setExternals('out', { Out: outputWithLocation });
56
+ }
57
+ return ctx.withSlots([[shaderStageSlot, 'vertex']], () => core.resolve(ctx, [], outputWithLocation, entryInput));
58
+ },
59
+ toString() {
60
+ return `vertexFn:${getName(core) ?? '<unnamed>'}`;
61
+ },
62
+ };
63
+ return result;
58
64
  }
59
-
60
- //#endregion
61
- export { isTgpuVertexFn, vertexFn };