typegpu 0.11.8 → 0.12.0

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