@asciiz/atoolkit 0.1.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 (343) hide show
  1. package/LICENSE +21 -0
  2. package/ReadMe.md +198 -0
  3. package/dist/acircuit/chip.d.ts +46 -0
  4. package/dist/acircuit/chip.d.ts.map +1 -0
  5. package/dist/acircuit/chip.js +104 -0
  6. package/dist/acircuit/chip.js.map +1 -0
  7. package/dist/acircuit/circuit.d.ts +86 -0
  8. package/dist/acircuit/circuit.d.ts.map +1 -0
  9. package/dist/acircuit/circuit.js +606 -0
  10. package/dist/acircuit/circuit.js.map +1 -0
  11. package/dist/acircuit/composite.d.ts +32 -0
  12. package/dist/acircuit/composite.d.ts.map +1 -0
  13. package/dist/acircuit/composite.js +88 -0
  14. package/dist/acircuit/composite.js.map +1 -0
  15. package/dist/acircuit/index.d.ts +7 -0
  16. package/dist/acircuit/index.d.ts.map +1 -0
  17. package/dist/acircuit/index.js +6 -0
  18. package/dist/acircuit/index.js.map +1 -0
  19. package/dist/acircuit/socket.d.ts +20 -0
  20. package/dist/acircuit/socket.d.ts.map +1 -0
  21. package/dist/acircuit/socket.js +23 -0
  22. package/dist/acircuit/socket.js.map +1 -0
  23. package/dist/acircuit/types.d.ts +94 -0
  24. package/dist/acircuit/types.d.ts.map +1 -0
  25. package/dist/acircuit/types.js +2 -0
  26. package/dist/acircuit/types.js.map +1 -0
  27. package/dist/acircuit/wire.d.ts +26 -0
  28. package/dist/acircuit/wire.d.ts.map +1 -0
  29. package/dist/acircuit/wire.js +23 -0
  30. package/dist/acircuit/wire.js.map +1 -0
  31. package/dist/adiag/bus.d.ts +65 -0
  32. package/dist/adiag/bus.d.ts.map +1 -0
  33. package/dist/adiag/bus.js +225 -0
  34. package/dist/adiag/bus.js.map +1 -0
  35. package/dist/adiag/index.d.ts +3 -0
  36. package/dist/adiag/index.d.ts.map +1 -0
  37. package/dist/adiag/index.js +2 -0
  38. package/dist/adiag/index.js.map +1 -0
  39. package/dist/aecs/ComponentSet.d.ts +33 -0
  40. package/dist/aecs/ComponentSet.d.ts.map +1 -0
  41. package/dist/aecs/ComponentSet.js +127 -0
  42. package/dist/aecs/ComponentSet.js.map +1 -0
  43. package/dist/aecs/Entity.d.ts +43 -0
  44. package/dist/aecs/Entity.d.ts.map +1 -0
  45. package/dist/aecs/Entity.js +82 -0
  46. package/dist/aecs/Entity.js.map +1 -0
  47. package/dist/aecs/FloatSet.d.ts +34 -0
  48. package/dist/aecs/FloatSet.d.ts.map +1 -0
  49. package/dist/aecs/FloatSet.js +147 -0
  50. package/dist/aecs/FloatSet.js.map +1 -0
  51. package/dist/aecs/Query.d.ts +90 -0
  52. package/dist/aecs/Query.d.ts.map +1 -0
  53. package/dist/aecs/Query.js +304 -0
  54. package/dist/aecs/Query.js.map +1 -0
  55. package/dist/aecs/index.d.ts +6 -0
  56. package/dist/aecs/index.d.ts.map +1 -0
  57. package/dist/aecs/index.js +6 -0
  58. package/dist/aecs/index.js.map +1 -0
  59. package/dist/aecs/join.d.ts +2 -0
  60. package/dist/aecs/join.d.ts.map +1 -0
  61. package/dist/aecs/join.js +2 -0
  62. package/dist/aecs/join.js.map +1 -0
  63. package/dist/alm/constants.d.ts +11 -0
  64. package/dist/alm/constants.d.ts.map +1 -0
  65. package/dist/alm/constants.js +17 -0
  66. package/dist/alm/constants.js.map +1 -0
  67. package/dist/alm/index.d.ts +9 -0
  68. package/dist/alm/index.d.ts.map +1 -0
  69. package/dist/alm/index.js +12 -0
  70. package/dist/alm/index.js.map +1 -0
  71. package/dist/alm/mat3.d.ts +63 -0
  72. package/dist/alm/mat3.d.ts.map +1 -0
  73. package/dist/alm/mat3.js +393 -0
  74. package/dist/alm/mat3.js.map +1 -0
  75. package/dist/alm/mat4.d.ts +157 -0
  76. package/dist/alm/mat4.d.ts.map +1 -0
  77. package/dist/alm/mat4.js +1448 -0
  78. package/dist/alm/mat4.js.map +1 -0
  79. package/dist/alm/quat.d.ts +89 -0
  80. package/dist/alm/quat.d.ts.map +1 -0
  81. package/dist/alm/quat.js +543 -0
  82. package/dist/alm/quat.js.map +1 -0
  83. package/dist/alm/spatial.d.ts +102 -0
  84. package/dist/alm/spatial.d.ts.map +1 -0
  85. package/dist/alm/spatial.js +389 -0
  86. package/dist/alm/spatial.js.map +1 -0
  87. package/dist/alm/vec2.d.ts +97 -0
  88. package/dist/alm/vec2.d.ts.map +1 -0
  89. package/dist/alm/vec2.js +369 -0
  90. package/dist/alm/vec2.js.map +1 -0
  91. package/dist/alm/vec3.d.ts +117 -0
  92. package/dist/alm/vec3.d.ts.map +1 -0
  93. package/dist/alm/vec3.js +547 -0
  94. package/dist/alm/vec3.js.map +1 -0
  95. package/dist/alm/vec4.d.ts +95 -0
  96. package/dist/alm/vec4.d.ts.map +1 -0
  97. package/dist/alm/vec4.js +452 -0
  98. package/dist/alm/vec4.js.map +1 -0
  99. package/dist/atempo/cadence.d.ts +58 -0
  100. package/dist/atempo/cadence.d.ts.map +1 -0
  101. package/dist/atempo/cadence.js +110 -0
  102. package/dist/atempo/cadence.js.map +1 -0
  103. package/dist/atempo/clip.d.ts +37 -0
  104. package/dist/atempo/clip.d.ts.map +1 -0
  105. package/dist/atempo/clip.js +92 -0
  106. package/dist/atempo/clip.js.map +1 -0
  107. package/dist/atempo/curve.d.ts +6 -0
  108. package/dist/atempo/curve.d.ts.map +1 -0
  109. package/dist/atempo/curve.js +2 -0
  110. package/dist/atempo/curve.js.map +1 -0
  111. package/dist/atempo/curves/bezier.d.ts +7 -0
  112. package/dist/atempo/curves/bezier.d.ts.map +1 -0
  113. package/dist/atempo/curves/bezier.js +46 -0
  114. package/dist/atempo/curves/bezier.js.map +1 -0
  115. package/dist/atempo/curves/bounce.d.ts +6 -0
  116. package/dist/atempo/curves/bounce.d.ts.map +1 -0
  117. package/dist/atempo/curves/bounce.js +22 -0
  118. package/dist/atempo/curves/bounce.js.map +1 -0
  119. package/dist/atempo/curves/cubic.d.ts +14 -0
  120. package/dist/atempo/curves/cubic.d.ts.map +1 -0
  121. package/dist/atempo/curves/cubic.js +22 -0
  122. package/dist/atempo/curves/cubic.js.map +1 -0
  123. package/dist/atempo/curves/elastic.d.ts +6 -0
  124. package/dist/atempo/curves/elastic.d.ts.map +1 -0
  125. package/dist/atempo/curves/elastic.js +12 -0
  126. package/dist/atempo/curves/elastic.js.map +1 -0
  127. package/dist/atempo/curves/expo.d.ts +14 -0
  128. package/dist/atempo/curves/expo.d.ts.map +1 -0
  129. package/dist/atempo/curves/expo.js +26 -0
  130. package/dist/atempo/curves/expo.js.map +1 -0
  131. package/dist/atempo/curves/holdSnap.d.ts +6 -0
  132. package/dist/atempo/curves/holdSnap.d.ts.map +1 -0
  133. package/dist/atempo/curves/holdSnap.js +15 -0
  134. package/dist/atempo/curves/holdSnap.js.map +1 -0
  135. package/dist/atempo/curves/index.d.ts +14 -0
  136. package/dist/atempo/curves/index.d.ts.map +1 -0
  137. package/dist/atempo/curves/index.js +14 -0
  138. package/dist/atempo/curves/index.js.map +1 -0
  139. package/dist/atempo/curves/linear.d.ts +6 -0
  140. package/dist/atempo/curves/linear.d.ts.map +1 -0
  141. package/dist/atempo/curves/linear.js +5 -0
  142. package/dist/atempo/curves/linear.js.map +1 -0
  143. package/dist/atempo/curves/overshoot.d.ts +6 -0
  144. package/dist/atempo/curves/overshoot.d.ts.map +1 -0
  145. package/dist/atempo/curves/overshoot.js +16 -0
  146. package/dist/atempo/curves/overshoot.js.map +1 -0
  147. package/dist/atempo/curves/quad.d.ts +14 -0
  148. package/dist/atempo/curves/quad.d.ts.map +1 -0
  149. package/dist/atempo/curves/quad.js +22 -0
  150. package/dist/atempo/curves/quad.js.map +1 -0
  151. package/dist/atempo/curves/step.d.ts +6 -0
  152. package/dist/atempo/curves/step.d.ts.map +1 -0
  153. package/dist/atempo/curves/step.js +11 -0
  154. package/dist/atempo/curves/step.js.map +1 -0
  155. package/dist/atempo/index.d.ts +17 -0
  156. package/dist/atempo/index.d.ts.map +1 -0
  157. package/dist/atempo/index.js +18 -0
  158. package/dist/atempo/index.js.map +1 -0
  159. package/dist/atempo/phase.d.ts +66 -0
  160. package/dist/atempo/phase.d.ts.map +1 -0
  161. package/dist/atempo/phase.js +121 -0
  162. package/dist/atempo/phase.js.map +1 -0
  163. package/dist/atempo/spring.d.ts +20 -0
  164. package/dist/atempo/spring.d.ts.map +1 -0
  165. package/dist/atempo/spring.js +71 -0
  166. package/dist/atempo/spring.js.map +1 -0
  167. package/dist/atempo/track.d.ts +69 -0
  168. package/dist/atempo/track.d.ts.map +1 -0
  169. package/dist/atempo/track.js +184 -0
  170. package/dist/atempo/track.js.map +1 -0
  171. package/dist/atempo/tracks/color.d.ts +20 -0
  172. package/dist/atempo/tracks/color.d.ts.map +1 -0
  173. package/dist/atempo/tracks/color.js +52 -0
  174. package/dist/atempo/tracks/color.js.map +1 -0
  175. package/dist/atempo/tracks/float.d.ts +9 -0
  176. package/dist/atempo/tracks/float.d.ts.map +1 -0
  177. package/dist/atempo/tracks/float.js +13 -0
  178. package/dist/atempo/tracks/float.js.map +1 -0
  179. package/dist/atempo/tracks/index.d.ts +8 -0
  180. package/dist/atempo/tracks/index.d.ts.map +1 -0
  181. package/dist/atempo/tracks/index.js +8 -0
  182. package/dist/atempo/tracks/index.js.map +1 -0
  183. package/dist/atempo/tracks/quat.d.ts +16 -0
  184. package/dist/atempo/tracks/quat.d.ts.map +1 -0
  185. package/dist/atempo/tracks/quat.js +72 -0
  186. package/dist/atempo/tracks/quat.js.map +1 -0
  187. package/dist/atempo/tracks/vec.d.ts +11 -0
  188. package/dist/atempo/tracks/vec.d.ts.map +1 -0
  189. package/dist/atempo/tracks/vec.js +27 -0
  190. package/dist/atempo/tracks/vec.js.map +1 -0
  191. package/dist/awasm/abi/index.d.ts +4 -0
  192. package/dist/awasm/abi/index.d.ts.map +1 -0
  193. package/dist/awasm/abi/index.js +4 -0
  194. package/dist/awasm/abi/index.js.map +1 -0
  195. package/dist/awasm/abi/layout.d.ts +40 -0
  196. package/dist/awasm/abi/layout.d.ts.map +1 -0
  197. package/dist/awasm/abi/layout.js +100 -0
  198. package/dist/awasm/abi/layout.js.map +1 -0
  199. package/dist/awasm/abi/slice.d.ts +28 -0
  200. package/dist/awasm/abi/slice.d.ts.map +1 -0
  201. package/dist/awasm/abi/slice.js +68 -0
  202. package/dist/awasm/abi/slice.js.map +1 -0
  203. package/dist/awasm/abi/string-buffer.d.ts +23 -0
  204. package/dist/awasm/abi/string-buffer.d.ts.map +1 -0
  205. package/dist/awasm/abi/string-buffer.js +52 -0
  206. package/dist/awasm/abi/string-buffer.js.map +1 -0
  207. package/dist/awasm/index.d.ts +5 -0
  208. package/dist/awasm/index.d.ts.map +1 -0
  209. package/dist/awasm/index.js +8 -0
  210. package/dist/awasm/index.js.map +1 -0
  211. package/dist/awasm/memory/block-pool.d.ts +31 -0
  212. package/dist/awasm/memory/block-pool.d.ts.map +1 -0
  213. package/dist/awasm/memory/block-pool.js +98 -0
  214. package/dist/awasm/memory/block-pool.js.map +1 -0
  215. package/dist/awasm/memory/index.d.ts +5 -0
  216. package/dist/awasm/memory/index.d.ts.map +1 -0
  217. package/dist/awasm/memory/index.js +5 -0
  218. package/dist/awasm/memory/index.js.map +1 -0
  219. package/dist/awasm/memory/linear-arena.d.ts +36 -0
  220. package/dist/awasm/memory/linear-arena.d.ts.map +1 -0
  221. package/dist/awasm/memory/linear-arena.js +94 -0
  222. package/dist/awasm/memory/linear-arena.js.map +1 -0
  223. package/dist/awasm/memory/memory-view.d.ts +51 -0
  224. package/dist/awasm/memory/memory-view.d.ts.map +1 -0
  225. package/dist/awasm/memory/memory-view.js +110 -0
  226. package/dist/awasm/memory/memory-view.js.map +1 -0
  227. package/dist/awasm/memory/wasm-memory.d.ts +40 -0
  228. package/dist/awasm/memory/wasm-memory.d.ts.map +1 -0
  229. package/dist/awasm/memory/wasm-memory.js +88 -0
  230. package/dist/awasm/memory/wasm-memory.js.map +1 -0
  231. package/dist/awasm/runtime/host-bridge.d.ts +30 -0
  232. package/dist/awasm/runtime/host-bridge.d.ts.map +1 -0
  233. package/dist/awasm/runtime/host-bridge.js +57 -0
  234. package/dist/awasm/runtime/host-bridge.js.map +1 -0
  235. package/dist/awasm/runtime/index.d.ts +5 -0
  236. package/dist/awasm/runtime/index.d.ts.map +1 -0
  237. package/dist/awasm/runtime/index.js +5 -0
  238. package/dist/awasm/runtime/index.js.map +1 -0
  239. package/dist/awasm/runtime/module-inspector.d.ts +32 -0
  240. package/dist/awasm/runtime/module-inspector.d.ts.map +1 -0
  241. package/dist/awasm/runtime/module-inspector.js +43 -0
  242. package/dist/awasm/runtime/module-inspector.js.map +1 -0
  243. package/dist/awasm/runtime/module-loader.d.ts +17 -0
  244. package/dist/awasm/runtime/module-loader.d.ts.map +1 -0
  245. package/dist/awasm/runtime/module-loader.js +99 -0
  246. package/dist/awasm/runtime/module-loader.js.map +1 -0
  247. package/dist/awasm/runtime/wasm-instance.d.ts +25 -0
  248. package/dist/awasm/runtime/wasm-instance.d.ts.map +1 -0
  249. package/dist/awasm/runtime/wasm-instance.js +60 -0
  250. package/dist/awasm/runtime/wasm-instance.js.map +1 -0
  251. package/dist/awasm/thread/atomic-queue.d.ts +33 -0
  252. package/dist/awasm/thread/atomic-queue.d.ts.map +1 -0
  253. package/dist/awasm/thread/atomic-queue.js +78 -0
  254. package/dist/awasm/thread/atomic-queue.js.map +1 -0
  255. package/dist/awasm/thread/index.d.ts +4 -0
  256. package/dist/awasm/thread/index.d.ts.map +1 -0
  257. package/dist/awasm/thread/index.js +4 -0
  258. package/dist/awasm/thread/index.js.map +1 -0
  259. package/dist/awasm/thread/shared-memory.d.ts +38 -0
  260. package/dist/awasm/thread/shared-memory.d.ts.map +1 -0
  261. package/dist/awasm/thread/shared-memory.js +74 -0
  262. package/dist/awasm/thread/shared-memory.js.map +1 -0
  263. package/dist/awasm/thread/worker-pool.d.ts +43 -0
  264. package/dist/awasm/thread/worker-pool.d.ts.map +1 -0
  265. package/dist/awasm/thread/worker-pool.js +118 -0
  266. package/dist/awasm/thread/worker-pool.js.map +1 -0
  267. package/dist/awgpu/binding.d.ts +108 -0
  268. package/dist/awgpu/binding.d.ts.map +1 -0
  269. package/dist/awgpu/binding.js +251 -0
  270. package/dist/awgpu/binding.js.map +1 -0
  271. package/dist/awgpu/device.d.ts +68 -0
  272. package/dist/awgpu/device.d.ts.map +1 -0
  273. package/dist/awgpu/device.js +150 -0
  274. package/dist/awgpu/device.js.map +1 -0
  275. package/dist/awgpu/graph.d.ts +77 -0
  276. package/dist/awgpu/graph.d.ts.map +1 -0
  277. package/dist/awgpu/graph.js +288 -0
  278. package/dist/awgpu/graph.js.map +1 -0
  279. package/dist/awgpu/index.d.ts +10 -0
  280. package/dist/awgpu/index.d.ts.map +1 -0
  281. package/dist/awgpu/index.js +19 -0
  282. package/dist/awgpu/index.js.map +1 -0
  283. package/dist/awgpu/memory.d.ts +231 -0
  284. package/dist/awgpu/memory.d.ts.map +1 -0
  285. package/dist/awgpu/memory.js +547 -0
  286. package/dist/awgpu/memory.js.map +1 -0
  287. package/dist/awgpu/pipeline.d.ts +114 -0
  288. package/dist/awgpu/pipeline.d.ts.map +1 -0
  289. package/dist/awgpu/pipeline.js +335 -0
  290. package/dist/awgpu/pipeline.js.map +1 -0
  291. package/dist/awgpu/sequence.d.ts +83 -0
  292. package/dist/awgpu/sequence.d.ts.map +1 -0
  293. package/dist/awgpu/sequence.js +273 -0
  294. package/dist/awgpu/sequence.js.map +1 -0
  295. package/dist/awgpu/state.d.ts +27 -0
  296. package/dist/awgpu/state.d.ts.map +1 -0
  297. package/dist/awgpu/state.js +43 -0
  298. package/dist/awgpu/state.js.map +1 -0
  299. package/dist/awgpu/stream.d.ts +57 -0
  300. package/dist/awgpu/stream.d.ts.map +1 -0
  301. package/dist/awgpu/stream.js +139 -0
  302. package/dist/awgpu/stream.js.map +1 -0
  303. package/dist/awgpu/target.d.ts +98 -0
  304. package/dist/awgpu/target.d.ts.map +1 -0
  305. package/dist/awgpu/target.js +357 -0
  306. package/dist/awgpu/target.js.map +1 -0
  307. package/dist/awgpu_old/buffer.d.ts +78 -0
  308. package/dist/awgpu_old/buffer.d.ts.map +1 -0
  309. package/dist/awgpu_old/buffer.js +220 -0
  310. package/dist/awgpu_old/buffer.js.map +1 -0
  311. package/dist/awgpu_old/device.d.ts +69 -0
  312. package/dist/awgpu_old/device.d.ts.map +1 -0
  313. package/dist/awgpu_old/device.js +121 -0
  314. package/dist/awgpu_old/device.js.map +1 -0
  315. package/dist/awgpu_old/frame.d.ts +17 -0
  316. package/dist/awgpu_old/frame.d.ts.map +1 -0
  317. package/dist/awgpu_old/frame.js +29 -0
  318. package/dist/awgpu_old/frame.js.map +1 -0
  319. package/dist/awgpu_old/index.d.ts +8 -0
  320. package/dist/awgpu_old/index.d.ts.map +1 -0
  321. package/dist/awgpu_old/index.js +18 -0
  322. package/dist/awgpu_old/index.js.map +1 -0
  323. package/dist/awgpu_old/layout.d.ts +70 -0
  324. package/dist/awgpu_old/layout.d.ts.map +1 -0
  325. package/dist/awgpu_old/layout.js +137 -0
  326. package/dist/awgpu_old/layout.js.map +1 -0
  327. package/dist/awgpu_old/pass.d.ts +97 -0
  328. package/dist/awgpu_old/pass.d.ts.map +1 -0
  329. package/dist/awgpu_old/pass.js +302 -0
  330. package/dist/awgpu_old/pass.js.map +1 -0
  331. package/dist/awgpu_old/pipeline.d.ts +73 -0
  332. package/dist/awgpu_old/pipeline.d.ts.map +1 -0
  333. package/dist/awgpu_old/pipeline.js +226 -0
  334. package/dist/awgpu_old/pipeline.js.map +1 -0
  335. package/dist/awgpu_old/target.d.ts +186 -0
  336. package/dist/awgpu_old/target.d.ts.map +1 -0
  337. package/dist/awgpu_old/target.js +428 -0
  338. package/dist/awgpu_old/target.js.map +1 -0
  339. package/dist/index.d.ts +10 -0
  340. package/dist/index.d.ts.map +1 -0
  341. package/dist/index.js +10 -0
  342. package/dist/index.js.map +1 -0
  343. package/package.json +106 -0
@@ -0,0 +1,273 @@
1
+ // ================================================================
2
+ // Awgpu - Level 5: Command Sequencing (RenderPassNode, ComputePassNode, PassSequence)
3
+ // ================================================================
4
+ import { resolveDevice, resolveQueue } from "./device.js";
5
+ import { resolveBuffer } from "./memory.js";
6
+ function resolveGpuBindGroup(bg) {
7
+ if (!bg)
8
+ return null;
9
+ return "native" in bg ? bg.native : bg;
10
+ }
11
+ function resolveSlotOffsets(offsets, slot) {
12
+ if (!offsets)
13
+ return undefined;
14
+ const item = Array.isArray(offsets)
15
+ ? offsets[slot]
16
+ : offsets[slot];
17
+ if (!item)
18
+ return undefined;
19
+ // Skip Array.from copy when item is already a number[].
20
+ return Array.isArray(item) ? item : Array.from(item);
21
+ }
22
+ /**
23
+ * Encapsulates a self-contained render pass with redundant driver state filtering.
24
+ */
25
+ export class RenderPassNode {
26
+ label;
27
+ target;
28
+ draws = [];
29
+ _customRecorder;
30
+ _activeBindGroups = new Array(8).fill(null);
31
+ _activeHasDynamicOffsets = new Array(8).fill(false);
32
+ _activeVbos = [];
33
+ _activeVboOffsets = [];
34
+ _scratchResolved = { buffer: null, offset: 0, size: 0 };
35
+ constructor(target, label = "RenderPassNode") {
36
+ this.target = target;
37
+ this.label = label;
38
+ }
39
+ addDraw(batch) {
40
+ this.draws.push(batch);
41
+ return this;
42
+ }
43
+ /**
44
+ * Registers custom imperative hardware recording callback, bypassing queued batch list.
45
+ */
46
+ record(recorder) {
47
+ this._customRecorder = recorder;
48
+ return this;
49
+ }
50
+ clear() {
51
+ this.draws.length = 0;
52
+ this._customRecorder = undefined;
53
+ }
54
+ execute(encoder) {
55
+ const desc = this.target.getDescriptor();
56
+ const pass = encoder.beginRenderPass(desc);
57
+ if (this._customRecorder) {
58
+ this._customRecorder(pass);
59
+ pass.end();
60
+ return;
61
+ }
62
+ // Redundant state filtering cache
63
+ let activePipeline = null;
64
+ let activeIbo = null;
65
+ let activeIboFormat = null;
66
+ let activeIboOffset = -1;
67
+ const activeBindGroups = this._activeBindGroups;
68
+ for (let s = 0; s < activeBindGroups.length; s++) {
69
+ activeBindGroups[s] = null;
70
+ }
71
+ const activeHasDynamicOffsets = this._activeHasDynamicOffsets;
72
+ for (let s = 0; s < activeHasDynamicOffsets.length; s++) {
73
+ activeHasDynamicOffsets[s] = false;
74
+ }
75
+ const activeVbos = this._activeVbos;
76
+ activeVbos.length = 0;
77
+ const activeVboOffsets = this._activeVboOffsets;
78
+ activeVboOffsets.length = 0;
79
+ const scratch = this._scratchResolved;
80
+ for (let i = 0; i < this.draws.length; i++) {
81
+ const batch = this.draws[i];
82
+ // 1. Pipeline state
83
+ if (activePipeline !== batch.pipeline.native) {
84
+ pass.setPipeline(batch.pipeline.native);
85
+ activePipeline = batch.pipeline.native;
86
+ }
87
+ // 2. Bind Tables
88
+ if (batch.bindTables) {
89
+ for (let slot = 0; slot < batch.bindTables.length; slot++) {
90
+ const bg = resolveGpuBindGroup(batch.bindTables[slot]);
91
+ if (bg) {
92
+ while (slot >= activeBindGroups.length) {
93
+ activeBindGroups.push(null);
94
+ activeHasDynamicOffsets.push(false);
95
+ }
96
+ const offsets = resolveSlotOffsets(batch.dynamicOffsets, slot);
97
+ if (offsets !== undefined && offsets.length > 0) {
98
+ pass.setBindGroup(slot, bg, offsets);
99
+ activeBindGroups[slot] = bg;
100
+ activeHasDynamicOffsets[slot] = true;
101
+ }
102
+ else if (activeBindGroups[slot] !== bg || activeHasDynamicOffsets[slot]) {
103
+ pass.setBindGroup(slot, bg);
104
+ activeBindGroups[slot] = bg;
105
+ activeHasDynamicOffsets[slot] = false;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ // 3. StreamSet (Vertex & Index Buffers)
111
+ const streams = batch.streamSet;
112
+ if (streams) {
113
+ for (let s = 0; s < streams.streams.length; s++) {
114
+ const vStream = streams.streams[s];
115
+ resolveBuffer(vStream.source, scratch);
116
+ if (activeVbos[vStream.slot] !== scratch.buffer || activeVboOffsets[vStream.slot] !== scratch.offset) {
117
+ pass.setVertexBuffer(vStream.slot, scratch.buffer, scratch.offset);
118
+ activeVbos[vStream.slot] = scratch.buffer;
119
+ activeVboOffsets[vStream.slot] = scratch.offset;
120
+ }
121
+ }
122
+ if (streams.indexStream) {
123
+ const iStream = streams.indexStream;
124
+ resolveBuffer(iStream.source, scratch);
125
+ if (activeIbo !== scratch.buffer || activeIboFormat !== iStream.format || activeIboOffset !== scratch.offset) {
126
+ pass.setIndexBuffer(scratch.buffer, iStream.format, scratch.offset);
127
+ activeIbo = scratch.buffer;
128
+ activeIboFormat = iStream.format;
129
+ activeIboOffset = scratch.offset;
130
+ }
131
+ }
132
+ }
133
+ // 4. Issue Draw (Indirect or Direct)
134
+ if (batch.indirect) {
135
+ resolveBuffer(batch.indirect.buffer, scratch);
136
+ const indirectOffset = scratch.offset + (batch.indirect.offset ?? 0);
137
+ if (streams?.indexStream) {
138
+ pass.drawIndexedIndirect(scratch.buffer, indirectOffset);
139
+ }
140
+ else {
141
+ pass.drawIndirect(scratch.buffer, indirectOffset);
142
+ }
143
+ }
144
+ else if (streams) {
145
+ if (streams.indexStream) {
146
+ const count = batch.indexCount ?? streams.indexStream.count;
147
+ if (count > 0) {
148
+ const firstIndex = batch.firstIndex ?? streams.indexStream.firstIndex ?? 0;
149
+ const baseVertex = batch.baseVertex ?? streams.indexStream.baseVertex ?? 0;
150
+ pass.drawIndexed(count, batch.instanceCount ?? streams.instanceCount, firstIndex, baseVertex, batch.firstInstance ?? streams.firstInstance);
151
+ }
152
+ }
153
+ else {
154
+ const count = batch.vertexCount ?? streams.vertexCount;
155
+ if (count && count > 0) {
156
+ pass.draw(count, batch.instanceCount ?? streams.instanceCount, batch.firstVertex ?? streams.firstVertex, batch.firstInstance ?? streams.firstInstance);
157
+ }
158
+ }
159
+ }
160
+ else if (batch.vertexCount && batch.vertexCount > 0) {
161
+ pass.draw(batch.vertexCount, batch.instanceCount ?? 1, batch.firstVertex ?? 0, batch.firstInstance ?? 0);
162
+ }
163
+ }
164
+ pass.end();
165
+ }
166
+ }
167
+ /**
168
+ * Encapsulates a compute pass dispatching compute batches.
169
+ */
170
+ export class ComputePassNode {
171
+ label;
172
+ dispatches = [];
173
+ _customRecorder;
174
+ _activeBindGroups = new Array(8).fill(null);
175
+ _activeHasDynamicOffsets = new Array(8).fill(false);
176
+ _scratchResolved = { buffer: null, offset: 0, size: 0 };
177
+ constructor(label = "ComputePassNode") {
178
+ this.label = label;
179
+ }
180
+ addDispatch(batch) {
181
+ this.dispatches.push(batch);
182
+ return this;
183
+ }
184
+ record(recorder) {
185
+ this._customRecorder = recorder;
186
+ return this;
187
+ }
188
+ clear() {
189
+ this.dispatches.length = 0;
190
+ this._customRecorder = undefined;
191
+ }
192
+ execute(encoder) {
193
+ const pass = encoder.beginComputePass({ label: `${this.label}_ComputePass` });
194
+ if (this._customRecorder) {
195
+ this._customRecorder(pass);
196
+ pass.end();
197
+ return;
198
+ }
199
+ let activePipeline = null;
200
+ const activeBindGroups = this._activeBindGroups;
201
+ for (let s = 0; s < activeBindGroups.length; s++) {
202
+ activeBindGroups[s] = null;
203
+ }
204
+ const activeHasDynamicOffsets = this._activeHasDynamicOffsets;
205
+ for (let s = 0; s < activeHasDynamicOffsets.length; s++) {
206
+ activeHasDynamicOffsets[s] = false;
207
+ }
208
+ const scratch = this._scratchResolved;
209
+ for (let i = 0; i < this.dispatches.length; i++) {
210
+ const batch = this.dispatches[i];
211
+ if (activePipeline !== batch.pipeline.native) {
212
+ pass.setPipeline(batch.pipeline.native);
213
+ activePipeline = batch.pipeline.native;
214
+ }
215
+ if (batch.bindTables) {
216
+ for (let slot = 0; slot < batch.bindTables.length; slot++) {
217
+ const bg = resolveGpuBindGroup(batch.bindTables[slot]);
218
+ if (bg) {
219
+ while (slot >= activeBindGroups.length) {
220
+ activeBindGroups.push(null);
221
+ activeHasDynamicOffsets.push(false);
222
+ }
223
+ const offsets = resolveSlotOffsets(batch.dynamicOffsets, slot);
224
+ if (offsets !== undefined && offsets.length > 0) {
225
+ pass.setBindGroup(slot, bg, offsets);
226
+ activeBindGroups[slot] = bg;
227
+ activeHasDynamicOffsets[slot] = true;
228
+ }
229
+ else if (activeBindGroups[slot] !== bg || activeHasDynamicOffsets[slot]) {
230
+ pass.setBindGroup(slot, bg);
231
+ activeBindGroups[slot] = bg;
232
+ activeHasDynamicOffsets[slot] = false;
233
+ }
234
+ }
235
+ }
236
+ }
237
+ if (batch.indirect) {
238
+ resolveBuffer(batch.indirect.buffer, scratch);
239
+ const indirectOffset = scratch.offset + (batch.indirect.offset ?? 0);
240
+ pass.dispatchWorkgroupsIndirect(scratch.buffer, indirectOffset);
241
+ }
242
+ else if (batch.workgroups) {
243
+ pass.dispatchWorkgroups(batch.workgroups[0], batch.workgroups[1], batch.workgroups[2]);
244
+ }
245
+ }
246
+ pass.end();
247
+ }
248
+ }
249
+ /**
250
+ * Linear pass execution orchestrator.
251
+ * Records passes into a single GPUCommandEncoder and submits to queue in one command buffer.
252
+ */
253
+ export class PassSequence {
254
+ passes = [];
255
+ add(pass) {
256
+ this.passes.push(pass);
257
+ return this;
258
+ }
259
+ clear() {
260
+ this.passes.length = 0;
261
+ }
262
+ execute(device, label = "PassSequence") {
263
+ const gpu = resolveDevice(device);
264
+ const queue = resolveQueue(device);
265
+ const encoder = gpu.createCommandEncoder({ label: `${label}_Encoder` });
266
+ for (let i = 0; i < this.passes.length; i++) {
267
+ this.passes[i].execute(encoder);
268
+ }
269
+ const commandBuffer = encoder.finish({ label: `${label}_CommandBuffer` });
270
+ queue.submit([commandBuffer]);
271
+ }
272
+ }
273
+ //# sourceMappingURL=sequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../awgpu/sequence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Buffer, Texture } from "./memory.js";
2
+ /**
3
+ * Double-buffer state container for multi-pass compute iterations and feedback operations.
4
+ * Provides O(1) handle swapping without GPU memory copying.
5
+ */
6
+ export declare class SwapBuffer<T extends Buffer | Texture | GPUBuffer | GPUTexture> {
7
+ private _current;
8
+ private _next;
9
+ constructor(initial: T, secondary: T);
10
+ /**
11
+ * Active state resource for reading.
12
+ */
13
+ get read(): T;
14
+ /**
15
+ * Target state resource for writing.
16
+ */
17
+ get write(): T;
18
+ /**
19
+ * Flips active read and write handles.
20
+ */
21
+ swap(): void;
22
+ /**
23
+ * Re-assigns internal buffers.
24
+ */
25
+ set(initial: T, secondary: T): void;
26
+ }
27
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../awgpu/state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnD;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU;IACvE,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,KAAK,CAAI;gBAEL,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;IAKpC;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC,CAEZ;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,CAAC,CAEb;IAED;;OAEG;IACH,IAAI,IAAI,IAAI;IAMZ;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI;CAItC"}
@@ -0,0 +1,43 @@
1
+ // ================================================================
2
+ // Awgpu - Level 2: Composable State (SwapBuffer)
3
+ // ================================================================
4
+ /**
5
+ * Double-buffer state container for multi-pass compute iterations and feedback operations.
6
+ * Provides O(1) handle swapping without GPU memory copying.
7
+ */
8
+ export class SwapBuffer {
9
+ _current;
10
+ _next;
11
+ constructor(initial, secondary) {
12
+ this._current = initial;
13
+ this._next = secondary;
14
+ }
15
+ /**
16
+ * Active state resource for reading.
17
+ */
18
+ get read() {
19
+ return this._current;
20
+ }
21
+ /**
22
+ * Target state resource for writing.
23
+ */
24
+ get write() {
25
+ return this._next;
26
+ }
27
+ /**
28
+ * Flips active read and write handles.
29
+ */
30
+ swap() {
31
+ const temp = this._current;
32
+ this._current = this._next;
33
+ this._next = temp;
34
+ }
35
+ /**
36
+ * Re-assigns internal buffers.
37
+ */
38
+ set(initial, secondary) {
39
+ this._current = initial;
40
+ this._next = secondary;
41
+ }
42
+ }
43
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../awgpu/state.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kDAAkD;AAClD,mEAAmE;AAInE;;;GAGG;AACH,MAAM,OAAO,UAAU;IACX,QAAQ,CAAI;IACZ,KAAK,CAAI;IAEjB,YAAY,OAAU,EAAE,SAAY;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,OAAU,EAAE,SAAY;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IAC3B,CAAC;CACJ"}
@@ -0,0 +1,57 @@
1
+ import type { Buffer, BufferSlice } from "./memory.js";
2
+ export declare const VERTEX_FORMAT_SIZES: Record<string, number>;
3
+ export interface VertexStream {
4
+ slot: number;
5
+ shaderLocation?: number;
6
+ source: GPUBuffer | Buffer | BufferSlice;
7
+ format: GPUVertexFormat;
8
+ offset?: number;
9
+ stepMode?: GPUVertexStepMode;
10
+ }
11
+ export interface IndexStream {
12
+ source: GPUBuffer | Buffer | BufferSlice;
13
+ format: GPUIndexFormat;
14
+ count: number;
15
+ offset?: number;
16
+ firstIndex?: number;
17
+ baseVertex?: number;
18
+ }
19
+ /**
20
+ * Domain-agnostic compound data stream descriptor.
21
+ * Groups 1-N VertexStream definitions (slot, shaderLocation, buffer source, format) and an
22
+ * optional IndexStream. Call deriveVertexLayouts() to produce (GPUVertexBufferLayout | null)[] for
23
+ * pipeline compilation.
24
+ */
25
+ export declare class StreamSet {
26
+ readonly streams: VertexStream[];
27
+ readonly slotStrides: Map<number, number>;
28
+ indexStream?: IndexStream;
29
+ vertexCount?: number;
30
+ instanceCount: number;
31
+ firstVertex: number;
32
+ firstInstance: number;
33
+ /**
34
+ * Appends vertex buffer stream to the set.
35
+ * - slot: GPU buffer binding slot (setVertexBuffer index).
36
+ * - shaderLocation: WGSL @location attribute index. Defaults to slot for planar layouts.
37
+ * Must be set explicitly for interleaved streams sharing the same slot.
38
+ */
39
+ addStream(slot: number, source: GPUBuffer | Buffer | BufferSlice, format: GPUVertexFormat, offset?: number, stepMode?: GPUVertexStepMode, shaderLocation?: number): this;
40
+ /**
41
+ * Configures explicit byte stride for a specific buffer slot.
42
+ * Overrides automatic stride calculation from attribute offsets.
43
+ */
44
+ setSlotStride(slot: number, stride: number): this;
45
+ /**
46
+ * Configures the index buffer stream.
47
+ */
48
+ setIndices(source: GPUBuffer | Buffer | BufferSlice, format: GPUIndexFormat, count: number, offset?: number, firstIndex?: number, baseVertex?: number): this;
49
+ /**
50
+ * Produces (GPUVertexBufferLayout | null)[] for pipeline compilation.
51
+ * Groups streams by slot, maps them to exact slot indices, computes cumulative byte
52
+ * offsets per attribute, and aligns arrayStride to a 4-byte boundary. Unused intermediate
53
+ * slots are populated with null to preserve slot-to-index alignment required by WebGPU.
54
+ */
55
+ deriveVertexLayouts(): (GPUVertexBufferLayout | null)[];
56
+ }
57
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../awgpu/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyBtD,CAAC;AAEF,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IAClB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAM;IACtC,QAAQ,CAAC,WAAW,sBAA6B;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,SAAK;IAClB,WAAW,SAAK;IAChB,aAAa,SAAK;IAElB;;;;;OAKG;IACH,SAAS,CACL,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,EACxC,MAAM,EAAE,eAAe,EACvB,MAAM,SAAI,EACV,QAAQ,GAAE,iBAA4B,EACtC,cAAc,CAAC,EAAE,MAAM,GACxB,IAAI;IAYP;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjD;;OAEG;IACH,UAAU,CACN,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,EACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,UAAU,SAAI,EACd,UAAU,SAAI,GACf,IAAI;IAYP;;;;;OAKG;IACH,mBAAmB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,EAAE;CAqD1D"}
@@ -0,0 +1,139 @@
1
+ // ================================================================
2
+ // Awgpu - Level 2: Composable Data Streams (StreamSet)
3
+ // ================================================================
4
+ export const VERTEX_FORMAT_SIZES = {
5
+ float32: 4,
6
+ float32x2: 8,
7
+ float32x3: 12,
8
+ float32x4: 16,
9
+ uint32: 4,
10
+ uint32x2: 8,
11
+ uint32x4: 16,
12
+ sint32: 4,
13
+ sint32x2: 8,
14
+ sint32x4: 16,
15
+ unorm8x4: 4,
16
+ snorm8x4: 4,
17
+ uint8x4: 4,
18
+ sint8x4: 4,
19
+ unorm16x2: 4,
20
+ snorm16x2: 4,
21
+ uint16x2: 4,
22
+ sint16x2: 4,
23
+ unorm16x4: 8,
24
+ snorm16x4: 8,
25
+ uint16x4: 8,
26
+ sint16x4: 8,
27
+ float16x2: 4,
28
+ float16x4: 8,
29
+ };
30
+ /**
31
+ * Domain-agnostic compound data stream descriptor.
32
+ * Groups 1-N VertexStream definitions (slot, shaderLocation, buffer source, format) and an
33
+ * optional IndexStream. Call deriveVertexLayouts() to produce (GPUVertexBufferLayout | null)[] for
34
+ * pipeline compilation.
35
+ */
36
+ export class StreamSet {
37
+ streams = [];
38
+ slotStrides = new Map();
39
+ indexStream;
40
+ vertexCount;
41
+ instanceCount = 1;
42
+ firstVertex = 0;
43
+ firstInstance = 0;
44
+ /**
45
+ * Appends vertex buffer stream to the set.
46
+ * - slot: GPU buffer binding slot (setVertexBuffer index).
47
+ * - shaderLocation: WGSL @location attribute index. Defaults to slot for planar layouts.
48
+ * Must be set explicitly for interleaved streams sharing the same slot.
49
+ */
50
+ addStream(slot, source, format, offset = 0, stepMode = "vertex", shaderLocation) {
51
+ this.streams.push({
52
+ slot,
53
+ shaderLocation,
54
+ source,
55
+ format,
56
+ offset,
57
+ stepMode,
58
+ });
59
+ return this;
60
+ }
61
+ /**
62
+ * Configures explicit byte stride for a specific buffer slot.
63
+ * Overrides automatic stride calculation from attribute offsets.
64
+ */
65
+ setSlotStride(slot, stride) {
66
+ this.slotStrides.set(slot, stride);
67
+ return this;
68
+ }
69
+ /**
70
+ * Configures the index buffer stream.
71
+ */
72
+ setIndices(source, format, count, offset = 0, firstIndex = 0, baseVertex = 0) {
73
+ this.indexStream = {
74
+ source,
75
+ format,
76
+ count,
77
+ offset,
78
+ firstIndex,
79
+ baseVertex,
80
+ };
81
+ return this;
82
+ }
83
+ /**
84
+ * Produces (GPUVertexBufferLayout | null)[] for pipeline compilation.
85
+ * Groups streams by slot, maps them to exact slot indices, computes cumulative byte
86
+ * offsets per attribute, and aligns arrayStride to a 4-byte boundary. Unused intermediate
87
+ * slots are populated with null to preserve slot-to-index alignment required by WebGPU.
88
+ */
89
+ deriveVertexLayouts() {
90
+ if (this.streams.length === 0)
91
+ return [];
92
+ // Group streams by buffer binding slot
93
+ const slotMap = new Map();
94
+ let maxSlot = 0;
95
+ for (const s of this.streams) {
96
+ let list = slotMap.get(s.slot);
97
+ if (!list) {
98
+ list = [];
99
+ slotMap.set(s.slot, list);
100
+ }
101
+ list.push(s);
102
+ if (s.slot > maxSlot)
103
+ maxSlot = s.slot;
104
+ }
105
+ const layouts = new Array(maxSlot + 1).fill(null);
106
+ for (const [slot, streamList] of slotMap.entries()) {
107
+ let currentOffset = 0;
108
+ const attributes = [];
109
+ let stepMode = "vertex";
110
+ for (let i = 0; i < streamList.length; i++) {
111
+ const stream = streamList[i];
112
+ stepMode = stream.stepMode ?? "vertex";
113
+ const offset = stream.offset ?? currentOffset;
114
+ // shaderLocation is the WGSL @location index and is independent of slot.
115
+ // For planar layouts (one attribute per slot), slot == shaderLocation by convention.
116
+ // For interleaved layouts, each attribute inside the slot gets a unique location.
117
+ const shaderLocation = stream.shaderLocation ?? (slot + i);
118
+ attributes.push({
119
+ shaderLocation,
120
+ format: stream.format,
121
+ offset,
122
+ });
123
+ const size = VERTEX_FORMAT_SIZES[stream.format] ?? 4;
124
+ currentOffset = offset + size;
125
+ }
126
+ const explicitStride = this.slotStrides.get(slot);
127
+ const arrayStride = explicitStride !== undefined
128
+ ? Math.max(4, Math.ceil(explicitStride / 4) * 4)
129
+ : Math.max(4, Math.ceil(currentOffset / 4) * 4);
130
+ layouts[slot] = {
131
+ arrayStride,
132
+ stepMode,
133
+ attributes,
134
+ };
135
+ }
136
+ return layouts;
137
+ }
138
+ }
139
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../awgpu/stream.ts"],"names":[],"mappings":"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"}