@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,547 @@
1
+ // ================================================================
2
+ // Awgpu - Level 1: Managed Hardware Memory & Handles
3
+ // ================================================================
4
+ import { resolveDevice, resolveQueue } from "./device.js";
5
+ // Cache mapping raw GPUTexture -> default GPUTextureView.
6
+ // Prevents repeated createView() allocations when a raw GPUTexture is passed to
7
+ // resolveTextureView in hot paths. WeakMap allows garbage collection without manual cleanup.
8
+ const _gpuTextureViewCache = new WeakMap();
9
+ /**
10
+ * Resolves a buffer source (native GPUBuffer, Buffer wrapper, or BufferSlice) into concrete hardware descriptors.
11
+ * Accepts an optional mutable ResolvedBuffer target to eliminate heap allocations in hot paths.
12
+ */
13
+ export function resolveBuffer(source, out) {
14
+ const target = out ?? { buffer: null, offset: 0, size: 0 };
15
+ if ("byteOffset" in source) {
16
+ const rawBuf = "native" in source.buffer ? source.buffer.native : source.buffer;
17
+ target.buffer = rawBuf;
18
+ target.offset = source.byteOffset;
19
+ target.size = source.byteLength;
20
+ return target;
21
+ }
22
+ const raw = "native" in source ? source.native : source;
23
+ target.buffer = raw;
24
+ target.offset = 0;
25
+ target.size = raw.size;
26
+ return target;
27
+ }
28
+ /**
29
+ * Resolves a texture source into a raw GPUTexture.
30
+ */
31
+ export function resolveTexture(source) {
32
+ return "native" in source ? source.native : source;
33
+ }
34
+ /**
35
+ * Resolves GPUTextureView from GPUTextureView, GPUTexture, or Texture wrapper.
36
+ * Raw GPUTexture inputs are cached in a module-level WeakMap so the default view
37
+ * is created only once per texture object, eliminating repeated allocations in hot paths.
38
+ */
39
+ export function resolveTextureView(source) {
40
+ if ("view" in source) {
41
+ // Texture wrapper: returns pre-cached primary view.
42
+ return source.view;
43
+ }
44
+ if ("createView" in source) {
45
+ // Raw GPUTexture: look up or create and cache the default view.
46
+ const tex = source;
47
+ let cached = _gpuTextureViewCache.get(tex);
48
+ if (!cached) {
49
+ cached = tex.createView();
50
+ _gpuTextureViewCache.set(tex, cached);
51
+ }
52
+ return cached;
53
+ }
54
+ return source;
55
+ }
56
+ /**
57
+ * Resolves a sampler from Sampler wrapper or GPUSampler.
58
+ */
59
+ export function resolveSampler(source) {
60
+ return "native" in source ? source.native : source;
61
+ }
62
+ /**
63
+ * Managed WebGPU buffer with alignment validation and zero-allocation writing.
64
+ */
65
+ export class Buffer {
66
+ native;
67
+ size;
68
+ usage;
69
+ label;
70
+ constructor(native, size, usage, label = "Buffer") {
71
+ this.native = native;
72
+ this.size = size;
73
+ this.usage = usage;
74
+ this.label = label;
75
+ }
76
+ /**
77
+ * Creates a slice view into this buffer without heap allocation.
78
+ */
79
+ slice(byteOffset, byteLength) {
80
+ const len = byteLength ?? (this.size - byteOffset);
81
+ return {
82
+ buffer: this,
83
+ byteOffset,
84
+ byteLength: len,
85
+ };
86
+ }
87
+ /**
88
+ * Uploads typed array data in-place into GPU buffer memory via queue.writeBuffer.
89
+ */
90
+ write(device, data, bufferOffset = 0) {
91
+ const queue = resolveQueue(device);
92
+ const view = data;
93
+ const byteLength = view.byteLength ?? data.byteLength;
94
+ const buffer = view.buffer ?? data;
95
+ const byteOffset = view.byteOffset ?? 0;
96
+ queue.writeBuffer(this.native, bufferOffset, buffer, byteOffset, byteLength);
97
+ }
98
+ /**
99
+ * Reads buffer contents back to CPU via a MAP_READ staging buffer.
100
+ * - byteOffset: byte start within this buffer. Default 0.
101
+ * - byteLength: number of bytes to read. Defaults to remaining size from byteOffset.
102
+ * - reusableStaging: optional pre-allocated MAP_READ staging buffer to avoid per-read buffer creation.
103
+ * Returns a detached ArrayBuffer. Staging buffer is destroyed only if allocated internally.
104
+ */
105
+ async read(device, byteOffset = 0, byteLength, reusableStaging) {
106
+ const gpu = resolveDevice(device);
107
+ const queue = resolveQueue(device);
108
+ const size = byteLength ?? (this.size - byteOffset);
109
+ const staging = reusableStaging ?? gpu.createBuffer({
110
+ size,
111
+ usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
112
+ label: `${this.label}_ReadStaging`,
113
+ });
114
+ const encoder = gpu.createCommandEncoder({ label: `${this.label}_ReadEncoder` });
115
+ encoder.copyBufferToBuffer(this.native, byteOffset, staging, 0, size);
116
+ queue.submit([encoder.finish()]);
117
+ await staging.mapAsync(GPUMapMode.READ, 0, size);
118
+ const result = staging.getMappedRange(0, size).slice(0);
119
+ staging.unmap();
120
+ if (!reusableStaging) {
121
+ staging.destroy();
122
+ }
123
+ return result;
124
+ }
125
+ destroy() {
126
+ this.native.destroy();
127
+ }
128
+ /**
129
+ * Factory: Allocates a raw GPU buffer with optional initial data upload.
130
+ */
131
+ static create(device, desc) {
132
+ const gpu = resolveDevice(device);
133
+ const alignedSize = Math.max(4, Math.ceil(desc.size / 4) * 4);
134
+ const usage = desc.usage | (desc.data ? GPUBufferUsage.COPY_DST : 0);
135
+ const label = desc.label ?? "Buffer";
136
+ const native = gpu.createBuffer({
137
+ label,
138
+ size: alignedSize,
139
+ usage,
140
+ });
141
+ const buf = new Buffer(native, alignedSize, usage, label);
142
+ if (desc.data) {
143
+ buf.write(gpu, desc.data);
144
+ }
145
+ return buf;
146
+ }
147
+ /**
148
+ * Aligns byte offset to uniform buffer dynamic offset boundary.
149
+ * WebGPU requires dynamic uniform offsets to align to minUniformBufferOffsetAlignment (256 bytes).
150
+ */
151
+ static alignUniformOffset(offset, alignment = 256) {
152
+ return Math.ceil(offset / alignment) * alignment;
153
+ }
154
+ /**
155
+ * Factory: Allocates uniform buffer enforcing 16-byte minimum and 16-byte alignment.
156
+ */
157
+ static createUniform(device, sizeOrData, label = "UniformBuffer") {
158
+ const isData = typeof sizeOrData !== "number";
159
+ const rawSize = isData
160
+ ? sizeOrData.byteLength ?? sizeOrData.byteLength
161
+ : sizeOrData;
162
+ const size = Math.max(16, Math.ceil(rawSize / 16) * 16);
163
+ return Buffer.create(device, {
164
+ size,
165
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
166
+ data: isData ? sizeOrData : undefined,
167
+ label,
168
+ });
169
+ }
170
+ /**
171
+ * Factory: Allocates storage buffer aligned to 4 bytes.
172
+ */
173
+ static createStorage(device, sizeOrData, options = {}) {
174
+ const isData = typeof sizeOrData !== "number";
175
+ const rawSize = isData
176
+ ? sizeOrData.byteLength ?? sizeOrData.byteLength
177
+ : sizeOrData;
178
+ const size = Math.max(4, Math.ceil(rawSize / 4) * 4);
179
+ const label = options.label ?? "StorageBuffer";
180
+ return Buffer.create(device, {
181
+ size,
182
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
183
+ data: isData ? sizeOrData : undefined,
184
+ label,
185
+ });
186
+ }
187
+ /**
188
+ * Factory: Allocates vertex buffer aligned to 4 bytes.
189
+ */
190
+ static createVertex(device, sizeOrData, label = "VertexBuffer") {
191
+ const isData = typeof sizeOrData !== "number";
192
+ const rawSize = isData
193
+ ? sizeOrData.byteLength ?? sizeOrData.byteLength
194
+ : sizeOrData;
195
+ const size = Math.max(4, Math.ceil(rawSize / 4) * 4);
196
+ return Buffer.create(device, {
197
+ size,
198
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
199
+ data: isData ? sizeOrData : undefined,
200
+ label,
201
+ });
202
+ }
203
+ /**
204
+ * Factory: Allocates index buffer aligned to 4 bytes.
205
+ */
206
+ static createIndex(device, sizeOrData, label = "IndexBuffer") {
207
+ const isData = typeof sizeOrData !== "number";
208
+ const rawSize = isData
209
+ ? sizeOrData.byteLength ?? sizeOrData.byteLength
210
+ : sizeOrData;
211
+ const size = Math.max(4, Math.ceil(rawSize / 4) * 4);
212
+ return Buffer.create(device, {
213
+ size,
214
+ usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
215
+ data: isData ? sizeOrData : undefined,
216
+ label,
217
+ });
218
+ }
219
+ }
220
+ /**
221
+ * Managed WebGPU texture with default view companion.
222
+ */
223
+ export class Texture {
224
+ native;
225
+ view;
226
+ width;
227
+ height;
228
+ depthOrLayers;
229
+ format;
230
+ usage;
231
+ label;
232
+ constructor(native, view, width, height, depthOrLayers, format, usage, label = "Texture") {
233
+ this.native = native;
234
+ this.view = view;
235
+ this.width = width;
236
+ this.height = height;
237
+ this.depthOrLayers = depthOrLayers;
238
+ this.format = format;
239
+ this.usage = usage;
240
+ this.label = label;
241
+ }
242
+ createView(desc) {
243
+ return this.native.createView(desc);
244
+ }
245
+ /**
246
+ * Uploads pixel data to 2D texture via queue.writeTexture.
247
+ * Automatically aligns bytesPerRow to 256-byte boundary if omitted.
248
+ */
249
+ write2D(device, data, options = {}) {
250
+ const queue = resolveQueue(device);
251
+ const w = options.width ?? this.width;
252
+ const h = options.height ?? this.height;
253
+ const bpp = options.bytesPerPixel ?? 4;
254
+ const unalignedBytesPerRow = w * bpp;
255
+ const bytesPerRow = options.bytesPerRow ?? Math.ceil(unalignedBytesPerRow / 256) * 256;
256
+ const view = data;
257
+ const buffer = view.buffer ?? data;
258
+ const byteOffset = view.byteOffset ?? 0;
259
+ queue.writeTexture({
260
+ texture: this.native,
261
+ mipLevel: options.mipLevel ?? 0,
262
+ origin: { x: options.x ?? 0, y: options.y ?? 0, z: 0 },
263
+ }, buffer, {
264
+ offset: byteOffset,
265
+ bytesPerRow,
266
+ rowsPerImage: options.rowsPerImage ?? h,
267
+ }, { width: w, height: h, depthOrArrayLayers: 1 });
268
+ }
269
+ /**
270
+ * Copies an external image source (ImageBitmap, HTMLCanvasElement, OffscreenCanvas) directly into the texture.
271
+ */
272
+ copyExternalImage(device, source, options = {}) {
273
+ const queue = resolveQueue(device);
274
+ const src = source.source;
275
+ queue.copyExternalImageToTexture(source, {
276
+ texture: this.native,
277
+ mipLevel: options.mipLevel ?? 0,
278
+ origin: { x: options.x ?? 0, y: options.y ?? 0, z: 0 },
279
+ }, {
280
+ width: src.width,
281
+ height: src.height,
282
+ });
283
+ }
284
+ destroy() {
285
+ this.native.destroy();
286
+ }
287
+ /**
288
+ * Factory: Instantiates Texture from native GPUTextureDescriptor.
289
+ */
290
+ static create(device, desc) {
291
+ const gpu = resolveDevice(device);
292
+ const native = gpu.createTexture(desc);
293
+ const view = native.createView({ label: `${desc.label ?? "Texture"}_View` });
294
+ const size = desc.size;
295
+ const width = "width" in size ? size.width : desc.size[0];
296
+ const height = "height" in size ? size.height ?? 1 : (desc.size[1] ?? 1);
297
+ const depth = "depthOrArrayLayers" in size ? size.depthOrArrayLayers ?? 1 : (desc.size[2] ?? 1);
298
+ return new Texture(native, view, width, height, depth, desc.format, desc.usage, desc.label);
299
+ }
300
+ /**
301
+ * Factory: Allocates 2D color or data texture.
302
+ */
303
+ static create2D(device, options) {
304
+ const w = Math.max(1, options.width);
305
+ const h = Math.max(1, options.height);
306
+ const format = options.format ?? "rgba8unorm";
307
+ const usage = options.usage ??
308
+ (GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST);
309
+ const label = options.label ?? "Texture2D";
310
+ return Texture.create(device, {
311
+ label,
312
+ size: [w, h, 1],
313
+ format,
314
+ usage,
315
+ sampleCount: options.sampleCount ?? 1,
316
+ });
317
+ }
318
+ /**
319
+ * Factory: Allocates 3D volumetric texture.
320
+ */
321
+ static create3D(device, options) {
322
+ const w = Math.max(1, options.width);
323
+ const h = Math.max(1, options.height);
324
+ const d = Math.max(1, options.depth);
325
+ const format = options.format ?? "r32float";
326
+ const usage = options.usage ??
327
+ (GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.COPY_DST);
328
+ const label = options.label ?? "Texture3D";
329
+ return Texture.create(device, {
330
+ label,
331
+ size: [w, h, d],
332
+ dimension: "3d",
333
+ format,
334
+ usage,
335
+ });
336
+ }
337
+ /**
338
+ * Factory: Allocates 2D depth or depth-stencil texture.
339
+ */
340
+ static createDepth(device, options) {
341
+ const w = Math.max(1, options.width);
342
+ const h = Math.max(1, options.height);
343
+ const defaultFormat = options.stencil ? "depth24plus-stencil8" : "depth24plus";
344
+ const format = options.format ?? defaultFormat;
345
+ const usage = options.usage ?? (GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING);
346
+ const label = options.label ?? "DepthTexture";
347
+ return Texture.create(device, {
348
+ label,
349
+ size: [w, h, 1],
350
+ format,
351
+ usage,
352
+ sampleCount: options.sampleCount ?? 1,
353
+ });
354
+ }
355
+ /**
356
+ * Wraps pre-existing native GPUTexture.
357
+ */
358
+ static fromNative(gpuTexture, view, label) {
359
+ const texView = view ?? gpuTexture.createView();
360
+ return new Texture(gpuTexture, texView, gpuTexture.width, gpuTexture.height, gpuTexture.depthOrArrayLayers, gpuTexture.format, gpuTexture.usage, label ?? gpuTexture.label);
361
+ }
362
+ /**
363
+ * Factory: Allocates cube map texture with 6 equal-width-and-height layers.
364
+ * Primary view stored in .view is configured with dimension "cube" for direct cube
365
+ * sampler access in WGSL. Individual face views can be created with createView().
366
+ * - size: width and height in texels (faces are square).
367
+ * - mipLevelCount: number of mip levels. Default 1.
368
+ */
369
+ static createCube(device, options) {
370
+ const s = Math.max(1, options.size);
371
+ const format = options.format ?? "rgba8unorm";
372
+ const usage = options.usage ??
373
+ (GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST);
374
+ const label = options.label ?? "CubeTexture";
375
+ const mipLevelCount = options.mipLevelCount ?? 1;
376
+ const gpu = resolveDevice(device);
377
+ const native = gpu.createTexture({
378
+ label,
379
+ size: [s, s, 6],
380
+ dimension: "2d",
381
+ format,
382
+ usage,
383
+ mipLevelCount,
384
+ });
385
+ // Cube view for WGSL textureSample(..., textureCube<f32>, ...) sampling.
386
+ const view = native.createView({
387
+ label: `${label}_View`,
388
+ dimension: "cube",
389
+ arrayLayerCount: 6,
390
+ });
391
+ return new Texture(native, view, s, s, 6, format, native.usage, label);
392
+ }
393
+ }
394
+ /**
395
+ * Managed WebGPU hardware sampler.
396
+ */
397
+ export class Sampler {
398
+ native;
399
+ label;
400
+ constructor(native, label = "Sampler") {
401
+ this.native = native;
402
+ this.label = label;
403
+ }
404
+ static create(device, desc = {}) {
405
+ const gpu = resolveDevice(device);
406
+ const native = gpu.createSampler(desc);
407
+ return new Sampler(native, desc.label);
408
+ }
409
+ static createLinear(device, label = "LinearSampler") {
410
+ return Sampler.create(device, {
411
+ label,
412
+ magFilter: "linear",
413
+ minFilter: "linear",
414
+ mipmapFilter: "linear",
415
+ addressModeU: "repeat",
416
+ addressModeV: "repeat",
417
+ addressModeW: "repeat",
418
+ });
419
+ }
420
+ static createNearest(device, label = "NearestSampler") {
421
+ return Sampler.create(device, {
422
+ label,
423
+ magFilter: "nearest",
424
+ minFilter: "nearest",
425
+ addressModeU: "clamp-to-edge",
426
+ addressModeV: "clamp-to-edge",
427
+ addressModeW: "clamp-to-edge",
428
+ });
429
+ }
430
+ static createComparison(device, options = {}) {
431
+ const label = options.label ?? "ComparisonSampler";
432
+ return Sampler.create(device, {
433
+ label,
434
+ compare: options.compare ?? "less",
435
+ magFilter: "linear",
436
+ minFilter: "linear",
437
+ addressModeU: "clamp-to-edge",
438
+ addressModeV: "clamp-to-edge",
439
+ });
440
+ }
441
+ }
442
+ /**
443
+ * Reusable GPU buffer pool for dynamic per-frame allocation with best-fit recycling.
444
+ */
445
+ export class BufferPool {
446
+ _buckets = new Map();
447
+ _inUse = [];
448
+ _availableCount = 0;
449
+ usage;
450
+ label;
451
+ constructor(usage, label = "BufferPool") {
452
+ this.usage = usage;
453
+ this.label = label;
454
+ }
455
+ get totalBuffers() {
456
+ return this._availableCount + this._inUse.length;
457
+ }
458
+ get inUseCount() {
459
+ return this._inUse.length;
460
+ }
461
+ _addToBucket(buf) {
462
+ let bucket = this._buckets.get(buf.size);
463
+ if (!bucket) {
464
+ bucket = [];
465
+ this._buckets.set(buf.size, bucket);
466
+ }
467
+ bucket.push(buf);
468
+ this._availableCount++;
469
+ }
470
+ /**
471
+ * Resets active allocations at start of frame, returning all buffers to available pool.
472
+ */
473
+ reset() {
474
+ const inUse = this._inUse;
475
+ for (let i = 0; i < inUse.length; i++) {
476
+ this._addToBucket(inUse[i]);
477
+ }
478
+ inUse.length = 0;
479
+ }
480
+ /**
481
+ * Acquires buffer with at least requested byte size using bucketed best-fit matching.
482
+ */
483
+ acquire(device, requiredSize) {
484
+ const alignedSize = Math.max(16, Math.ceil(requiredSize / 16) * 16);
485
+ const exactBucket = this._buckets.get(alignedSize);
486
+ if (exactBucket && exactBucket.length > 0) {
487
+ const buf = exactBucket.pop();
488
+ this._availableCount--;
489
+ this._inUse.push(buf);
490
+ return buf;
491
+ }
492
+ let bestSize = -1;
493
+ let bestDiff = Number.POSITIVE_INFINITY;
494
+ for (const [size, bucket] of this._buckets) {
495
+ if (bucket.length > 0 && size >= alignedSize) {
496
+ const diff = size - alignedSize;
497
+ if (diff < bestDiff) {
498
+ bestDiff = diff;
499
+ bestSize = size;
500
+ }
501
+ }
502
+ }
503
+ if (bestSize >= 0) {
504
+ const bucket = this._buckets.get(bestSize);
505
+ const buf = bucket.pop();
506
+ this._availableCount--;
507
+ this._inUse.push(buf);
508
+ return buf;
509
+ }
510
+ const id = this.totalBuffers;
511
+ const newBuf = Buffer.create(device, {
512
+ size: alignedSize,
513
+ usage: this.usage,
514
+ label: `${this.label}_${id}`,
515
+ });
516
+ this._inUse.push(newBuf);
517
+ return newBuf;
518
+ }
519
+ /**
520
+ * Releases an individual buffer back to available pool ahead of frame reset.
521
+ */
522
+ release(buffer) {
523
+ const idx = this._inUse.indexOf(buffer);
524
+ if (idx === -1)
525
+ return false;
526
+ const lastIdx = this._inUse.length - 1;
527
+ this._inUse[idx] = this._inUse[lastIdx];
528
+ this._inUse.pop();
529
+ this._addToBucket(buffer);
530
+ return true;
531
+ }
532
+ destroy() {
533
+ for (const bucket of this._buckets.values()) {
534
+ for (let i = 0; i < bucket.length; i++) {
535
+ bucket[i].destroy();
536
+ }
537
+ bucket.length = 0;
538
+ }
539
+ this._buckets.clear();
540
+ this._availableCount = 0;
541
+ for (let i = 0; i < this._inUse.length; i++) {
542
+ this._inUse[i].destroy();
543
+ }
544
+ this._inUse.length = 0;
545
+ }
546
+ }
547
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../awgpu/memory.ts"],"names":[],"mappings":"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"}