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
package/data/partialIO.js CHANGED
@@ -1,120 +1,131 @@
1
- import { isWgslArray, isWgslStruct } from "./wgslTypes.js";
2
- import { isDisarray, isUnstruct } from "./dataTypes.js";
3
- import { alignmentOf } from "./alignmentOf.js";
1
+ import { BufferWriter, getSystemEndianness } from 'typed-binary';
4
2
  import { roundUp } from "../mathUtils.js";
5
- import { sizeOf } from "./sizeOf.js";
6
- import { offsetsForProps } from "./offsets.js";
3
+ import { alignmentOf } from "./alignmentOf.js";
7
4
  import { getCompiledWriter } from "./compiledIO.js";
8
5
  import { writeData } from "./dataIO.js";
9
- import { BufferWriter, getSystemEndianness } from "typed-binary";
10
-
11
- //#region src/data/partialIO.ts
6
+ import { isDisarray, isUnstruct } from "./dataTypes.js";
7
+ import { offsetsForProps } from "./offsets.js";
8
+ import { sizeOf } from "./sizeOf.js";
9
+ import { isWgslArray, isWgslStruct } from "./wgslTypes.js";
12
10
  /**
13
- * Converts `{idx, value}[]` sparse arrays into `Record<number, T>` format.
14
- */
15
- function convertPartialToPatch(schema, data) {
16
- if (data === void 0 || data === null) return data;
17
- if (isWgslStruct(schema) || isUnstruct(schema)) {
18
- const result = {};
19
- const record = data;
20
- for (const key of Object.keys(schema.propTypes)) {
21
- const subSchema = schema.propTypes[key];
22
- const value = record[key];
23
- if (value !== void 0 && subSchema) result[key] = convertPartialToPatch(subSchema, value);
24
- }
25
- return result;
26
- }
27
- if (isWgslArray(schema) || isDisarray(schema)) {
28
- const arrSchema = schema;
29
- const result = {};
30
- for (const { idx, value } of data) result[idx] = convertPartialToPatch(arrSchema.elementType, value);
31
- return result;
32
- }
33
- return data;
11
+ * Converts `{idx, value}[]` sparse arrays into `Record<number, T>` format.
12
+ */
13
+ export function convertPartialToPatch(schema, data) {
14
+ if (data === undefined || data === null) {
15
+ return data;
16
+ }
17
+ if (isWgslStruct(schema) || isUnstruct(schema)) {
18
+ const result = {};
19
+ const record = data;
20
+ for (const key of Object.keys(schema.propTypes)) {
21
+ const subSchema = schema.propTypes[key];
22
+ const value = record[key];
23
+ if (value !== undefined && subSchema) {
24
+ result[key] = convertPartialToPatch(subSchema, value);
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ if (isWgslArray(schema) || isDisarray(schema)) {
30
+ const arrSchema = schema;
31
+ const result = {};
32
+ for (const { idx, value } of data) {
33
+ result[idx] = convertPartialToPatch(arrSchema.elementType, value);
34
+ }
35
+ return result;
36
+ }
37
+ return data;
34
38
  }
35
- const isLittleEndian = getSystemEndianness() === "little";
36
- function getPatchInstructions(schema, data, targetBuffer) {
37
- const totalSize = sizeOf(schema);
38
- if (totalSize === 0 || data === void 0 || data === null) return [];
39
- const buf = targetBuffer ?? new ArrayBuffer(totalSize);
40
- const writer = new BufferWriter(buf);
41
- const compiledView = new DataView(buf);
42
- const segments = [];
43
- function collect(node, value, offset, padding) {
44
- if (value === void 0 || value === null) return;
45
- if (isWgslStruct(node) || isUnstruct(node)) {
46
- const propOffsets = offsetsForProps(node);
47
- for (const [key, propOffset] of Object.entries(propOffsets)) {
48
- const childValue = value[key];
49
- const subSchema = node.propTypes[key];
50
- if (childValue !== void 0 && subSchema) collect(subSchema, childValue, offset + propOffset.offset, propOffset.padding ?? padding);
51
- }
52
- return;
53
- }
54
- if (isWgslArray(node) || isDisarray(node)) {
55
- const arrSchema = node;
56
- const elementSize = roundUp(sizeOf(arrSchema.elementType), alignmentOf(arrSchema.elementType));
57
- const elementPadding = elementSize - sizeOf(arrSchema.elementType);
58
- if (ArrayBuffer.isView(value)) {
59
- const copyLen = Math.min(value.byteLength, arrSchema.elementCount * elementSize);
60
- new Uint8Array(buf, offset, copyLen).set(new Uint8Array(value.buffer, value.byteOffset, copyLen));
61
- segments.push({
62
- start: offset,
63
- end: offset + copyLen,
64
- padding
65
- });
66
- return;
67
- }
68
- if (Array.isArray(value)) {
69
- for (let i = 0; i < Math.min(arrSchema.elementCount, value.length); i++) collect(arrSchema.elementType, value[i], offset + i * elementSize, elementPadding);
70
- return;
71
- }
72
- const sparse = value;
73
- for (const key of Object.keys(sparse)) {
74
- const idx = Number(key);
75
- if (!Number.isNaN(idx)) collect(arrSchema.elementType, sparse[key], offset + idx * elementSize, elementPadding);
76
- }
77
- return;
78
- }
79
- const leafSize = sizeOf(node);
80
- const compiledWriter = getCompiledWriter(node);
81
- if (compiledWriter) compiledWriter(compiledView, offset, value, isLittleEndian, offset + leafSize);
82
- else {
83
- writer.seekTo(offset);
84
- writeData(writer, node, value);
85
- }
86
- segments.push({
87
- start: offset,
88
- end: offset + leafSize,
89
- padding
90
- });
91
- }
92
- collect(schema, data, 0);
93
- const instructions = [];
94
- let run = null;
95
- for (const seg of segments) if (run && seg.start === run.end + (run.padding ?? 0)) run = {
96
- start: run.start,
97
- end: seg.end,
98
- padding: seg.padding
99
- };
100
- else {
101
- if (run) instructions.push({
102
- gpuOffset: run.start,
103
- data: new Uint8Array(buf, run.start, run.end - run.start).slice()
104
- });
105
- run = seg;
106
- }
107
- if (run) instructions.push({
108
- gpuOffset: run.start,
109
- data: new Uint8Array(buf, run.start, run.end - run.start).slice()
110
- });
111
- return instructions;
39
+ const isLittleEndian = getSystemEndianness() === 'little';
40
+ export function getPatchInstructions(schema, data, targetBuffer) {
41
+ const totalSize = sizeOf(schema);
42
+ if (totalSize === 0 || data === undefined || data === null) {
43
+ return [];
44
+ }
45
+ const buf = targetBuffer ?? new ArrayBuffer(totalSize);
46
+ const writer = new BufferWriter(buf);
47
+ const compiledView = new DataView(buf);
48
+ const segments = [];
49
+ function collect(node, value, offset, padding) {
50
+ if (value === undefined || value === null) {
51
+ return;
52
+ }
53
+ if (isWgslStruct(node) || isUnstruct(node)) {
54
+ const propOffsets = offsetsForProps(node);
55
+ for (const [key, propOffset] of Object.entries(propOffsets)) {
56
+ const childValue = value[key];
57
+ const subSchema = node.propTypes[key];
58
+ if (childValue !== undefined && subSchema) {
59
+ collect(subSchema, childValue, offset + propOffset.offset, propOffset.padding ?? padding);
60
+ }
61
+ }
62
+ return;
63
+ }
64
+ if (isWgslArray(node) || isDisarray(node)) {
65
+ const arrSchema = node;
66
+ const elementSize = roundUp(sizeOf(arrSchema.elementType), alignmentOf(arrSchema.elementType));
67
+ const elementPadding = elementSize - sizeOf(arrSchema.elementType);
68
+ if (ArrayBuffer.isView(value)) {
69
+ const copyLen = Math.min(value.byteLength, arrSchema.elementCount * elementSize);
70
+ new Uint8Array(buf, offset, copyLen).set(new Uint8Array(value.buffer, value.byteOffset, copyLen));
71
+ segments.push({ start: offset, end: offset + copyLen, padding });
72
+ return;
73
+ }
74
+ if (Array.isArray(value)) {
75
+ for (let i = 0; i < Math.min(arrSchema.elementCount, value.length); i++) {
76
+ collect(arrSchema.elementType, value[i], offset + i * elementSize, elementPadding);
77
+ }
78
+ return;
79
+ }
80
+ const sparse = value;
81
+ for (const key of Object.keys(sparse)) {
82
+ const idx = Number(key);
83
+ if (!Number.isNaN(idx)) {
84
+ collect(arrSchema.elementType, sparse[key], offset + idx * elementSize, elementPadding);
85
+ }
86
+ }
87
+ return;
88
+ }
89
+ const leafSize = sizeOf(node);
90
+ const compiledWriter = getCompiledWriter(node);
91
+ if (compiledWriter) {
92
+ compiledWriter(compiledView, offset, value, isLittleEndian, offset + leafSize);
93
+ }
94
+ else {
95
+ writer.seekTo(offset);
96
+ writeData(writer, node, value);
97
+ }
98
+ segments.push({ start: offset, end: offset + leafSize, padding });
99
+ }
100
+ collect(schema, data, 0);
101
+ const instructions = [];
102
+ let run = null;
103
+ for (const seg of segments) {
104
+ if (run && seg.start === run.end + (run.padding ?? 0)) {
105
+ run = { start: run.start, end: seg.end, padding: seg.padding };
106
+ }
107
+ else {
108
+ if (run) {
109
+ instructions.push({
110
+ gpuOffset: run.start,
111
+ data: new Uint8Array(buf, run.start, run.end - run.start).slice(),
112
+ });
113
+ }
114
+ run = seg;
115
+ }
116
+ }
117
+ if (run) {
118
+ instructions.push({
119
+ gpuOffset: run.start,
120
+ data: new Uint8Array(buf, run.start, run.end - run.start).slice(),
121
+ });
122
+ }
123
+ return instructions;
112
124
  }
113
- function patchArrayBuffer(buffer, schema, data) {
114
- const instructions = getPatchInstructions(schema, data, buffer);
115
- const mappedView = new Uint8Array(buffer);
116
- for (const { data: data$1, gpuOffset } of instructions) mappedView.set(data$1, gpuOffset);
125
+ export function patchArrayBuffer(buffer, schema, data) {
126
+ const instructions = getPatchInstructions(schema, data, buffer);
127
+ const mappedView = new Uint8Array(buffer);
128
+ for (const { data, gpuOffset } of instructions) {
129
+ mappedView.set(data, gpuOffset);
130
+ }
117
131
  }
118
-
119
- //#endregion
120
- export { convertPartialToPatch, getPatchInstructions, patchArrayBuffer };
package/data/ptr.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import "./snippet.js";
2
- import { Ptr, StorableData } from "./wgslTypes.js";
3
-
4
- //#region src/data/ptr.d.ts
5
- declare function ptrFn<T extends StorableData>(inner: T): Ptr<'function', T, 'read-write'>;
6
- declare function ptrPrivate<T extends StorableData>(inner: T): Ptr<'private', T, 'read-write'>;
7
- declare function ptrWorkgroup<T extends StorableData>(inner: T): Ptr<'workgroup', T, 'read-write'>;
8
- declare function ptrStorage<T extends StorableData, TAccess extends 'read' | 'read-write' = 'read'>(inner: T, access?: TAccess): Ptr<'storage', T, TAccess>;
9
- declare function ptrUniform<T extends StorableData>(inner: T): Ptr<'uniform', T, 'read'>;
10
- declare function ptrHandle<T extends StorableData>(inner: T): Ptr<'handle', T, 'read'>;
11
- //#endregion
12
- export { ptrFn, ptrHandle, ptrPrivate, ptrStorage, ptrUniform, ptrWorkgroup };
1
+ import { type Origin } from './snippet.ts';
2
+ import type { Access, AddressSpace, BaseData, Ptr, StorableData } from './wgslTypes.ts';
3
+ export declare function ptrFn<T extends StorableData>(inner: T): Ptr<'function', T, 'read-write'>;
4
+ export declare function ptrPrivate<T extends StorableData>(inner: T): Ptr<'private', T, 'read-write'>;
5
+ export declare function ptrWorkgroup<T extends StorableData>(inner: T): Ptr<'workgroup', T, 'read-write'>;
6
+ export declare function ptrStorage<T extends StorableData, TAccess extends 'read' | 'read-write' = 'read'>(inner: T, access?: TAccess): Ptr<'storage', T, TAccess>;
7
+ export declare function ptrUniform<T extends StorableData>(inner: T): Ptr<'uniform', T, 'read'>;
8
+ export declare function ptrHandle<T extends StorableData>(inner: T): Ptr<'handle', T, 'read'>;
9
+ export declare function INTERNAL_createPtr<TAddressSpace extends AddressSpace, TInner extends BaseData, TAccess extends Access>(addressSpace: TAddressSpace, inner: TInner, access: TAccess, implicit?: boolean): Ptr<TAddressSpace, TInner, TAccess>;
10
+ export declare function createPtrFromOrigin(origin: Origin, innerDataType: StorableData): Ptr | undefined;
11
+ export declare function implicitFrom(ptr: Ptr): Ptr;
12
+ export declare function explicitFrom(ptr: Ptr): Ptr;
package/data/ptr.js CHANGED
@@ -1,46 +1,44 @@
1
1
  import { $internal } from "../shared/symbols.js";
2
2
  import { originToPtrParams } from "./snippet.js";
3
-
4
- //#region src/data/ptr.ts
5
- function ptrFn(inner) {
6
- return INTERNAL_createPtr("function", inner, "read-write");
7
- }
8
- function ptrPrivate(inner) {
9
- return INTERNAL_createPtr("private", inner, "read-write");
10
- }
11
- function ptrWorkgroup(inner) {
12
- return INTERNAL_createPtr("workgroup", inner, "read-write");
13
- }
14
- function ptrStorage(inner, access = "read") {
15
- return INTERNAL_createPtr("storage", inner, access);
16
- }
17
- function ptrUniform(inner) {
18
- return INTERNAL_createPtr("uniform", inner, "read");
19
- }
20
- function ptrHandle(inner) {
21
- return INTERNAL_createPtr("handle", inner, "read");
22
- }
23
- function INTERNAL_createPtr(addressSpace, inner, access, implicit = false) {
24
- return {
25
- [$internal]: {},
26
- type: "ptr",
27
- addressSpace,
28
- inner,
29
- access,
30
- implicit,
31
- toString: () => `ptr<${addressSpace}, ${inner}, ${access}>`
32
- };
33
- }
34
- function createPtrFromOrigin(origin, innerDataType) {
35
- const ptrParams = originToPtrParams[origin];
36
- if (ptrParams) return INTERNAL_createPtr(ptrParams.space, innerDataType, ptrParams.access);
37
- }
38
- function implicitFrom(ptr) {
39
- return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, true);
40
- }
41
- function explicitFrom(ptr) {
42
- return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, false);
43
- }
44
-
45
- //#endregion
46
- export { createPtrFromOrigin, explicitFrom, implicitFrom, ptrFn, ptrHandle, ptrPrivate, ptrStorage, ptrUniform, ptrWorkgroup };
3
+ export function ptrFn(inner) {
4
+ return INTERNAL_createPtr('function', inner, 'read-write');
5
+ }
6
+ export function ptrPrivate(inner) {
7
+ return INTERNAL_createPtr('private', inner, 'read-write');
8
+ }
9
+ export function ptrWorkgroup(inner) {
10
+ return INTERNAL_createPtr('workgroup', inner, 'read-write');
11
+ }
12
+ export function ptrStorage(inner, access = 'read') {
13
+ return INTERNAL_createPtr('storage', inner, access);
14
+ }
15
+ export function ptrUniform(inner) {
16
+ return INTERNAL_createPtr('uniform', inner, 'read');
17
+ }
18
+ export function ptrHandle(inner) {
19
+ return INTERNAL_createPtr('handle', inner, 'read');
20
+ }
21
+ export function INTERNAL_createPtr(addressSpace, inner, access, implicit = false) {
22
+ return {
23
+ [$internal]: {},
24
+ type: 'ptr',
25
+ addressSpace,
26
+ inner,
27
+ access,
28
+ implicit,
29
+ toString: () => `ptr<${addressSpace}, ${inner}, ${access}>`,
30
+ };
31
+ }
32
+ export function createPtrFromOrigin(origin, innerDataType) {
33
+ const ptrParams = originToPtrParams[origin];
34
+ if (ptrParams) {
35
+ return INTERNAL_createPtr(ptrParams.space, innerDataType, ptrParams.access);
36
+ }
37
+ return undefined;
38
+ }
39
+ export function implicitFrom(ptr) {
40
+ return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, /* implicit */ true);
41
+ }
42
+ export function explicitFrom(ptr) {
43
+ return INTERNAL_createPtr(ptr.addressSpace, ptr.inner, ptr.access, /* implicit */ false);
44
+ }
package/data/ref.d.ts CHANGED
@@ -1,26 +1,24 @@
1
- import { $internal } from "../shared/symbols.js";
2
- import "./snippet.js";
3
- import { DualFn } from "../types.js";
4
- import "./wgslTypes.js";
5
-
6
- //#region src/data/ref.d.ts
1
+ import { $internal, $ownSnippet, $resolve } from '../shared/symbols.ts';
2
+ import type { DualFn, SelfResolvable } from '../types.ts';
3
+ import { type ResolvedSnippet, type Snippet } from './snippet.ts';
4
+ import { type Ptr } from './wgslTypes.ts';
7
5
  interface ref<T> {
8
- readonly [$internal]: {
9
- type: 'ref';
10
- };
11
- /**
12
- * Derefences the reference, and gives access to the underlying value.
13
- *
14
- * @example ```ts
15
- * const boid = Boid({ pos: d.vec3f(3, 2, 1) });
16
- * const posRef = d.ref(boid.pos);
17
- *
18
- * // Actually updates `boid.pos`
19
- * posRef.$ = d.vec3f(1, 2, 3);
20
- * console.log(boid.pos); // Output: vec3f(1, 2, 3)
21
- * ```
22
- */
23
- $: T;
6
+ readonly [$internal]: {
7
+ type: 'ref';
8
+ };
9
+ /**
10
+ * Derefences the reference, and gives access to the underlying value.
11
+ *
12
+ * @example ```ts
13
+ * const boid = Boid({ pos: d.vec3f(3, 2, 1) });
14
+ * const posRef = d.ref(boid.pos);
15
+ *
16
+ * // Actually updates `boid.pos`
17
+ * posRef.$ = d.vec3f(1, 2, 3);
18
+ * console.log(boid.pos); // Output: vec3f(1, 2, 3)
19
+ * ```
20
+ */
21
+ $: T;
24
22
  }
25
23
  /**
26
24
  * A reference to a value `T`. Can be passed to other functions to give them
@@ -28,10 +26,25 @@ interface ref<T> {
28
26
  *
29
27
  * Conceptually, it represents a WGSL pointer.
30
28
  */
31
- type _ref<T> = T extends object ? T & ref<T> : ref<T>;
29
+ export type _ref<T> = T extends object ? T & ref<T> : ref<T>;
32
30
  type RefFn = DualFn<(<T>(value: T) => _ref<T>)> & {
33
- [$internal]: true;
31
+ [$internal]: true;
34
32
  };
35
- declare const _ref: RefFn;
36
- //#endregion
37
- export { _ref };
33
+ export declare const _ref: RefFn;
34
+ export declare function isRef<T>(value: unknown): value is ref<T>;
35
+ export declare function INTERNAL_createRef<T>(value: T): ref<T>;
36
+ /**
37
+ * The result of calling `d.ref(...)`. The code responsible for
38
+ * generating shader code can check if the value of a snippet is
39
+ * an instance of `RefOperator`, and act accordingly.
40
+ */
41
+ export declare class RefOperator implements SelfResolvable {
42
+ #private;
43
+ readonly [$internal]: true;
44
+ readonly snippet: Snippet;
45
+ constructor(snippet: Snippet, ptrType: Ptr | undefined);
46
+ get [$ownSnippet](): Snippet;
47
+ [$resolve](): ResolvedSnippet;
48
+ }
49
+ export declare function derefSnippet(snippet: Snippet): Snippet;
50
+ export {};