@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,220 @@
1
+ /**
2
+ * GPU buffer wrapper supporting uniform, storage, vertex, and index operations.
3
+ */
4
+ export class Buffer {
5
+ gpuBuffer;
6
+ size;
7
+ usage;
8
+ label;
9
+ gpuOwned;
10
+ constructor(gpuBuffer, size, usage, options = {}) {
11
+ this.gpuBuffer = gpuBuffer;
12
+ this.size = size;
13
+ this.usage = usage;
14
+ this.label = options.label ?? gpuBuffer.label ?? "Buffer";
15
+ this.gpuOwned = options.gpuOwned ?? true;
16
+ }
17
+ /**
18
+ * Uploads fresh data to GPU buffer using queue.writeBuffer.
19
+ */
20
+ write(device, data, bufferOffset = 0) {
21
+ const view = data;
22
+ const byteLength = view.byteLength ?? data.byteLength;
23
+ const buffer = view.buffer ?? data;
24
+ const byteOffset = view.byteOffset ?? 0;
25
+ device.queue.writeBuffer(this.gpuBuffer, bufferOffset, buffer, byteOffset, byteLength);
26
+ }
27
+ destroy() {
28
+ if (this.gpuOwned) {
29
+ this.gpuBuffer.destroy();
30
+ }
31
+ }
32
+ /**
33
+ * Creates raw GPU buffer with optional initial data upload.
34
+ */
35
+ static create(device, options) {
36
+ // Enforce 4-byte alignment
37
+ const alignedSize = Math.max(4, Math.ceil(options.size / 4) * 4);
38
+ const usage = options.usage | (options.data ? GPUBufferUsage.COPY_DST : 0);
39
+ const label = options.label ?? "Buffer";
40
+ const gpuBuffer = device.createBuffer({
41
+ label,
42
+ size: alignedSize,
43
+ usage,
44
+ });
45
+ const buf = new Buffer(gpuBuffer, alignedSize, usage, { label });
46
+ if (options.data) {
47
+ buf.write(device, options.data);
48
+ }
49
+ return buf;
50
+ }
51
+ /**
52
+ * Creates uniform buffer with automatic 16-byte minimum alignment.
53
+ */
54
+ static createUniform(device, sizeOrData, label = "UniformBuffer") {
55
+ const isData = typeof sizeOrData !== "number";
56
+ const rawSize = isData ? sizeOrData.byteLength ?? sizeOrData.byteLength : sizeOrData;
57
+ // Minimum uniform size is 16 bytes, aligned to 16
58
+ const size = Math.max(16, Math.ceil(rawSize / 16) * 16);
59
+ return Buffer.create(device, {
60
+ size,
61
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
62
+ data: isData ? sizeOrData : undefined,
63
+ label,
64
+ });
65
+ }
66
+ /**
67
+ * Creates storage buffer with read-only or read-write usage.
68
+ */
69
+ static createStorage(device, sizeOrData, options = {}) {
70
+ const isData = typeof sizeOrData !== "number";
71
+ const rawSize = isData ? sizeOrData.byteLength ?? sizeOrData.byteLength : sizeOrData;
72
+ const size = Math.max(16, Math.ceil(rawSize / 4) * 4);
73
+ const label = options.label ?? "StorageBuffer";
74
+ return Buffer.create(device, {
75
+ size,
76
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
77
+ data: isData ? sizeOrData : undefined,
78
+ label,
79
+ });
80
+ }
81
+ /**
82
+ * Creates vertex buffer with uploaded vertex data.
83
+ */
84
+ static createVertex(device, dataOrSize, label = "VertexBuffer") {
85
+ const isData = typeof dataOrSize !== "number";
86
+ const rawSize = isData ? dataOrSize.byteLength ?? dataOrSize.byteLength : dataOrSize;
87
+ const size = Math.max(4, Math.ceil(rawSize / 4) * 4);
88
+ return Buffer.create(device, {
89
+ size,
90
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
91
+ data: isData ? dataOrSize : undefined,
92
+ label,
93
+ });
94
+ }
95
+ /**
96
+ * Creates index buffer with uploaded index data.
97
+ */
98
+ static createIndex(device, dataOrSize, label = "IndexBuffer") {
99
+ const isData = typeof dataOrSize !== "number";
100
+ const rawSize = isData ? dataOrSize.byteLength ?? dataOrSize.byteLength : dataOrSize;
101
+ const size = Math.max(4, Math.ceil(rawSize / 4) * 4);
102
+ return Buffer.create(device, {
103
+ size,
104
+ usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
105
+ data: isData ? dataOrSize : undefined,
106
+ label,
107
+ });
108
+ }
109
+ }
110
+ /**
111
+ * Reusable GPU buffer pool for dynamic per-frame allocation without destruction thrashing.
112
+ */
113
+ export class BufferPool {
114
+ _buckets = new Map();
115
+ _inUse = [];
116
+ _availableCount = 0;
117
+ usage;
118
+ label;
119
+ constructor(usage, label = "BufferPool") {
120
+ this.usage = usage;
121
+ this.label = label;
122
+ }
123
+ /** Total number of allocated buffers currently managed by pool. */
124
+ get totalBuffers() {
125
+ return this._availableCount + this._inUse.length;
126
+ }
127
+ /** Number of buffers currently acquired and active in frame. */
128
+ get inUseCount() {
129
+ return this._inUse.length;
130
+ }
131
+ _addToBucket(buf) {
132
+ let bucket = this._buckets.get(buf.size);
133
+ if (!bucket) {
134
+ bucket = [];
135
+ this._buckets.set(buf.size, bucket);
136
+ }
137
+ bucket.push(buf);
138
+ this._availableCount++;
139
+ }
140
+ /**
141
+ * Resets active allocations at start of frame, returning all buffers to available pool.
142
+ */
143
+ reset() {
144
+ const inUse = this._inUse;
145
+ for (let i = 0; i < inUse.length; i++) {
146
+ this._addToBucket(inUse[i]);
147
+ }
148
+ inUse.length = 0;
149
+ }
150
+ /**
151
+ * Acquires buffer with at least requested byte size using bucketed matching from available pool.
152
+ */
153
+ acquire(device, requiredSize) {
154
+ const alignedSize = Math.max(16, Math.ceil(requiredSize / 16) * 16);
155
+ // 1. Fast O(1) exact size lookup
156
+ const exactBucket = this._buckets.get(alignedSize);
157
+ if (exactBucket && exactBucket.length > 0) {
158
+ const buf = exactBucket.pop();
159
+ this._availableCount--;
160
+ this._inUse.push(buf);
161
+ return buf;
162
+ }
163
+ // 2. Best-fit scan over distinct bucket sizes
164
+ let bestSize = -1;
165
+ let bestDiff = Number.POSITIVE_INFINITY;
166
+ for (const [size, bucket] of this._buckets) {
167
+ if (bucket.length > 0 && size >= alignedSize) {
168
+ const diff = size - alignedSize;
169
+ if (diff < bestDiff) {
170
+ bestDiff = diff;
171
+ bestSize = size;
172
+ }
173
+ }
174
+ }
175
+ if (bestSize >= 0) {
176
+ const bucket = this._buckets.get(bestSize);
177
+ const buf = bucket.pop();
178
+ this._availableCount--;
179
+ this._inUse.push(buf);
180
+ return buf;
181
+ }
182
+ // 3. Allocate new buffer
183
+ const id = this.totalBuffers;
184
+ const newBuf = Buffer.create(device, {
185
+ size: alignedSize,
186
+ usage: this.usage,
187
+ label: `${this.label}_${id}`,
188
+ });
189
+ this._inUse.push(newBuf);
190
+ return newBuf;
191
+ }
192
+ /**
193
+ * Releases an individual buffer back to available pool ahead of frame reset.
194
+ */
195
+ release(buffer) {
196
+ const idx = this._inUse.indexOf(buffer);
197
+ if (idx === -1)
198
+ return false;
199
+ const lastIdx = this._inUse.length - 1;
200
+ this._inUse[idx] = this._inUse[lastIdx];
201
+ this._inUse.pop();
202
+ this._addToBucket(buffer);
203
+ return true;
204
+ }
205
+ destroy() {
206
+ for (const bucket of this._buckets.values()) {
207
+ for (const b of bucket) {
208
+ b.destroy();
209
+ }
210
+ bucket.length = 0;
211
+ }
212
+ this._buckets.clear();
213
+ this._availableCount = 0;
214
+ for (const b of this._inUse) {
215
+ b.destroy();
216
+ }
217
+ this._inUse.length = 0;
218
+ }
219
+ }
220
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../awgpu_old/buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { RenderTarget } from "./target.js";
2
+ export interface DeviceOptions {
3
+ /** Target canvas element or selector string. If omitted, device initializes in headless mode. */
4
+ canvas?: string | HTMLCanvasElement | null;
5
+ /** Preferred texture format for canvas presentation; defaults to navigator.gpu.getPreferredCanvasFormat() */
6
+ format?: GPUTextureFormat;
7
+ /** Power preference for adapter selection; defaults to "high-performance" */
8
+ powerPreference?: GPUPowerPreference;
9
+ /** Optional required WebGPU features */
10
+ requiredFeatures?: GPUFeatureName[];
11
+ /** Optional required WebGPU limits */
12
+ requiredLimits?: Record<string, GPUSize64>;
13
+ /** Canvas presentation alpha mode; defaults to "premultiplied" */
14
+ alphaMode?: GPUCanvasAlphaMode;
15
+ /** Label for diagnostic and debugging identification */
16
+ label?: string;
17
+ }
18
+ /**
19
+ * Hardware WebGPU device wrapper managing adapter negotiation, device lifetime,
20
+ * command submission queue, and canvas presentation context.
21
+ */
22
+ export declare class Device {
23
+ readonly adapter: GPUAdapter;
24
+ readonly device: GPUDevice;
25
+ readonly queue: GPUQueue;
26
+ readonly canvas: HTMLCanvasElement | null;
27
+ readonly canvasContext: GPUCanvasContext | null;
28
+ readonly format: GPUTextureFormat;
29
+ readonly label: string;
30
+ constructor(adapter: GPUAdapter, device: GPUDevice, format: GPUTextureFormat, options?: {
31
+ canvas?: HTMLCanvasElement | null;
32
+ canvasContext?: GPUCanvasContext | null;
33
+ label?: string;
34
+ });
35
+ /**
36
+ * Initializes WebGPU device connected to HTML canvas for graphics rendering.
37
+ */
38
+ static create(options?: DeviceOptions): Promise<Device>;
39
+ /**
40
+ * Initializes headless WebGPU device without canvas (for compute passes, tests, or offscreen workers).
41
+ */
42
+ static createHeadless(options?: Omit<DeviceOptions, "canvas">): Promise<Device>;
43
+ /**
44
+ * Creates screen render target bound to device canvas swapchain.
45
+ */
46
+ createScreenTarget(options?: {
47
+ depthFormat?: GPUTextureFormat;
48
+ clearColor?: {
49
+ r: number;
50
+ g: number;
51
+ b: number;
52
+ a: number;
53
+ };
54
+ label?: string;
55
+ }): RenderTarget;
56
+ /**
57
+ * Creates fresh GPUCommandEncoder on device.
58
+ */
59
+ createCommandEncoder(label?: string): GPUCommandEncoder;
60
+ /**
61
+ * Submits command buffers or command encoders to device queue.
62
+ */
63
+ submit(commands: (GPUCommandBuffer | GPUCommandEncoder)[] | GPUCommandBuffer | GPUCommandEncoder): void;
64
+ /**
65
+ * Destroys device resources and unconfigures canvas context.
66
+ */
67
+ destroy(): void;
68
+ }
69
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../awgpu_old/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC1B,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAC3C,6GAA6G;IAC7G,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,kEAAkE;IAClE,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD;;;GAGG;AACH,qBAAa,MAAM;IACf,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAGnB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE;QACL,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAClC,aAAa,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;QACxC,KAAK,CAAC,EAAE,MAAM,CAAC;KACb;IAWV;;OAEG;WACU,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAyCjE;;OAEG;WACU,cAAc,CAAC,OAAO,GAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzF;;OAEG;IACH,kBAAkB,CACd,OAAO,GAAE;QACL,WAAW,CAAC,EAAE,gBAAgB,CAAC;QAC/B,UAAU,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;KACb,GACP,YAAY;IAOf;;OAEG;IACH,oBAAoB,CAAC,KAAK,SAAmB,GAAG,iBAAiB;IAIjE;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,EAAE,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI;IAWvG;;OAEG;IACH,OAAO,IAAI,IAAI;CAUlB"}
@@ -0,0 +1,121 @@
1
+ import { RenderTarget } from "./target.js";
2
+ function resolveCanvas(canvasRef) {
3
+ if (!canvasRef)
4
+ return null;
5
+ if (typeof HTMLCanvasElement !== "undefined" && canvasRef instanceof HTMLCanvasElement)
6
+ return canvasRef;
7
+ if (typeof canvasRef === "string" && typeof document !== "undefined") {
8
+ const found = document.querySelector(canvasRef);
9
+ if (typeof HTMLCanvasElement !== "undefined" && found instanceof HTMLCanvasElement)
10
+ return found;
11
+ }
12
+ return null;
13
+ }
14
+ /**
15
+ * Hardware WebGPU device wrapper managing adapter negotiation, device lifetime,
16
+ * command submission queue, and canvas presentation context.
17
+ */
18
+ export class Device {
19
+ adapter;
20
+ device;
21
+ queue;
22
+ canvas;
23
+ canvasContext;
24
+ format;
25
+ label;
26
+ constructor(adapter, device, format, options = {}) {
27
+ this.adapter = adapter;
28
+ this.device = device;
29
+ this.queue = device.queue;
30
+ this.format = format;
31
+ this.canvas = options.canvas ?? null;
32
+ this.canvasContext = options.canvasContext ?? null;
33
+ this.label = options.label ?? "Device";
34
+ }
35
+ /**
36
+ * Initializes WebGPU device connected to HTML canvas for graphics rendering.
37
+ */
38
+ static async create(options = {}) {
39
+ if (typeof navigator === "undefined" || !navigator.gpu) {
40
+ throw new Error("[Device] WebGPU is not supported or not available in this environment.");
41
+ }
42
+ const canvas = resolveCanvas(options.canvas);
43
+ const powerPreference = options.powerPreference ?? "high-performance";
44
+ const adapter = await navigator.gpu.requestAdapter({ powerPreference });
45
+ if (!adapter) {
46
+ throw new Error("[Device] Failed to acquire WebGPU GPUAdapter.");
47
+ }
48
+ const device = await adapter.requestDevice({
49
+ label: options.label ?? "Device_GPUDevice",
50
+ requiredFeatures: options.requiredFeatures,
51
+ requiredLimits: options.requiredLimits,
52
+ });
53
+ const format = options.format ?? (canvas ? navigator.gpu.getPreferredCanvasFormat() : "rgba8unorm");
54
+ let canvasContext = null;
55
+ if (canvas) {
56
+ canvasContext = canvas.getContext("webgpu");
57
+ if (!canvasContext) {
58
+ throw new Error("[Device] Failed to get WebGPU context from canvas element.");
59
+ }
60
+ canvasContext.configure({
61
+ device,
62
+ format,
63
+ alphaMode: options.alphaMode ?? "premultiplied",
64
+ });
65
+ }
66
+ return new Device(adapter, device, format, {
67
+ canvas,
68
+ canvasContext,
69
+ label: options.label ?? "Device",
70
+ });
71
+ }
72
+ /**
73
+ * Initializes headless WebGPU device without canvas (for compute passes, tests, or offscreen workers).
74
+ */
75
+ static async createHeadless(options = {}) {
76
+ return Device.create({ ...options, canvas: null });
77
+ }
78
+ /**
79
+ * Creates screen render target bound to device canvas swapchain.
80
+ */
81
+ createScreenTarget(options = {}) {
82
+ if (!this.canvas || !this.canvasContext) {
83
+ throw new Error("[Device.createScreenTarget] Cannot create screen target on headless device.");
84
+ }
85
+ return RenderTarget.createScreen(this, options);
86
+ }
87
+ /**
88
+ * Creates fresh GPUCommandEncoder on device.
89
+ */
90
+ createCommandEncoder(label = "CommandEncoder") {
91
+ return this.device.createCommandEncoder({ label });
92
+ }
93
+ /**
94
+ * Submits command buffers or command encoders to device queue.
95
+ */
96
+ submit(commands) {
97
+ const list = Array.isArray(commands) ? commands : [commands];
98
+ const buffers = list.map((c) => {
99
+ if ("finish" in c && typeof c.finish === "function") {
100
+ return c.finish();
101
+ }
102
+ return c;
103
+ });
104
+ this.queue.submit(buffers);
105
+ }
106
+ /**
107
+ * Destroys device resources and unconfigures canvas context.
108
+ */
109
+ destroy() {
110
+ if (this.canvasContext) {
111
+ try {
112
+ this.canvasContext.unconfigure?.();
113
+ }
114
+ catch {
115
+ // Ignore if unconfigure is unsupported in current browser
116
+ }
117
+ }
118
+ this.device.destroy();
119
+ }
120
+ }
121
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../awgpu_old/device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Pass, ComputePass } from "./pass.js";
2
+ import type { Device } from "./device.js";
3
+ /**
4
+ * Top-level multi-pass frame orchestrator.
5
+ * Sequences render and compute passes and submits recorded GPU commands to hardware queue.
6
+ */
7
+ export declare class Frame {
8
+ readonly passes: (Pass | ComputePass)[];
9
+ addPass(pass: Pass | ComputePass): this;
10
+ clear(): void;
11
+ /**
12
+ * Executes recorded passes in order and submits command buffer to device queue.
13
+ * Accepts either raw GPUDevice or Device instance.
14
+ */
15
+ execute(deviceOrGfx: GPUDevice | Device, label?: string): void;
16
+ }
17
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../awgpu_old/frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,qBAAa,KAAK;IACd,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,WAAW,CAAC,EAAE,CAAM;IAE7C,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,IAAI;IAKvC,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,EAAE,KAAK,SAAU,GAAG,IAAI;CAalE"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Top-level multi-pass frame orchestrator.
3
+ * Sequences render and compute passes and submits recorded GPU commands to hardware queue.
4
+ */
5
+ export class Frame {
6
+ passes = [];
7
+ addPass(pass) {
8
+ this.passes.push(pass);
9
+ return this;
10
+ }
11
+ clear() {
12
+ this.passes.length = 0;
13
+ }
14
+ /**
15
+ * Executes recorded passes in order and submits command buffer to device queue.
16
+ * Accepts either raw GPUDevice or Device instance.
17
+ */
18
+ execute(deviceOrGfx, label = "Frame") {
19
+ const device = "device" in deviceOrGfx ? deviceOrGfx.device : deviceOrGfx;
20
+ const queue = "queue" in deviceOrGfx ? deviceOrGfx.queue : device.queue;
21
+ const encoder = device.createCommandEncoder({ label: `${label}_CommandEncoder` });
22
+ for (let i = 0; i < this.passes.length; i++) {
23
+ this.passes[i].execute(encoder);
24
+ }
25
+ const commandBuffer = encoder.finish({ label: `${label}_CommandBuffer` });
26
+ queue.submit([commandBuffer]);
27
+ }
28
+ }
29
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../awgpu_old/frame.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,KAAK;IACL,MAAM,GAA2B,EAAE,CAAC;IAE7C,OAAO,CAAC,IAAwB;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,WAA+B,EAAE,KAAK,GAAG,OAAO;QACpD,MAAM,MAAM,GAAG,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;QAC1E,MAAM,KAAK,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAExE,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,iBAAiB,EAAE,CAAC,CAAC;QAElF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,gBAAgB,EAAE,CAAC,CAAC;QAC1E,KAAK,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAClC,CAAC;CACJ"}
@@ -0,0 +1,8 @@
1
+ export { Device, type DeviceOptions, } from "./device.js";
2
+ export { Texture, Sampler, RenderTarget, type ColorAttachmentConfig, type DepthAttachmentConfig, } from "./target.js";
3
+ export { Buffer, BufferPool, type BufferData, } from "./buffer.js";
4
+ export { BindSlot, BindGroupLayoutBuilder, BindGroup, type BindingEntry, type ResourceBinding, } from "./layout.js";
5
+ export { createVertexLayout, RenderPipeline, ComputePipeline, type VertexAttributeDesc, type RenderPipelineDescriptor, type ShaderMessage, } from "./pipeline.js";
6
+ export { Pass, ComputePass, type DrawCommand, type ComputeCommand, type DynamicOffsets, } from "./pass.js";
7
+ export { Frame, } from "./frame.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../awgpu_old/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,MAAM,EACN,KAAK,aAAa,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACH,OAAO,EACP,OAAO,EACP,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC7B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACH,MAAM,EACN,UAAU,EACV,KAAK,UAAU,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACH,QAAQ,EACR,sBAAsB,EACtB,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,eAAe,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACH,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACH,IAAI,EACJ,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,GACtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACH,KAAK,GACR,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ // ================================================================
2
+ // Awgpu - Domain-Agnostic WebGPU Hardware Execution Engine
3
+ // ================================================================
4
+ // 1. Hardware Device & Canvas Presentation
5
+ export { Device, } from "./device.js";
6
+ // 2. Targets, Textures & Samplers
7
+ export { Texture, Sampler, RenderTarget, } from "./target.js";
8
+ // 3. Buffers & Memory Pools
9
+ export { Buffer, BufferPool, } from "./buffer.js";
10
+ // 4. Layouts & Bind Group Frequency Slots
11
+ export { BindSlot, BindGroupLayoutBuilder, BindGroup, } from "./layout.js";
12
+ // 5. Pipelines & Shader Modules
13
+ export { createVertexLayout, RenderPipeline, ComputePipeline, } from "./pipeline.js";
14
+ // 6. Passes & Command Batches
15
+ export { Pass, ComputePass, } from "./pass.js";
16
+ // 7. Frame Orchestration
17
+ export { Frame, } from "./frame.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../awgpu_old/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,4DAA4D;AAC5D,mEAAmE;AAEnE,2CAA2C;AAC3C,OAAO,EACH,MAAM,GAET,MAAM,aAAa,CAAC;AAErB,kCAAkC;AAClC,OAAO,EACH,OAAO,EACP,OAAO,EACP,YAAY,GAGf,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EACH,MAAM,EACN,UAAU,GAEb,MAAM,aAAa,CAAC;AAErB,0CAA0C;AAC1C,OAAO,EACH,QAAQ,EACR,sBAAsB,EACtB,SAAS,GAGZ,MAAM,aAAa,CAAC;AAErB,gCAAgC;AAChC,OAAO,EACH,kBAAkB,EAClB,cAAc,EACd,eAAe,GAIlB,MAAM,eAAe,CAAC;AAEvB,8BAA8B;AAC9B,OAAO,EACH,IAAI,EACJ,WAAW,GAId,MAAM,WAAW,CAAC;AAEnB,yBAAyB;AACzB,OAAO,EACH,KAAK,GACR,MAAM,YAAY,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { Buffer } from "./buffer.js";
2
+ import type { Texture, Sampler } from "./target.js";
3
+ /**
4
+ * Standardized 4-tier WebGPU bind group frequency slots.
5
+ */
6
+ export declare enum BindSlot {
7
+ Pass = 0,// Updated once per pass (ViewProj, Viewport, Time, Globals)
8
+ Phase = 1,// Updated once per phase (Environment maps, global phase buffers, phase textures)
9
+ Material = 2,// Updated per material switch (Material parameters, Color/Normal textures, Standard samplers)
10
+ Instance = 3
11
+ }
12
+ /**
13
+ * Fluent builder for creating GPUBindGroupLayout descriptors.
14
+ */
15
+ export declare class BindGroupLayoutBuilder {
16
+ private entries;
17
+ addUniform(binding: number, visibility?: GPUShaderStageFlags, options?: {
18
+ hasDynamicOffset?: boolean;
19
+ minBindingSize?: number;
20
+ }): this;
21
+ addStorage(binding: number, visibility?: GPUShaderStageFlags, options?: {
22
+ readOnly?: boolean;
23
+ hasDynamicOffset?: boolean;
24
+ minBindingSize?: number;
25
+ }): this;
26
+ addTexture(binding: number, visibility?: GPUShaderStageFlags, options?: {
27
+ sampleType?: GPUTextureSampleType;
28
+ viewDimension?: GPUTextureViewDimension;
29
+ multisampled?: boolean;
30
+ }): this;
31
+ addStorageTexture(binding: number, format: GPUTextureFormat, visibility?: GPUShaderStageFlags, options?: {
32
+ access?: GPUStorageTextureAccess;
33
+ viewDimension?: GPUTextureViewDimension;
34
+ }): this;
35
+ addDepthTexture(binding: number, visibility?: GPUShaderStageFlags, options?: {
36
+ viewDimension?: GPUTextureViewDimension;
37
+ multisampled?: boolean;
38
+ }): this;
39
+ addSampler(binding: number, visibility?: GPUShaderStageFlags, optionsOrType?: GPUSamplerBindingType | {
40
+ comparison?: boolean;
41
+ }): this;
42
+ build(device: GPUDevice, label?: string): GPUBindGroupLayout;
43
+ }
44
+ export type ResourceBinding = GPUBufferBinding | GPUTextureView | GPUSampler | Buffer | Texture | Sampler;
45
+ export interface BindingEntry {
46
+ binding: number;
47
+ resource: ResourceBinding;
48
+ }
49
+ /**
50
+ * GPU bind group wrapper tracking slot index and layout.
51
+ */
52
+ export declare class BindGroup {
53
+ readonly gpuBindGroup: GPUBindGroup;
54
+ readonly layout: GPUBindGroupLayout;
55
+ readonly slot: number;
56
+ readonly label: string;
57
+ constructor(gpuBindGroup: GPUBindGroup, layout: GPUBindGroupLayout, slot?: number, label?: string);
58
+ /**
59
+ * Resolves resource wrappers into native GPUBindingResource descriptors.
60
+ */
61
+ static resolveResource(res: ResourceBinding): GPUBindingResource;
62
+ /**
63
+ * Factory: Creates GPUBindGroup from typed entries.
64
+ */
65
+ static create(device: GPUDevice, layout: GPUBindGroupLayout, entries: BindingEntry[], options?: {
66
+ slot?: number;
67
+ label?: string;
68
+ }): BindGroup;
69
+ }
70
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../awgpu_old/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,oBAAY,QAAQ;IAChB,IAAI,IAAI,CAAQ,4DAA4D;IAC5E,KAAK,IAAI,CAAO,kFAAkF;IAClG,QAAQ,IAAI,CAAI,8FAA8F;IAC9G,QAAQ,IAAI;CACf;AAED;;GAEG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,OAAO,CAAiC;IAEhD,UAAU,CACN,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,mBAAqE,EACjF,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GACtE,IAAI;IAaP,UAAU,CACN,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,mBAAoE,EAChF,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GAC1F,IAAI;IAcP,UAAU,CACN,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,mBAA6C,EACzD,OAAO,GAAE;QACL,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAClC,aAAa,CAAC,EAAE,uBAAuB,CAAC;QACxC,YAAY,CAAC,EAAE,OAAO,CAAC;KACrB,GACP,IAAI;IAaP,iBAAiB,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,gBAAgB,EACxB,UAAU,GAAE,mBAA4C,EACxD,OAAO,GAAE;QACL,MAAM,CAAC,EAAE,uBAAuB,CAAC;QACjC,aAAa,CAAC,EAAE,uBAAuB,CAAC;KACtC,GACP,IAAI;IAaP,eAAe,CACX,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,mBAA6C,EACzD,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,uBAAuB,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO,GAClF,IAAI;IAQP,UAAU,CACN,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,mBAA6C,EACzD,aAAa,GAAE,qBAAqB,GAAG;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAgB,GAC9E,IAAI;IAaP,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,SAAoB,GAAG,kBAAkB;CAM1E;AAED,MAAM,MAAM,eAAe,GACrB,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAEd,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,SAAS;IAClB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAGnB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,IAAI,GAAE,MAAsB,EAC5B,KAAK,SAAc;IAQvB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB;IAahE;;OAEG;IACH,MAAM,CAAC,MAAM,CACT,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,SAAS;CAiBf"}