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
@@ -0,0 +1,15 @@
1
+ import { type TgpuResourceSoul, type TransferableResourceType } from './restore.ts';
2
+ import type { RestoreContext } from './types.ts';
3
+ export type { TgpuResourceSoul, TransferableResourceType };
4
+ /** What travels between runtimes: a plain copy of a TypeGPU resource's soul */
5
+ export type TgpuResourceSnapshot = TgpuResourceSoul;
6
+ /** Whether the value is something {@link snapshotResource} can carry across a device boundary */
7
+ export declare function isTransferableResource(value: unknown): boolean;
8
+ /** Whether the value is a class-like TypeGPU object that {@link snapshotResource} cannot carry */
9
+ export declare function isNonTransferableResource(value: unknown): boolean;
10
+ /**
11
+ * Extracts what survives a device boundary: the resource's soul, completed by
12
+ * materialization for resources whose definition is a compiled object
13
+ */
14
+ export declare function snapshotResource(value: unknown): TgpuResourceSnapshot | undefined;
15
+ export declare function restoreResource(snapshot: TgpuResourceSnapshot, ctx: RestoreContext): unknown;
@@ -0,0 +1,106 @@
1
+ import { isData } from "../data/dataTypes.js";
2
+ import { setName } from "../shared/meta.js";
3
+ import { $internal, $soul, isMarkedInternal } from "../shared/symbols.js";
4
+ import { soulRestorers } from "./restore.js";
5
+ import { deserializeDataSchema, serializeDataSchema } from "./schema.js";
6
+ /**
7
+ * Every data schema is callable, and host serializers claim functions before
8
+ * they ever ask whether a value is transferable, so schemas held by a soul are
9
+ * replaced with a description of themselves on the way out
10
+ */
11
+ const DATA_SCHEMA_KEY = '~tgpuDataSchema';
12
+ function isPlainRecord(value) {
13
+ if (typeof value !== 'object' || value === null) {
14
+ return false;
15
+ }
16
+ const proto = Object.getPrototypeOf(value);
17
+ return proto === Object.prototype || proto === null;
18
+ }
19
+ /**
20
+ * Rebuilds containers only when something inside them changed, so raw handles
21
+ * are passed through untouched. `path` keeps self-referencing objects finite
22
+ */
23
+ function mapContainer(value, path, mapField) {
24
+ const isArray = Array.isArray(value);
25
+ if (!isArray && !isPlainRecord(value)) {
26
+ return value;
27
+ }
28
+ if (path.has(value)) {
29
+ return value;
30
+ }
31
+ path.add(value);
32
+ try {
33
+ if (isArray) {
34
+ const mapped = value.map((field) => mapField(field, path));
35
+ return mapped.some((field, idx) => field !== value[idx]) ? mapped : value;
36
+ }
37
+ const entries = Object.entries(value);
38
+ const mapped = entries.map(([key, field]) => [key, mapField(field, path)]);
39
+ return mapped.some(([, field], idx) => field !== entries[idx]?.[1])
40
+ ? Object.fromEntries(mapped)
41
+ : value;
42
+ }
43
+ finally {
44
+ path.delete(value);
45
+ }
46
+ }
47
+ function describeSchemas(value, path = new Set()) {
48
+ if (isData(value)) {
49
+ return { [DATA_SCHEMA_KEY]: serializeDataSchema(value) };
50
+ }
51
+ return mapContainer(value, path, describeSchemas);
52
+ }
53
+ function reviveSchemas(value, path = new Set()) {
54
+ if (isPlainRecord(value)) {
55
+ const described = value[DATA_SCHEMA_KEY];
56
+ if (described) {
57
+ return deserializeDataSchema(described);
58
+ }
59
+ }
60
+ return mapContainer(value, path, reviveSchemas);
61
+ }
62
+ function soulOf(value) {
63
+ const soul = value?.[$soul];
64
+ return soul && soul.type in soulRestorers ? soul : undefined;
65
+ }
66
+ /** Whether the value is something {@link snapshotResource} can carry across a device boundary */
67
+ export function isTransferableResource(value) {
68
+ return soulOf(value) !== undefined;
69
+ }
70
+ /** Whether the value is a class-like TypeGPU object that {@link snapshotResource} cannot carry */
71
+ export function isNonTransferableResource(value) {
72
+ return (typeof value === 'object' &&
73
+ value !== null &&
74
+ !Array.isArray(value) &&
75
+ !isData(value) &&
76
+ isMarkedInternal(value) &&
77
+ !isTransferableResource(value));
78
+ }
79
+ /**
80
+ * Extracts what survives a device boundary: the resource's soul, completed by
81
+ * materialization for resources whose definition is a compiled object
82
+ */
83
+ export function snapshotResource(value) {
84
+ const soul = soulOf(value);
85
+ if (!soul) {
86
+ return undefined;
87
+ }
88
+ value[$internal]?.materialize?.();
89
+ const nonTransferable = soul.nonTransferablePriors;
90
+ if (nonTransferable?.length) {
91
+ throw new Error(`TypeGPU '${soul.type}' cannot be transferred: ${nonTransferable.join(', ')} ${nonTransferable.length > 1 ? 'are' : 'is'} bound to this runtime. Apply them after the resource crosses the boundary.`);
92
+ }
93
+ return describeSchemas({ ...soul });
94
+ }
95
+ export function restoreResource(snapshot, ctx) {
96
+ const restore = soulRestorers[snapshot.type];
97
+ if (!restore) {
98
+ throw new Error(`TypeGPU resource '${snapshot.type}' has no restorer registered.`);
99
+ }
100
+ const resource = restore(reviveSchemas(snapshot), ctx);
101
+ // A root is restored by identity, it keeps the name the receiving runtime gave it
102
+ if (snapshot.label !== undefined && snapshot.type !== 'root') {
103
+ setName(resource, snapshot.label);
104
+ }
105
+ return resource;
106
+ }
@@ -0,0 +1,49 @@
1
+ import { type TgpuBuffer, type TgpuBufferSoul } from '../core/buffer/buffer.ts';
2
+ import type { BaseData } from '../data/wgslTypes.ts';
3
+ import { TgpuBufferBindingImpl, type TgpuBufferBindingSoul } from '../core/buffer/bufferBinding.ts';
4
+ import { type TgpuConstSoul } from '../core/constant/tgpuConstant.ts';
5
+ import { type TgpuComputePipelineSoul } from '../core/pipeline/computePipeline.ts';
6
+ import { type TgpuRenderPipelineSoul } from '../core/pipeline/renderPipeline.ts';
7
+ import type { TgpuQuerySetSoul } from '../core/querySet/querySet.ts';
8
+ import type { TgpuGuardedComputePipelineSoul, TgpuRootSoul } from '../core/root/rootTypes.ts';
9
+ import type { TgpuSamplerSoul } from '../core/sampler/sampler.ts';
10
+ import type { TgpuAccessorSoul, TgpuMutableAccessor, TgpuSlotSoul } from '../core/slot/slotTypes.ts';
11
+ import { type TgpuTextureSoul } from '../core/texture/texture.ts';
12
+ import { type TgpuVertexLayoutSoul } from '../core/vertexLayout/vertexLayout.ts';
13
+ import type { AnyData } from '../data/dataTypes.ts';
14
+ import { type AnyWgslData } from '../data/wgslTypes.ts';
15
+ import type { TextureProps } from '../core/texture/textureProps.ts';
16
+ import { type TgpuBindGroupLayoutSoul, type TgpuBindGroupSoul } from '../tgpuBindGroupLayout.ts';
17
+ import type { TgpuSoul } from '../shared/soul.ts';
18
+ import type { RestoreContext } from './types.ts';
19
+ /** Every soul that can cross a device boundary, discriminated by `type` */
20
+ export type TgpuResourceSoul = TgpuBufferSoul | TgpuBufferBindingSoul | TgpuTextureSoul | TgpuSamplerSoul | TgpuQuerySetSoul | TgpuBindGroupLayoutSoul | TgpuBindGroupSoul | TgpuVertexLayoutSoul | TgpuConstSoul | TgpuSlotSoul | TgpuAccessorSoul | TgpuComputePipelineSoul | TgpuRenderPipelineSoul | TgpuGuardedComputePipelineSoul | TgpuRootSoul;
21
+ type Restorer<TSoul extends TgpuSoul> = (soul: TSoul, ctx: RestoreContext) => unknown;
22
+ declare function restoreBufferBinding(soul: TgpuBufferBindingSoul): TgpuBufferBindingImpl<"uniform" | "mutable" | "readonly", BaseData>;
23
+ /**
24
+ * The one place a soul turns back into a resource. Importing this module opts
25
+ * into every restorer, so it is kept out of the resources themselves
26
+ */
27
+ export declare const soulRestorers: {
28
+ buffer: (soul: TgpuBufferSoul, ctx: RestoreContext) => TgpuBuffer<AnyData>;
29
+ uniform: typeof restoreBufferBinding;
30
+ mutable: typeof restoreBufferBinding;
31
+ readonly: typeof restoreBufferBinding;
32
+ texture: (soul: TgpuTextureSoul, ctx: RestoreContext) => import("../indexNamedExports.ts").TgpuTexture<TextureProps>;
33
+ sampler: (soul: TgpuSamplerSoul, ctx: RestoreContext) => import("../indexNamedExports.ts").TgpuFixedSampler;
34
+ 'sampler-comparison': (soul: TgpuSamplerSoul, ctx: RestoreContext) => import("../indexNamedExports.ts").TgpuFixedComparisonSampler;
35
+ 'query-set': (soul: TgpuQuerySetSoul, ctx: RestoreContext) => import("../indexNamedExports.ts").TgpuQuerySet<GPUQueryType>;
36
+ 'bind-group-layout': (soul: TgpuBindGroupLayoutSoul) => import("../tgpuBindGroupLayout.ts").TgpuBindGroupLayout<Record<string, import("../tgpuBindGroupLayout.ts").TgpuLayoutEntry | null>>;
37
+ 'bind-group': Restorer<TgpuBindGroupSoul>;
38
+ 'vertex-layout': (soul: TgpuVertexLayoutSoul) => import("../indexNamedExports.ts").TgpuVertexLayout<import("../data/wgslTypes.ts").WgslArray<AnyWgslData>> | import("../indexNamedExports.ts").TgpuVertexLayout<import("../data/dataTypes.ts").Disarray<AnyData>>;
39
+ const: (soul: TgpuConstSoul) => import("../indexNamedExports.ts").TgpuConst<AnyData>;
40
+ slot: (soul: TgpuSlotSoul) => import("../indexNamedExports.ts").TgpuSlot<unknown>;
41
+ accessor: (soul: TgpuAccessorSoul) => import("../indexNamedExports.ts").TgpuAccessor<AnyData>;
42
+ 'mutable-accessor': (soul: TgpuAccessorSoul) => TgpuMutableAccessor<AnyData>;
43
+ 'compute-pipeline': Restorer<TgpuComputePipelineSoul>;
44
+ 'render-pipeline': Restorer<TgpuRenderPipelineSoul>;
45
+ 'guarded-compute-pipeline': Restorer<TgpuGuardedComputePipelineSoul>;
46
+ root: Restorer<TgpuRootSoul>;
47
+ };
48
+ export type TransferableResourceType = TgpuResourceSoul['type'];
49
+ export {};
@@ -0,0 +1,68 @@
1
+ import { INTERNAL_applyBufferUsages, } from "../core/buffer/buffer.js";
2
+ import { TgpuBufferBindingImpl } from "../core/buffer/bufferBinding.js";
3
+ import { constant } from "../core/constant/tgpuConstant.js";
4
+ import { INTERNAL_restoreComputePipeline, } from "../core/pipeline/computePipeline.js";
5
+ import { INTERNAL_restoreRenderPipeline, } from "../core/pipeline/renderPipeline.js";
6
+ import { INTERNAL_restoreGuardedComputePipeline, INTERNAL_restoreRoot } from "../core/root/init.js";
7
+ import { accessor, mutableAccessor } from "../core/slot/accessor.js";
8
+ import { slot } from "../core/slot/slot.js";
9
+ import { INTERNAL_createTexture } from "../core/texture/texture.js";
10
+ import { vertexLayout } from "../core/vertexLayout/vertexLayout.js";
11
+ import { arrayOf } from "../data/array.js";
12
+ import { disarrayOf } from "../data/disarray.js";
13
+ import { isDisarray } from "../data/dataTypes.js";
14
+ import { isWgslArray } from "../data/wgslTypes.js";
15
+ import { INTERNAL_restoreBindGroup, INTERNAL_restoreBindGroupLayout, } from "../tgpuBindGroupLayout.js";
16
+ function restoreBufferBinding(soul) {
17
+ return new TgpuBufferBindingImpl(soul.type, soul.buffer);
18
+ }
19
+ /**
20
+ * The one place a soul turns back into a resource. Importing this module opts
21
+ * into every restorer, so it is kept out of the resources themselves
22
+ */
23
+ export const soulRestorers = {
24
+ buffer: (soul, ctx) => {
25
+ const buffer = ctx.getRoot(soul.device).createBuffer(soul.dataType, soul.raw);
26
+ INTERNAL_applyBufferUsages(buffer, soul.usages);
27
+ return buffer;
28
+ },
29
+ uniform: restoreBufferBinding,
30
+ mutable: restoreBufferBinding,
31
+ readonly: restoreBufferBinding,
32
+ texture: (soul, ctx) => {
33
+ const texture = INTERNAL_createTexture(soul.props, ctx.getRoot(soul.device), soul.raw);
34
+ if (soul.flagsOverridden) {
35
+ texture.$overrideFlags(soul.flags);
36
+ }
37
+ else if (soul.usages.length > 0) {
38
+ texture.$usage(...soul.usages);
39
+ }
40
+ return texture;
41
+ },
42
+ sampler: (soul, ctx) => ctx.getRoot(soul.device).createSampler(soul.props),
43
+ 'sampler-comparison': (soul, ctx) => ctx.getRoot(soul.device).createComparisonSampler(soul.props),
44
+ 'query-set': (soul, ctx) => ctx.getRoot(soul.device).createQuerySet(soul.queryType, soul.count, soul.raw),
45
+ 'bind-group-layout': (soul) => INTERNAL_restoreBindGroupLayout(soul),
46
+ 'bind-group': INTERNAL_restoreBindGroup,
47
+ 'vertex-layout': (soul) => {
48
+ const schema = soul.schema;
49
+ if (isWgslArray(schema)) {
50
+ const elementType = schema.elementType;
51
+ return vertexLayout((count) => arrayOf(elementType, count), soul.stepMode);
52
+ }
53
+ if (isDisarray(schema)) {
54
+ const elementType = schema.elementType;
55
+ return vertexLayout((count) => disarrayOf(elementType, count), soul.stepMode);
56
+ }
57
+ throw new Error('TypeGPU vertex layout payload could not be reconstructed.');
58
+ },
59
+ const: (soul) => constant(soul.dataType, soul.value),
60
+ slot: (soul) => slot(soul.defaultValue),
61
+ accessor: (soul) => accessor(soul.schema, soul.defaultValue),
62
+ 'mutable-accessor': (soul) => mutableAccessor(soul.schema, soul.defaultValue),
63
+ 'compute-pipeline': INTERNAL_restoreComputePipeline,
64
+ 'render-pipeline': INTERNAL_restoreRenderPipeline,
65
+ 'guarded-compute-pipeline': INTERNAL_restoreGuardedComputePipeline,
66
+ root: INTERNAL_restoreRoot,
67
+ // oxlint-disable-next-line typescript/no-explicit-any -- each restorer narrows its own soul
68
+ };
@@ -0,0 +1,58 @@
1
+ import * as d from '../data/index.ts';
2
+ type SerializedDataAttrib = {
3
+ type: 'align';
4
+ value: number;
5
+ } | {
6
+ type: 'size';
7
+ value: number;
8
+ } | {
9
+ type: 'location';
10
+ value: number;
11
+ } | {
12
+ type: 'interpolate';
13
+ value: string;
14
+ } | {
15
+ type: 'builtin';
16
+ value: string;
17
+ } | {
18
+ type: 'invariant';
19
+ };
20
+ export type SerializedDataSchema = {
21
+ type: 'd';
22
+ key: string;
23
+ } | {
24
+ type: 'array';
25
+ element: SerializedDataSchema;
26
+ count: number;
27
+ } | {
28
+ type: 'disarray';
29
+ element: SerializedDataSchema;
30
+ count: number;
31
+ } | {
32
+ type: 'struct';
33
+ props: [string, SerializedDataSchema][];
34
+ } | {
35
+ type: 'unstruct';
36
+ props: [string, SerializedDataSchema][];
37
+ } | {
38
+ type: 'atomic';
39
+ inner: SerializedDataSchema;
40
+ } | {
41
+ type: 'decorated';
42
+ inner: SerializedDataSchema;
43
+ attribs: SerializedDataAttrib[];
44
+ } | {
45
+ type: 'sampled-texture';
46
+ kind: d.WgslTexture['type'];
47
+ sampleType: SerializedDataSchema;
48
+ } | {
49
+ type: 'storage-texture';
50
+ kind: d.WgslStorageTexture['type'];
51
+ format: d.WgslStorageTexture['format'];
52
+ access: d.WgslStorageTexture['access'];
53
+ } | {
54
+ type: 'external-texture';
55
+ };
56
+ export declare function serializeDataSchema(schema: d.BaseData): SerializedDataSchema;
57
+ export declare function deserializeDataSchema(schema: SerializedDataSchema): d.AnyData;
58
+ export {};
@@ -0,0 +1,209 @@
1
+ import * as d from "../data/index.js";
2
+ import { isWgslStorageTexture, isWgslTexture } from "../data/texture.js";
3
+ import { assertExhaustive } from "../shared/utilityTypes.js";
4
+ // Maps schema singletons (e.g. `d.f32`) back to their `d` export names
5
+ let leafKeys;
6
+ function getDataSchemaKey(schema) {
7
+ if (!leafKeys) {
8
+ leafKeys = new Map();
9
+ for (const [key, value] of Object.entries(d)) {
10
+ if ((typeof value === 'object' || typeof value === 'function') && value !== null) {
11
+ leafKeys.set(value, key);
12
+ }
13
+ }
14
+ }
15
+ return leafKeys.get(schema);
16
+ }
17
+ let builtinsByName;
18
+ function getBuiltinByName(value) {
19
+ if (!builtinsByName) {
20
+ builtinsByName = new Map();
21
+ for (const candidate of Object.values(d.builtin)) {
22
+ if (!d.isDecorated(candidate) && !d.isLooseDecorated(candidate)) {
23
+ continue;
24
+ }
25
+ const builtin = candidate.attribs.find(d.isBuiltinAttrib);
26
+ if (builtin) {
27
+ builtinsByName.set(builtin.params[0], candidate);
28
+ }
29
+ }
30
+ }
31
+ const builtin = builtinsByName.get(value);
32
+ if (!builtin) {
33
+ throw new Error(`TypeGPU builtin '${value}' could not be reconstructed.`);
34
+ }
35
+ return builtin;
36
+ }
37
+ function serializeAttrib(attrib) {
38
+ if (d.isAlignAttrib(attrib)) {
39
+ return { type: 'align', value: attrib.params[0] };
40
+ }
41
+ if (d.isSizeAttrib(attrib)) {
42
+ return { type: 'size', value: attrib.params[0] };
43
+ }
44
+ if (d.isLocationAttrib(attrib)) {
45
+ return { type: 'location', value: attrib.params[0] };
46
+ }
47
+ if (d.isInterpolateAttrib(attrib)) {
48
+ return { type: 'interpolate', value: attrib.params[0] };
49
+ }
50
+ if (d.isBuiltinAttrib(attrib)) {
51
+ return { type: 'builtin', value: attrib.params[0] };
52
+ }
53
+ if (d.isInvariantAttrib(attrib)) {
54
+ return { type: 'invariant' };
55
+ }
56
+ throw new Error('This TypeGPU schema decorator cannot be serialized yet.');
57
+ }
58
+ function applyAttrib(schema, attrib) {
59
+ if (attrib.type === 'align') {
60
+ return d.align(attrib.value, schema);
61
+ }
62
+ if (attrib.type === 'size') {
63
+ return d.size(attrib.value, schema);
64
+ }
65
+ if (attrib.type === 'location') {
66
+ return d.location(attrib.value, schema);
67
+ }
68
+ if (attrib.type === 'interpolate') {
69
+ return d.interpolate(attrib.value, schema);
70
+ }
71
+ if (attrib.type === 'builtin') {
72
+ return getBuiltinByName(attrib.value);
73
+ }
74
+ if (attrib.type === 'invariant') {
75
+ return d.invariant(schema);
76
+ }
77
+ assertExhaustive(attrib, 'schema.ts#applyAttrib');
78
+ }
79
+ function serializeProps(propTypes) {
80
+ return Object.entries(propTypes).map(([prop, propType]) => [prop, serializeDataSchema(propType)]);
81
+ }
82
+ function deserializeProps(props) {
83
+ return Object.fromEntries(props.map(([prop, schema]) => [prop, deserializeDataSchema(schema)]));
84
+ }
85
+ const sampledTextureConstructors = {
86
+ texture_1d: (sampleType) => d.texture1d(sampleType),
87
+ texture_2d: (sampleType) => d.texture2d(sampleType),
88
+ texture_2d_array: (sampleType) => d.texture2dArray(sampleType),
89
+ texture_3d: (sampleType) => d.texture3d(sampleType),
90
+ texture_cube: (sampleType) => d.textureCube(sampleType),
91
+ texture_cube_array: (sampleType) => d.textureCubeArray(sampleType),
92
+ texture_multisampled_2d: (sampleType) => d.textureMultisampled2d(sampleType),
93
+ texture_depth_2d: () => d.textureDepth2d(),
94
+ texture_depth_2d_array: () => d.textureDepth2dArray(),
95
+ texture_depth_cube: () => d.textureDepthCube(),
96
+ texture_depth_cube_array: () => d.textureDepthCubeArray(),
97
+ texture_depth_multisampled_2d: () => d.textureDepthMultisampled2d(),
98
+ };
99
+ const storageTextureConstructors = {
100
+ texture_storage_1d: (format, access) => d.textureStorage1d(format, access),
101
+ texture_storage_2d: (format, access) => d.textureStorage2d(format, access),
102
+ texture_storage_2d_array: (format, access) => d.textureStorage2dArray(format, access),
103
+ texture_storage_3d: (format, access) => d.textureStorage3d(format, access),
104
+ };
105
+ export function serializeDataSchema(schema) {
106
+ const key = getDataSchemaKey(schema);
107
+ if (key) {
108
+ return { type: 'd', key };
109
+ }
110
+ if (isWgslTexture(schema)) {
111
+ return {
112
+ type: 'sampled-texture',
113
+ kind: schema.type,
114
+ sampleType: serializeDataSchema(schema.sampleType),
115
+ };
116
+ }
117
+ if (isWgslStorageTexture(schema)) {
118
+ return {
119
+ type: 'storage-texture',
120
+ kind: schema.type,
121
+ format: schema.format,
122
+ access: schema.access,
123
+ };
124
+ }
125
+ if (schema.type === 'texture_external') {
126
+ return { type: 'external-texture' };
127
+ }
128
+ if (d.isDecorated(schema) || d.isLooseDecorated(schema)) {
129
+ return {
130
+ type: 'decorated',
131
+ inner: serializeDataSchema(schema.inner),
132
+ attribs: schema.attribs.map(serializeAttrib),
133
+ };
134
+ }
135
+ if (d.isAtomic(schema)) {
136
+ return { type: 'atomic', inner: serializeDataSchema(schema.inner) };
137
+ }
138
+ if (d.isWgslArray(schema)) {
139
+ return {
140
+ type: 'array',
141
+ element: serializeDataSchema(schema.elementType),
142
+ count: schema.elementCount,
143
+ };
144
+ }
145
+ if (d.isDisarray(schema)) {
146
+ return {
147
+ type: 'disarray',
148
+ element: serializeDataSchema(schema.elementType),
149
+ count: schema.elementCount,
150
+ };
151
+ }
152
+ if (d.isWgslStruct(schema)) {
153
+ return { type: 'struct', props: serializeProps(schema.propTypes) };
154
+ }
155
+ if (d.isUnstruct(schema)) {
156
+ return { type: 'unstruct', props: serializeProps(schema.propTypes) };
157
+ }
158
+ throw new Error(`TypeGPU schema '${schema.type}' cannot be serialized yet.`);
159
+ }
160
+ export function deserializeDataSchema(schema) {
161
+ if (schema.type === 'd') {
162
+ const leaf = d[schema.key];
163
+ if (!leaf) {
164
+ throw new Error(`TypeGPU schema 'd.${schema.key}' could not be reconstructed.`);
165
+ }
166
+ return leaf;
167
+ }
168
+ if (schema.type === 'array') {
169
+ return d.arrayOf(deserializeDataSchema(schema.element), schema.count);
170
+ }
171
+ if (schema.type === 'disarray') {
172
+ return d.disarrayOf(deserializeDataSchema(schema.element), schema.count);
173
+ }
174
+ if (schema.type === 'struct') {
175
+ return d.struct(deserializeProps(schema.props));
176
+ }
177
+ if (schema.type === 'unstruct') {
178
+ return d.unstruct(deserializeProps(schema.props));
179
+ }
180
+ if (schema.type === 'atomic') {
181
+ return d.atomic(deserializeDataSchema(schema.inner));
182
+ }
183
+ if (schema.type === 'decorated') {
184
+ let result = deserializeDataSchema(schema.inner);
185
+ for (let i = schema.attribs.length - 1; i >= 0; i--) {
186
+ const attrib = schema.attribs[i];
187
+ result = applyAttrib(result, attrib);
188
+ }
189
+ return result;
190
+ }
191
+ if (schema.type === 'sampled-texture') {
192
+ const constructor = sampledTextureConstructors[schema.kind];
193
+ if (!constructor) {
194
+ throw new Error(`TypeGPU texture schema '${schema.kind}' could not be reconstructed.`);
195
+ }
196
+ return constructor(deserializeDataSchema(schema.sampleType));
197
+ }
198
+ if (schema.type === 'external-texture') {
199
+ return d.textureExternal();
200
+ }
201
+ if (schema.type === 'storage-texture') {
202
+ const constructor = storageTextureConstructors[schema.kind];
203
+ if (!constructor) {
204
+ throw new Error(`TypeGPU storage texture schema '${schema.kind}' could not be reconstructed.`);
205
+ }
206
+ return constructor(schema.format, schema.access);
207
+ }
208
+ throw new Error('TypeGPU schema payload could not be reconstructed.');
209
+ }
@@ -0,0 +1,5 @@
1
+ import type { TgpuRoot } from '../core/root/rootTypes.ts';
2
+ /** Lets restored resources resolve the root they belong to, identified by the shared `GPUDevice` */
3
+ export interface RestoreContext {
4
+ getRoot(device: GPUDevice): TgpuRoot;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This can be used to branch functionality between "dev" and "prod" modes, so that our
3
+ * library can omit doing unnecessary work once it's out in the wild
4
+ *
5
+ * Even though the value of this constant uses Node.js specific APIs, pretty much every
6
+ * bundler replaces the expression below with either `development` or `production`
7
+ */
8
+ export declare const DEV: boolean;
9
+ export declare const TEST: boolean;
package/shared/env.js CHANGED
@@ -1,13 +1,10 @@
1
- //#region src/shared/env.ts
1
+ /// <reference types="node" />
2
2
  /**
3
- * This can be used to branch functionality between "dev" and "prod" modes, so that our
4
- * library can omit doing unnecessary work once it's out in the wild
5
- *
6
- * Even though the value of this constant uses Node.js specific APIs, pretty much every
7
- * bundler replaces the expression below with either `development` or `production`
8
- */
9
- const DEV = process.env.NODE_ENV === "development";
10
- const TEST = process.env.NODE_ENV === "test";
11
-
12
- //#endregion
13
- export { DEV, TEST };
3
+ * This can be used to branch functionality between "dev" and "prod" modes, so that our
4
+ * library can omit doing unnecessary work once it's out in the wild
5
+ *
6
+ * Even though the value of this constant uses Node.js specific APIs, pretty much every
7
+ * bundler replaces the expression below with either `development` or `production`
8
+ */
9
+ export const DEV = process.env.NODE_ENV === 'development';
10
+ export const TEST = process.env.NODE_ENV === 'test';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Yields values in the sequence 0,1,2..∞ except for the ones in the `excluded` set.
3
+ */
4
+ export declare function naturalsExcept(excluded: Set<number>): Generator<number, number, unknown>;
@@ -1,14 +1,12 @@
1
- //#region src/shared/generators.ts
2
1
  /**
3
- * Yields values in the sequence 0,1,2..∞ except for the ones in the `excluded` set.
4
- */
5
- function* naturalsExcept(excluded) {
6
- let next = 0;
7
- while (true) {
8
- if (!excluded.has(next)) yield next;
9
- next++;
10
- }
2
+ * Yields values in the sequence 0,1,2..∞ except for the ones in the `excluded` set.
3
+ */
4
+ export function* naturalsExcept(excluded) {
5
+ let next = 0;
6
+ while (true) {
7
+ if (!excluded.has(next)) {
8
+ yield next;
9
+ }
10
+ next++;
11
+ }
11
12
  }
12
-
13
- //#endregion
14
- export { naturalsExcept };
package/shared/meta.d.ts CHANGED
@@ -1,7 +1,4 @@
1
- import { RawMetadata } from "./normalizeMetadata.js";
2
-
3
- //#region src/shared/meta.d.ts
4
-
1
+ import { type Metadata, type RawMetadata } from './normalizeMetadata.ts';
5
2
  /**
6
3
  * Don't use or you WILL get fired from your job.
7
4
  *
@@ -11,20 +8,38 @@ import { RawMetadata } from "./normalizeMetadata.js";
11
8
  *
12
9
  * @internal
13
10
  */
14
- type INTERNAL_GlobalExt = typeof globalThis & {
15
- __TYPEGPU_VERSION__?: string;
16
- __TYPEGPU_META__?: WeakMap<object, RawMetadata>;
17
- __TYPEGPU_AUTONAME__?: <T>(exp: T, label: string) => T;
18
- __TYPEGPU_MEASURE_PERF__?: boolean | undefined;
19
- __TYPEGPU_PERF_RECORDS__?: Map<string, unknown[]>;
11
+ export type INTERNAL_GlobalExt = typeof globalThis & {
12
+ __TYPEGPU_VERSION__?: string;
13
+ __TYPEGPU_META__?: WeakMap<object, RawMetadata>;
14
+ __TYPEGPU_AUTONAME__?: <T>(exp: T, label: string) => T;
15
+ __TYPEGPU_MEASURE_PERF__?: boolean | undefined;
16
+ __TYPEGPU_PERF_RECORDS__?: Map<string, unknown[]>;
20
17
  };
21
18
  /**
22
19
  * Can be assigned a name. Not to be confused with just having a name.
23
20
  * The `$name` function should use `setName` to rename the object itself,
24
21
  * even if `$getNameForward` symbol is present.
25
22
  */
26
- interface TgpuNamable {
27
- $name(label: string): this;
23
+ export interface TgpuNamable {
24
+ $name(label: string): this;
28
25
  }
29
- //#endregion
30
- export { INTERNAL_GlobalExt, TgpuNamable };
26
+ export declare function isNamable(value: unknown): value is TgpuNamable;
27
+ export declare function getName(definition: unknown): string | undefined;
28
+ export declare function setName(definition: object, name: string): void;
29
+ /**
30
+ * Retrieves normalized (non-raw) function metadata.
31
+ * If `globalExt.__TYPEGPU_META__` contains raw metadata for the function,
32
+ * it is normalized, and then deleted to avoid unnecessary re-normalization.
33
+ */
34
+ export declare function getFunctionMetadata(definition: object): Metadata | undefined;
35
+ /**
36
+ * AST's are given to functions with a 'use gpu' directive, which this function checks for.
37
+ */
38
+ export declare function hasTinyestMetadata(value: unknown): value is (...args: never[]) => unknown;
39
+ /**
40
+ * Performance measurements are only enabled in dev & test environments for now
41
+ */
42
+ export declare const PERF: {
43
+ readonly enabled: boolean;
44
+ record(name: string, data: unknown): void;
45
+ } | undefined;