aigpu 0.3.1

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 (491) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +85 -0
  3. package/bin/aigpu.js +15 -0
  4. package/client.d.ts +15 -0
  5. package/dist/agent-tools.d.ts +61 -0
  6. package/dist/agent-tools.d.ts.map +1 -0
  7. package/dist/agent-tools.js +107 -0
  8. package/dist/agent-tools.js.map +1 -0
  9. package/dist/agent.d.ts +56 -0
  10. package/dist/agent.d.ts.map +1 -0
  11. package/dist/agent.js +243 -0
  12. package/dist/agent.js.map +1 -0
  13. package/dist/api-types.d.ts +56 -0
  14. package/dist/api-types.d.ts.map +1 -0
  15. package/dist/api-types.js +2 -0
  16. package/dist/api-types.js.map +1 -0
  17. package/dist/bind-cache.d.ts +19 -0
  18. package/dist/bind-cache.d.ts.map +1 -0
  19. package/dist/bind-cache.js +43 -0
  20. package/dist/bind-cache.js.map +1 -0
  21. package/dist/bundle.d.ts +30 -0
  22. package/dist/bundle.d.ts.map +1 -0
  23. package/dist/bundle.js +127 -0
  24. package/dist/bundle.js.map +1 -0
  25. package/dist/claim-validation-encode.d.ts +14 -0
  26. package/dist/claim-validation-encode.d.ts.map +1 -0
  27. package/dist/claim-validation-encode.js +28 -0
  28. package/dist/claim-validation-encode.js.map +1 -0
  29. package/dist/claim-validation.d.ts +73 -0
  30. package/dist/claim-validation.d.ts.map +1 -0
  31. package/dist/claim-validation.js +135 -0
  32. package/dist/claim-validation.js.map +1 -0
  33. package/dist/cli/bin/aigpu.js +101 -0
  34. package/dist/cli/lib/check/run.js +153 -0
  35. package/dist/cli/lib/docs/commands/cat.js +12 -0
  36. package/dist/cli/lib/docs/commands/find.js +180 -0
  37. package/dist/cli/lib/docs/commands/grep.js +49 -0
  38. package/dist/cli/lib/docs/commands/ls.js +41 -0
  39. package/dist/cli/lib/docs/commands/path.js +12 -0
  40. package/dist/cli/lib/docs/commands/resolve.js +41 -0
  41. package/dist/cli/lib/docs/commands/shared.js +13 -0
  42. package/dist/cli/lib/docs/commands/symbols.js +25 -0
  43. package/dist/cli/lib/docs/errors.js +8 -0
  44. package/dist/cli/lib/docs/generate/check-drift.js +61 -0
  45. package/dist/cli/lib/docs/generate/cli.js +12 -0
  46. package/dist/cli/lib/docs/generate/generate.js +113 -0
  47. package/dist/cli/lib/docs/generate/manifest.js +218 -0
  48. package/dist/cli/lib/docs/generate/skill.js +150 -0
  49. package/dist/cli/lib/docs/help.js +21 -0
  50. package/dist/cli/lib/docs/index.js +62 -0
  51. package/dist/cli/lib/docs/model.js +7 -0
  52. package/dist/cli/lib/docs/run.js +24 -0
  53. package/dist/cli/lib/docs/service.js +119 -0
  54. package/dist/cli/lib/doctor/run.js +236 -0
  55. package/dist/cli/lib/examples/errors.js +13 -0
  56. package/dist/cli/lib/examples/hashing.js +9 -0
  57. package/dist/cli/lib/examples/help.js +13 -0
  58. package/dist/cli/lib/examples/local-source.js +142 -0
  59. package/dist/cli/lib/examples/paths.js +12 -0
  60. package/dist/cli/lib/examples/pull.js +58 -0
  61. package/dist/cli/lib/examples/run.js +71 -0
  62. package/dist/cli/lib/examples/search.js +6 -0
  63. package/dist/cli/lib/examples/service.js +118 -0
  64. package/dist/cli/lib/generated/docs-manifest.generated.js +4758 -0
  65. package/dist/cli/lib/install-dawn/run.js +24 -0
  66. package/dist/cli/lib/install-software-renderer/run.js +17 -0
  67. package/dist/cli/lib/mcp/http.js +93 -0
  68. package/dist/cli/lib/mcp/server.js +258 -0
  69. package/dist/cli/lib/mcp/stdio.js +34 -0
  70. package/dist/cli/lib/snapshot/png.js +62 -0
  71. package/dist/cli/lib/snapshot/render.js +22 -0
  72. package/dist/cli/lib/snapshot/run.js +79 -0
  73. package/dist/cli/lib/snapshot/shaders.js +11 -0
  74. package/dist/cli/package.json +4 -0
  75. package/dist/client.d.ts +12 -0
  76. package/dist/client.d.ts.map +1 -0
  77. package/dist/client.js +2 -0
  78. package/dist/client.js.map +1 -0
  79. package/dist/clock.d.ts +26 -0
  80. package/dist/clock.d.ts.map +1 -0
  81. package/dist/clock.js +50 -0
  82. package/dist/clock.js.map +1 -0
  83. package/dist/compute.d.ts +41 -0
  84. package/dist/compute.d.ts.map +1 -0
  85. package/dist/compute.js +132 -0
  86. package/dist/compute.js.map +1 -0
  87. package/dist/core/render-bundle.d.ts +30 -0
  88. package/dist/core/render-bundle.d.ts.map +1 -0
  89. package/dist/core/render-bundle.js +39 -0
  90. package/dist/core/render-bundle.js.map +1 -0
  91. package/dist/core/storage-buffer.d.ts +81 -0
  92. package/dist/core/storage-buffer.d.ts.map +1 -0
  93. package/dist/core/storage-buffer.js +91 -0
  94. package/dist/core/storage-buffer.js.map +1 -0
  95. package/dist/core/structured-uniform.d.ts +33 -0
  96. package/dist/core/structured-uniform.d.ts.map +1 -0
  97. package/dist/core/structured-uniform.js +110 -0
  98. package/dist/core/structured-uniform.js.map +1 -0
  99. package/dist/core/uniform-pool-internals.d.ts +12 -0
  100. package/dist/core/uniform-pool-internals.d.ts.map +1 -0
  101. package/dist/core/uniform-pool-internals.js +24 -0
  102. package/dist/core/uniform-pool-internals.js.map +1 -0
  103. package/dist/core/uniform-pool-types.d.ts +22 -0
  104. package/dist/core/uniform-pool-types.d.ts.map +1 -0
  105. package/dist/core/uniform-pool-types.js +2 -0
  106. package/dist/core/uniform-pool-types.js.map +1 -0
  107. package/dist/core/uniform-pool.d.ts +22 -0
  108. package/dist/core/uniform-pool.d.ts.map +1 -0
  109. package/dist/core/uniform-pool.js +128 -0
  110. package/dist/core/uniform-pool.js.map +1 -0
  111. package/dist/core/uniform.d.ts +55 -0
  112. package/dist/core/uniform.d.ts.map +1 -0
  113. package/dist/core/uniform.js +64 -0
  114. package/dist/core/uniform.js.map +1 -0
  115. package/dist/core/wgsl-alignment.d.ts +24 -0
  116. package/dist/core/wgsl-alignment.d.ts.map +1 -0
  117. package/dist/core/wgsl-alignment.js +81 -0
  118. package/dist/core/wgsl-alignment.js.map +1 -0
  119. package/dist/core.d.ts +13 -0
  120. package/dist/core.d.ts.map +1 -0
  121. package/dist/core.js +7 -0
  122. package/dist/core.js.map +1 -0
  123. package/dist/dom.d.ts +37 -0
  124. package/dist/dom.d.ts.map +1 -0
  125. package/dist/dom.js +81 -0
  126. package/dist/dom.js.map +1 -0
  127. package/dist/draw-protocols.d.ts +36 -0
  128. package/dist/draw-protocols.d.ts.map +1 -0
  129. package/dist/draw-protocols.js +10 -0
  130. package/dist/draw-protocols.js.map +1 -0
  131. package/dist/draw.d.ts +248 -0
  132. package/dist/draw.d.ts.map +1 -0
  133. package/dist/draw.js +890 -0
  134. package/dist/draw.js.map +1 -0
  135. package/dist/effect.d.ts +53 -0
  136. package/dist/effect.d.ts.map +1 -0
  137. package/dist/effect.js +75 -0
  138. package/dist/effect.js.map +1 -0
  139. package/dist/entry-metadata.d.ts +16 -0
  140. package/dist/entry-metadata.d.ts.map +1 -0
  141. package/dist/entry-metadata.js +27 -0
  142. package/dist/entry-metadata.js.map +1 -0
  143. package/dist/errors.d.ts +96 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +616 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/frame-protocols.d.ts +107 -0
  148. package/dist/frame-protocols.d.ts.map +1 -0
  149. package/dist/frame-protocols.js +20 -0
  150. package/dist/frame-protocols.js.map +1 -0
  151. package/dist/frame-state.d.ts +32 -0
  152. package/dist/frame-state.d.ts.map +1 -0
  153. package/dist/frame-state.js +62 -0
  154. package/dist/frame-state.js.map +1 -0
  155. package/dist/frame.d.ts +127 -0
  156. package/dist/frame.d.ts.map +1 -0
  157. package/dist/frame.js +645 -0
  158. package/dist/frame.js.map +1 -0
  159. package/dist/group-claim.d.ts +9 -0
  160. package/dist/group-claim.d.ts.map +1 -0
  161. package/dist/group-claim.js +7 -0
  162. package/dist/group-claim.js.map +1 -0
  163. package/dist/index.d.ts +41 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +27 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/indirect.d.ts +39 -0
  168. package/dist/indirect.d.ts.map +1 -0
  169. package/dist/indirect.js +61 -0
  170. package/dist/indirect.js.map +1 -0
  171. package/dist/init-from-device.d.ts +11 -0
  172. package/dist/init-from-device.d.ts.map +1 -0
  173. package/dist/init-from-device.js +56 -0
  174. package/dist/init-from-device.js.map +1 -0
  175. package/dist/init.d.ts +12 -0
  176. package/dist/init.d.ts.map +1 -0
  177. package/dist/init.js +7 -0
  178. package/dist/init.js.map +1 -0
  179. package/dist/kernel.d.ts +104 -0
  180. package/dist/kernel.d.ts.map +1 -0
  181. package/dist/kernel.js +151 -0
  182. package/dist/kernel.js.map +1 -0
  183. package/dist/lifecycle.d.ts +10 -0
  184. package/dist/lifecycle.d.ts.map +1 -0
  185. package/dist/lifecycle.js +21 -0
  186. package/dist/lifecycle.js.map +1 -0
  187. package/dist/live-kernel.d.ts +48 -0
  188. package/dist/live-kernel.d.ts.map +1 -0
  189. package/dist/live-kernel.js +67 -0
  190. package/dist/live-kernel.js.map +1 -0
  191. package/dist/mock.d.ts +42 -0
  192. package/dist/mock.d.ts.map +1 -0
  193. package/dist/mock.js +29 -0
  194. package/dist/mock.js.map +1 -0
  195. package/dist/node.d.ts +48 -0
  196. package/dist/node.d.ts.map +1 -0
  197. package/dist/node.js +36 -0
  198. package/dist/node.js.map +1 -0
  199. package/dist/ping-pong.d.ts +19 -0
  200. package/dist/ping-pong.d.ts.map +1 -0
  201. package/dist/ping-pong.js +67 -0
  202. package/dist/ping-pong.js.map +1 -0
  203. package/dist/pipeline-store.d.ts +89 -0
  204. package/dist/pipeline-store.d.ts.map +1 -0
  205. package/dist/pipeline-store.js +366 -0
  206. package/dist/pipeline-store.js.map +1 -0
  207. package/dist/query-ring.d.ts +91 -0
  208. package/dist/query-ring.d.ts.map +1 -0
  209. package/dist/query-ring.js +178 -0
  210. package/dist/query-ring.js.map +1 -0
  211. package/dist/render-service.d.ts +23 -0
  212. package/dist/render-service.d.ts.map +1 -0
  213. package/dist/render-service.js +37 -0
  214. package/dist/render-service.js.map +1 -0
  215. package/dist/sampler.d.ts +19 -0
  216. package/dist/sampler.d.ts.map +1 -0
  217. package/dist/sampler.js +46 -0
  218. package/dist/sampler.js.map +1 -0
  219. package/dist/scene/camera.d.ts +91 -0
  220. package/dist/scene/camera.d.ts.map +1 -0
  221. package/dist/scene/camera.js +221 -0
  222. package/dist/scene/camera.js.map +1 -0
  223. package/dist/scene/geometries.d.ts +26 -0
  224. package/dist/scene/geometries.d.ts.map +1 -0
  225. package/dist/scene/geometries.js +26 -0
  226. package/dist/scene/geometries.js.map +1 -0
  227. package/dist/scene/geometry-descriptor.d.ts +120 -0
  228. package/dist/scene/geometry-descriptor.d.ts.map +1 -0
  229. package/dist/scene/geometry-descriptor.js +378 -0
  230. package/dist/scene/geometry-descriptor.js.map +1 -0
  231. package/dist/scene/geometry-recipe.d.ts +41 -0
  232. package/dist/scene/geometry-recipe.d.ts.map +1 -0
  233. package/dist/scene/geometry-recipe.js +40 -0
  234. package/dist/scene/geometry-recipe.js.map +1 -0
  235. package/dist/scene/geometry-src/camera-math.d.ts +6 -0
  236. package/dist/scene/geometry-src/camera-math.d.ts.map +1 -0
  237. package/dist/scene/geometry-src/camera-math.js +47 -0
  238. package/dist/scene/geometry-src/camera-math.js.map +1 -0
  239. package/dist/scene/geometry-src/camera.d.ts +10 -0
  240. package/dist/scene/geometry-src/camera.d.ts.map +1 -0
  241. package/dist/scene/geometry-src/camera.js +2 -0
  242. package/dist/scene/geometry-src/camera.js.map +1 -0
  243. package/dist/scene/geometry-src/capsule-data.d.ts +10 -0
  244. package/dist/scene/geometry-src/capsule-data.d.ts.map +1 -0
  245. package/dist/scene/geometry-src/capsule-data.js +61 -0
  246. package/dist/scene/geometry-src/capsule-data.js.map +1 -0
  247. package/dist/scene/geometry-src/cone-data.d.ts +13 -0
  248. package/dist/scene/geometry-src/cone-data.d.ts.map +1 -0
  249. package/dist/scene/geometry-src/cone-data.js +52 -0
  250. package/dist/scene/geometry-src/cone-data.js.map +1 -0
  251. package/dist/scene/geometry-src/cylinder-data.d.ts +14 -0
  252. package/dist/scene/geometry-src/cylinder-data.d.ts.map +1 -0
  253. package/dist/scene/geometry-src/cylinder-data.js +58 -0
  254. package/dist/scene/geometry-src/cylinder-data.js.map +1 -0
  255. package/dist/scene/geometry-src/deg-to-rad.d.ts +2 -0
  256. package/dist/scene/geometry-src/deg-to-rad.d.ts.map +1 -0
  257. package/dist/scene/geometry-src/deg-to-rad.js +4 -0
  258. package/dist/scene/geometry-src/deg-to-rad.js.map +1 -0
  259. package/dist/scene/geometry-src/disk-data.d.ts +12 -0
  260. package/dist/scene/geometry-src/disk-data.d.ts.map +1 -0
  261. package/dist/scene/geometry-src/disk-data.js +21 -0
  262. package/dist/scene/geometry-src/disk-data.js.map +1 -0
  263. package/dist/scene/geometry-src/errors.d.ts +3 -0
  264. package/dist/scene/geometry-src/errors.d.ts.map +1 -0
  265. package/dist/scene/geometry-src/errors.js +5 -0
  266. package/dist/scene/geometry-src/errors.js.map +1 -0
  267. package/dist/scene/geometry-src/icosphere-data.d.ts +8 -0
  268. package/dist/scene/geometry-src/icosphere-data.d.ts.map +1 -0
  269. package/dist/scene/geometry-src/icosphere-data.js +58 -0
  270. package/dist/scene/geometry-src/icosphere-data.js.map +1 -0
  271. package/dist/scene/geometry-src/index.d.ts +36 -0
  272. package/dist/scene/geometry-src/index.d.ts.map +1 -0
  273. package/dist/scene/geometry-src/index.js +21 -0
  274. package/dist/scene/geometry-src/index.js.map +1 -0
  275. package/dist/scene/geometry-src/mesh-box.d.ts +8 -0
  276. package/dist/scene/geometry-src/mesh-box.d.ts.map +1 -0
  277. package/dist/scene/geometry-src/mesh-box.js +57 -0
  278. package/dist/scene/geometry-src/mesh-box.js.map +1 -0
  279. package/dist/scene/geometry-src/mesh-cache.d.ts +4 -0
  280. package/dist/scene/geometry-src/mesh-cache.d.ts.map +1 -0
  281. package/dist/scene/geometry-src/mesh-cache.js +14 -0
  282. package/dist/scene/geometry-src/mesh-cache.js.map +1 -0
  283. package/dist/scene/geometry-src/mesh-capsule.d.ts +14 -0
  284. package/dist/scene/geometry-src/mesh-capsule.d.ts.map +1 -0
  285. package/dist/scene/geometry-src/mesh-capsule.js +52 -0
  286. package/dist/scene/geometry-src/mesh-capsule.js.map +1 -0
  287. package/dist/scene/geometry-src/mesh-cone.d.ts +16 -0
  288. package/dist/scene/geometry-src/mesh-cone.d.ts.map +1 -0
  289. package/dist/scene/geometry-src/mesh-cone.js +54 -0
  290. package/dist/scene/geometry-src/mesh-cone.js.map +1 -0
  291. package/dist/scene/geometry-src/mesh-cylinder.d.ts +18 -0
  292. package/dist/scene/geometry-src/mesh-cylinder.d.ts.map +1 -0
  293. package/dist/scene/geometry-src/mesh-cylinder.js +67 -0
  294. package/dist/scene/geometry-src/mesh-cylinder.js.map +1 -0
  295. package/dist/scene/geometry-src/mesh-disk.d.ts +11 -0
  296. package/dist/scene/geometry-src/mesh-disk.d.ts.map +1 -0
  297. package/dist/scene/geometry-src/mesh-disk.js +45 -0
  298. package/dist/scene/geometry-src/mesh-disk.js.map +1 -0
  299. package/dist/scene/geometry-src/mesh-dodecahedron.d.ts +4 -0
  300. package/dist/scene/geometry-src/mesh-dodecahedron.d.ts.map +1 -0
  301. package/dist/scene/geometry-src/mesh-dodecahedron.js +10 -0
  302. package/dist/scene/geometry-src/mesh-dodecahedron.js.map +1 -0
  303. package/dist/scene/geometry-src/mesh-fullscreen-quad.d.ts +7 -0
  304. package/dist/scene/geometry-src/mesh-fullscreen-quad.d.ts.map +1 -0
  305. package/dist/scene/geometry-src/mesh-fullscreen-quad.js +39 -0
  306. package/dist/scene/geometry-src/mesh-fullscreen-quad.js.map +1 -0
  307. package/dist/scene/geometry-src/mesh-icosahedron.d.ts +4 -0
  308. package/dist/scene/geometry-src/mesh-icosahedron.d.ts.map +1 -0
  309. package/dist/scene/geometry-src/mesh-icosahedron.js +10 -0
  310. package/dist/scene/geometry-src/mesh-icosahedron.js.map +1 -0
  311. package/dist/scene/geometry-src/mesh-icosphere.d.ts +11 -0
  312. package/dist/scene/geometry-src/mesh-icosphere.d.ts.map +1 -0
  313. package/dist/scene/geometry-src/mesh-icosphere.js +47 -0
  314. package/dist/scene/geometry-src/mesh-icosphere.js.map +1 -0
  315. package/dist/scene/geometry-src/mesh-octahedron.d.ts +4 -0
  316. package/dist/scene/geometry-src/mesh-octahedron.d.ts.map +1 -0
  317. package/dist/scene/geometry-src/mesh-octahedron.js +10 -0
  318. package/dist/scene/geometry-src/mesh-octahedron.js.map +1 -0
  319. package/dist/scene/geometry-src/mesh-plane.d.ts +13 -0
  320. package/dist/scene/geometry-src/mesh-plane.d.ts.map +1 -0
  321. package/dist/scene/geometry-src/mesh-plane.js +51 -0
  322. package/dist/scene/geometry-src/mesh-plane.js.map +1 -0
  323. package/dist/scene/geometry-src/mesh-ring.d.ts +12 -0
  324. package/dist/scene/geometry-src/mesh-ring.d.ts.map +1 -0
  325. package/dist/scene/geometry-src/mesh-ring.js +47 -0
  326. package/dist/scene/geometry-src/mesh-ring.js.map +1 -0
  327. package/dist/scene/geometry-src/mesh-sphere.d.ts +10 -0
  328. package/dist/scene/geometry-src/mesh-sphere.d.ts.map +1 -0
  329. package/dist/scene/geometry-src/mesh-sphere.js +51 -0
  330. package/dist/scene/geometry-src/mesh-sphere.js.map +1 -0
  331. package/dist/scene/geometry-src/mesh-tetrahedron.d.ts +5 -0
  332. package/dist/scene/geometry-src/mesh-tetrahedron.d.ts.map +1 -0
  333. package/dist/scene/geometry-src/mesh-tetrahedron.js +10 -0
  334. package/dist/scene/geometry-src/mesh-tetrahedron.js.map +1 -0
  335. package/dist/scene/geometry-src/mesh-torus.d.ts +17 -0
  336. package/dist/scene/geometry-src/mesh-torus.d.ts.map +1 -0
  337. package/dist/scene/geometry-src/mesh-torus.js +56 -0
  338. package/dist/scene/geometry-src/mesh-torus.js.map +1 -0
  339. package/dist/scene/geometry-src/mesh-types.d.ts +38 -0
  340. package/dist/scene/geometry-src/mesh-types.d.ts.map +1 -0
  341. package/dist/scene/geometry-src/mesh-types.js +2 -0
  342. package/dist/scene/geometry-src/mesh-types.js.map +1 -0
  343. package/dist/scene/geometry-src/mesh.d.ts +61 -0
  344. package/dist/scene/geometry-src/mesh.d.ts.map +1 -0
  345. package/dist/scene/geometry-src/mesh.js +49 -0
  346. package/dist/scene/geometry-src/mesh.js.map +1 -0
  347. package/dist/scene/geometry-src/orthographic-camera.d.ts +14 -0
  348. package/dist/scene/geometry-src/orthographic-camera.d.ts.map +1 -0
  349. package/dist/scene/geometry-src/orthographic-camera.js +9 -0
  350. package/dist/scene/geometry-src/orthographic-camera.js.map +1 -0
  351. package/dist/scene/geometry-src/perspective-camera.d.ts +12 -0
  352. package/dist/scene/geometry-src/perspective-camera.d.ts.map +1 -0
  353. package/dist/scene/geometry-src/perspective-camera.js +9 -0
  354. package/dist/scene/geometry-src/perspective-camera.js.map +1 -0
  355. package/dist/scene/geometry-src/plane-data.d.ts +12 -0
  356. package/dist/scene/geometry-src/plane-data.d.ts.map +1 -0
  357. package/dist/scene/geometry-src/plane-data.js +25 -0
  358. package/dist/scene/geometry-src/plane-data.js.map +1 -0
  359. package/dist/scene/geometry-src/polyhedron-data.d.ts +7 -0
  360. package/dist/scene/geometry-src/polyhedron-data.d.ts.map +1 -0
  361. package/dist/scene/geometry-src/polyhedron-data.js +42 -0
  362. package/dist/scene/geometry-src/polyhedron-data.js.map +1 -0
  363. package/dist/scene/geometry-src/polyhedron-mesh.d.ts +10 -0
  364. package/dist/scene/geometry-src/polyhedron-mesh.d.ts.map +1 -0
  365. package/dist/scene/geometry-src/polyhedron-mesh.js +37 -0
  366. package/dist/scene/geometry-src/polyhedron-mesh.js.map +1 -0
  367. package/dist/scene/geometry-src/polyhedron-seeds.d.ts +6 -0
  368. package/dist/scene/geometry-src/polyhedron-seeds.d.ts.map +1 -0
  369. package/dist/scene/geometry-src/polyhedron-seeds.js +51 -0
  370. package/dist/scene/geometry-src/polyhedron-seeds.js.map +1 -0
  371. package/dist/scene/geometry-src/primitive-data-utils.d.ts +9 -0
  372. package/dist/scene/geometry-src/primitive-data-utils.d.ts.map +1 -0
  373. package/dist/scene/geometry-src/primitive-data-utils.js +36 -0
  374. package/dist/scene/geometry-src/primitive-data-utils.js.map +1 -0
  375. package/dist/scene/geometry-src/ring-data.d.ts +13 -0
  376. package/dist/scene/geometry-src/ring-data.d.ts.map +1 -0
  377. package/dist/scene/geometry-src/ring-data.js +24 -0
  378. package/dist/scene/geometry-src/ring-data.js.map +1 -0
  379. package/dist/scene/geometry-src/sphere-data.d.ts +11 -0
  380. package/dist/scene/geometry-src/sphere-data.d.ts.map +1 -0
  381. package/dist/scene/geometry-src/sphere-data.js +31 -0
  382. package/dist/scene/geometry-src/sphere-data.js.map +1 -0
  383. package/dist/scene/geometry-src/srgb.d.ts +5 -0
  384. package/dist/scene/geometry-src/srgb.d.ts.map +1 -0
  385. package/dist/scene/geometry-src/srgb.js +23 -0
  386. package/dist/scene/geometry-src/srgb.js.map +1 -0
  387. package/dist/scene/geometry-src/torus-data.d.ts +11 -0
  388. package/dist/scene/geometry-src/torus-data.d.ts.map +1 -0
  389. package/dist/scene/geometry-src/torus-data.js +38 -0
  390. package/dist/scene/geometry-src/torus-data.js.map +1 -0
  391. package/dist/scene/geometry-src/vertex-layout.d.ts +2 -0
  392. package/dist/scene/geometry-src/vertex-layout.d.ts.map +1 -0
  393. package/dist/scene/geometry-src/vertex-layout.js +2 -0
  394. package/dist/scene/geometry-src/vertex-layout.js.map +1 -0
  395. package/dist/scene/geometry.d.ts +70 -0
  396. package/dist/scene/geometry.d.ts.map +1 -0
  397. package/dist/scene/geometry.js +71 -0
  398. package/dist/scene/geometry.js.map +1 -0
  399. package/dist/scene/orbit.d.ts +9 -0
  400. package/dist/scene/orbit.d.ts.map +1 -0
  401. package/dist/scene/orbit.js +15 -0
  402. package/dist/scene/orbit.js.map +1 -0
  403. package/dist/scene/tree/errors.d.ts +4 -0
  404. package/dist/scene/tree/errors.d.ts.map +1 -0
  405. package/dist/scene/tree/errors.js +19 -0
  406. package/dist/scene/tree/errors.js.map +1 -0
  407. package/dist/scene/tree/light.d.ts +42 -0
  408. package/dist/scene/tree/light.d.ts.map +1 -0
  409. package/dist/scene/tree/light.js +102 -0
  410. package/dist/scene/tree/light.js.map +1 -0
  411. package/dist/scene/tree/material.d.ts +79 -0
  412. package/dist/scene/tree/material.d.ts.map +1 -0
  413. package/dist/scene/tree/material.js +117 -0
  414. package/dist/scene/tree/material.js.map +1 -0
  415. package/dist/scene/tree/math.d.ts +26 -0
  416. package/dist/scene/tree/math.d.ts.map +1 -0
  417. package/dist/scene/tree/math.js +217 -0
  418. package/dist/scene/tree/math.js.map +1 -0
  419. package/dist/scene/tree/mesh-node.d.ts +17 -0
  420. package/dist/scene/tree/mesh-node.d.ts.map +1 -0
  421. package/dist/scene/tree/mesh-node.js +24 -0
  422. package/dist/scene/tree/mesh-node.js.map +1 -0
  423. package/dist/scene/tree/node.d.ts +70 -0
  424. package/dist/scene/tree/node.d.ts.map +1 -0
  425. package/dist/scene/tree/node.js +220 -0
  426. package/dist/scene/tree/node.js.map +1 -0
  427. package/dist/scene/tree/orbit-controls.d.ts +69 -0
  428. package/dist/scene/tree/orbit-controls.d.ts.map +1 -0
  429. package/dist/scene/tree/orbit-controls.js +226 -0
  430. package/dist/scene/tree/orbit-controls.js.map +1 -0
  431. package/dist/scene.d.ts +21 -0
  432. package/dist/scene.d.ts.map +1 -0
  433. package/dist/scene.js +11 -0
  434. package/dist/scene.js.map +1 -0
  435. package/dist/set-core.d.ts +50 -0
  436. package/dist/set-core.d.ts.map +1 -0
  437. package/dist/set-core.js +268 -0
  438. package/dist/set-core.js.map +1 -0
  439. package/dist/set-layouts.d.ts +20 -0
  440. package/dist/set-layouts.d.ts.map +1 -0
  441. package/dist/set-layouts.js +103 -0
  442. package/dist/set-layouts.js.map +1 -0
  443. package/dist/set-packing.d.ts +4 -0
  444. package/dist/set-packing.d.ts.map +1 -0
  445. package/dist/set-packing.js +82 -0
  446. package/dist/set-packing.js.map +1 -0
  447. package/dist/set-resources.d.ts +20 -0
  448. package/dist/set-resources.d.ts.map +1 -0
  449. package/dist/set-resources.js +140 -0
  450. package/dist/set-resources.js.map +1 -0
  451. package/dist/shader-source.d.ts +4 -0
  452. package/dist/shader-source.d.ts.map +1 -0
  453. package/dist/shader-source.js +21 -0
  454. package/dist/shader-source.js.map +1 -0
  455. package/dist/storage.d.ts +38 -0
  456. package/dist/storage.d.ts.map +1 -0
  457. package/dist/storage.js +76 -0
  458. package/dist/storage.js.map +1 -0
  459. package/dist/surface.d.ts +89 -0
  460. package/dist/surface.d.ts.map +1 -0
  461. package/dist/surface.js +243 -0
  462. package/dist/surface.js.map +1 -0
  463. package/dist/target-offscreen.d.ts +41 -0
  464. package/dist/target-offscreen.d.ts.map +1 -0
  465. package/dist/target-offscreen.js +115 -0
  466. package/dist/target-offscreen.js.map +1 -0
  467. package/dist/target-utils.d.ts +37 -0
  468. package/dist/target-utils.d.ts.map +1 -0
  469. package/dist/target-utils.js +103 -0
  470. package/dist/target-utils.js.map +1 -0
  471. package/dist/target.d.ts +65 -0
  472. package/dist/target.d.ts.map +1 -0
  473. package/dist/target.js +2 -0
  474. package/dist/target.js.map +1 -0
  475. package/dist/timer.d.ts +78 -0
  476. package/dist/timer.d.ts.map +1 -0
  477. package/dist/timer.js +261 -0
  478. package/dist/timer.js.map +1 -0
  479. package/dist/uniforms-layout.d.ts +8 -0
  480. package/dist/uniforms-layout.d.ts.map +1 -0
  481. package/dist/uniforms-layout.js +84 -0
  482. package/dist/uniforms-layout.js.map +1 -0
  483. package/dist/uniforms.d.ts +43 -0
  484. package/dist/uniforms.d.ts.map +1 -0
  485. package/dist/uniforms.js +176 -0
  486. package/dist/uniforms.js.map +1 -0
  487. package/dist/visibility.d.ts +118 -0
  488. package/dist/visibility.d.ts.map +1 -0
  489. package/dist/visibility.js +290 -0
  490. package/dist/visibility.js.map +1 -0
  491. package/package.json +131 -0
package/dist/timer.js ADDED
@@ -0,0 +1,261 @@
1
+ import { timerCapacityError, timerInvalidError } from "./errors.js";
2
+ import { FRAME_PASS_ATTACHMENT } from "./frame-protocols.js";
3
+ import { liveKernel, ownQueryFeature } from "./live-kernel.js";
4
+ import { createQueryRing } from "./query-ring.js";
5
+ /** Initial capacity in spans; each span writes a begin/end timestamp pair (2 queries). */
6
+ const INITIAL_SPAN_CAPACITY = 32;
7
+ /** WebGPU createQuerySet: "descriptor.count must be ≤ 4096" — a fixed constant, so at most 2048 begin/end pairs. */
8
+ const MAX_QUERIES = 4096;
9
+ const MAX_SPANS_PER_FRAME = MAX_QUERIES / 2;
10
+ const MS_PER_NS = 1 / 1_000_000;
11
+ class InternalTimerSpan {
12
+ name;
13
+ owner;
14
+ constructor(name, owner) {
15
+ this.name = name;
16
+ this.owner = owner;
17
+ }
18
+ /**
19
+ * Frame pass attachment: registering the span is what returns the descriptor's `timestampWrites`
20
+ * (undefined when the span is dropped this frame because the query set is full). The owner is the
21
+ * timer, not the span, so a frame that attaches two spans of the same timer bookkeeps one owner.
22
+ */
23
+ [FRAME_PASS_ATTACHMENT](ctx) {
24
+ return { owner: this.owner, timestampWrites: this.owner.attachSpan(this, ctx.frame, ctx.device) };
25
+ }
26
+ }
27
+ /** @internal */
28
+ export function createTimer(device, host = {}) {
29
+ return new InternalTimer(device, host);
30
+ }
31
+ /**
32
+ * GPU pass timing for this gpu. Needs the "timestamp-query" device feature — request it at init:
33
+ * `init({ requiredFeatures: ["timestamp-query"] })`.
34
+ *
35
+ * The timer owns a query ring: its readbacks join `gpu.settled()`, a dropped readback is reported
36
+ * on `gpu.onError`, and `gpu.dispose()` releases the query set (deferring destruction while a frame
37
+ * in flight still references it). `timer.dispose()` releases it earlier and drops the registration.
38
+ */
39
+ export function timer(gpu) {
40
+ const kernel = liveKernel(gpu, "timer");
41
+ return ownQueryFeature(kernel, (host) => new InternalTimer(kernel.device, host));
42
+ }
43
+ /**
44
+ * Ring-1 GPU pass timer. Owns name→span bookkeeping per frame, contiguous
45
+ * begin/end index pair allocation, ns→ms conversion, and onResults dispatch;
46
+ * the query set + resolve/readback plumbing lives in the shared query ring.
47
+ *
48
+ * @internal
49
+ */
50
+ export class InternalTimer {
51
+ #device;
52
+ #host;
53
+ #spans = new Map();
54
+ #listeners = new Set();
55
+ #ring;
56
+ #capacity = INITIAL_SPAN_CAPACITY * 2;
57
+ /** High-water query demand; capacity grows to cover it at the next frame boundary. */
58
+ #demand = INITIAL_SPAN_CAPACITY * 2;
59
+ #frame;
60
+ #frameSpans = [];
61
+ #frameNames = new Set();
62
+ #usedQueries = 0;
63
+ #encodedSpans;
64
+ #resultSeq = 0;
65
+ #appliedSeq = -1;
66
+ /**
67
+ * One retain per open frame whose pass descriptors reference a ring's query set, keyed by frame
68
+ * identity and remembering *which* ring it pinned (capacity growth swaps the ring mid-life).
69
+ * Released only when that frame reports back — submitted, failed or abandoned — because nothing
70
+ * else proves the frame's encoder is done with the query set: age does not (a Frame held for many
71
+ * frames can still be submitted), so a Frame the caller drops without submit() keeps its retain
72
+ * until gpu.dispose() or device loss, exactly like a native GPUCommandEncoder that never finishes.
73
+ */
74
+ #frameRetains = new Map();
75
+ #disposed = false;
76
+ constructor(device, host = {}) {
77
+ // Mirrors WebGPU "Validate timestampWrites": '"timestamp-query" must be enabled for device' — and
78
+ // createQuerySet would throw a TypeError for a timestamp set without it. Fail at creation instead.
79
+ if (!device.features.has("timestamp-query")) {
80
+ throw timerInvalidError(`timer(gpu) needs the "timestamp-query" device feature — request it at init: init({ requiredFeatures: ["timestamp-query"] }).`, `Pass init({ requiredFeatures: ["timestamp-query"] }) on an adapter that supports it; gate optional timing on gpu.device.features.has("timestamp-query").`);
81
+ }
82
+ this.#device = device;
83
+ this.#host = host;
84
+ this.#ring = this.#createRing();
85
+ }
86
+ span(name) {
87
+ this.#assertUsable("Timer.span");
88
+ if (typeof name !== "string" || name.length === 0) {
89
+ throw timerInvalidError(`span name received ${previewName(name)}; expected a non-empty string.`, `Name each timed pass, e.g. timer.span("shadows").`, "Timer.span");
90
+ }
91
+ let span = this.#spans.get(name);
92
+ if (!span) {
93
+ span = new InternalTimerSpan(name, this);
94
+ this.#spans.set(name, span);
95
+ }
96
+ return span;
97
+ }
98
+ onResults(cb) {
99
+ this.#assertUsable("Timer.onResults");
100
+ this.#listeners.add(cb);
101
+ return () => { this.#listeners.delete(cb); };
102
+ }
103
+ dispose() {
104
+ if (this.#disposed)
105
+ return;
106
+ this.#disposed = true;
107
+ this.#listeners.clear();
108
+ this.#spans.clear();
109
+ this.#frameNames.clear();
110
+ this.#frameSpans = [];
111
+ this.#encodedSpans = undefined;
112
+ // The ring defers its destruction while the current frame still references the query set from a
113
+ // pass descriptor (released at frameSubmitted or at the next frame boundary).
114
+ this.#ring.dispose();
115
+ this.#host.onDispose?.();
116
+ }
117
+ /**
118
+ * @internal Frame.pass hook: registers the span for the current frame and returns the pass
119
+ * descriptor's timestampWrites, or undefined when the span is dropped for this frame because
120
+ * the query set is full (capacity grows at the next frame boundary — never mid-frame, since
121
+ * earlier passes already reference the current set).
122
+ */
123
+ attachSpan(span, frame, frameDevice) {
124
+ this.#assertUsable("Frame.pass");
125
+ if (frameDevice !== this.#device) {
126
+ throw timerInvalidError(`span '${span.name}' belongs to a timer created on a different gpu; timestamp queries cannot cross devices.`, "Create one timer(gpu) per gpu and use its spans only with that gpu's frames.", "Frame.pass");
127
+ }
128
+ if (frame !== this.#frame)
129
+ this.#beginFrame(frame);
130
+ if (this.#frameNames.has(span.name)) {
131
+ throw timerInvalidError(`duplicate span '${span.name}' in one frame; each result key holds a single begin/end pair per frame.`, `Use one timer.span(name) per pass per frame, e.g. timer.span("${span.name}-2") for the second pass.`, "Frame.pass");
132
+ }
133
+ if (this.#frameNames.size >= MAX_SPANS_PER_FRAME) {
134
+ throw timerCapacityError(MAX_SPANS_PER_FRAME, MAX_QUERIES);
135
+ }
136
+ this.#frameNames.add(span.name);
137
+ const begin = this.#frameNames.size * 2 - 2;
138
+ if (this.#demand < begin + 2)
139
+ this.#demand = begin + 2;
140
+ // Mirrors WebGPU "Validate timestampWrites": each provided index must be < querySet.count.
141
+ if (begin + 2 > this.#ring.capacity)
142
+ return undefined;
143
+ this.#usedQueries = begin + 2;
144
+ this.#frameSpans.push({ name: span.name, begin });
145
+ // The descriptor now references the ring's query set for the rest of the frame: keep the ring alive
146
+ // even if dispose() lands mid-frame (destroying a referenced set would invalidate the pass).
147
+ // The retain is per frame, so a second frame opened while this one is still unsubmitted cannot
148
+ // release it — both keep the set alive until each of them is submitted or abandoned.
149
+ this.#retainRing(frame);
150
+ // "Of the write index members ... at least one must be provided ... no two may be equal": begin/end pairs are distinct by construction.
151
+ return { querySet: this.#ring.querySet, beginningOfPassWriteIndex: begin, endOfPassWriteIndex: begin + 1 };
152
+ }
153
+ /** @internal Frame.submit hook, before encoder.finish(): appends this frame's single resolve to the frame encoder. */
154
+ finalizeFrame(frame, encoder) {
155
+ this.#encodedSpans = undefined;
156
+ if (this.#disposed || frame !== this.#frame || this.#usedQueries === 0)
157
+ return;
158
+ if (this.#ring.encodeResolve(encoder, this.#usedQueries))
159
+ this.#encodedSpans = [...this.#frameSpans];
160
+ }
161
+ /** @internal Frame.submit hook, after queue.submit succeeds: starts the non-blocking readback. */
162
+ frameSubmitted(frame) {
163
+ // Release *this* frame's retain first, whichever ring it pinned: the command buffer is submitted
164
+ // (or the frame was abandoned), so nothing it encoded references that query set anymore, and a
165
+ // dispose() that landed mid-frame can now destroy the ring. Runs before the identity check so a
166
+ // frame that is no longer the current one — another frame was opened meanwhile — still releases.
167
+ this.#releaseRing(frame);
168
+ // Results stay identity-scoped: only the current frame's encoded resolve is read back.
169
+ if (frame !== this.#frame)
170
+ return;
171
+ if (this.#disposed)
172
+ return;
173
+ const spans = this.#encodedSpans;
174
+ this.#encodedSpans = undefined;
175
+ if (!spans || spans.length === 0)
176
+ return;
177
+ const seq = this.#resultSeq;
178
+ this.#resultSeq += 1;
179
+ this.#ring.onSubmitted((values) => {
180
+ // The ring orders its own readbacks; this guard extends the ordering across ring recreations (capacity growth).
181
+ if (seq <= this.#appliedSeq)
182
+ return;
183
+ this.#appliedSeq = seq;
184
+ this.#dispatch(spans, values);
185
+ });
186
+ }
187
+ /**
188
+ * @internal Frame abandon hook (a failed pass, a failed finish/submit, or Frame.cancel()): the
189
+ * frame ends without ever reaching the queue. Drops the pending encoded state so no readback can
190
+ * decode stale staging bytes as a phantom duration, and releases the retain this frame took when
191
+ * it attached a span — the counterpart of frameSubmitted() for frames that never submit.
192
+ */
193
+ frameAbandoned(frame) {
194
+ if (frame === this.#frame)
195
+ this.#encodedSpans = undefined;
196
+ this.#releaseRing(frame);
197
+ }
198
+ #beginFrame(frame) {
199
+ if (this.#demand > this.#ring.capacity) {
200
+ // Grow only at frame boundaries. The retired ring keeps applying its in-flight readbacks
201
+ // before releasing its resources, so growth never drops results already submitted.
202
+ this.#ring.dispose();
203
+ this.#capacity = Math.min(MAX_QUERIES, nextPowerOfTwo(this.#demand));
204
+ this.#ring = this.#createRing();
205
+ }
206
+ this.#demand = this.#capacity;
207
+ this.#frame = frame;
208
+ this.#frameSpans = [];
209
+ this.#frameNames.clear();
210
+ this.#usedQueries = 0;
211
+ }
212
+ #dispatch(spans, values) {
213
+ const results = {};
214
+ for (const { name, begin } of spans) {
215
+ const start = values[begin] ?? 0n;
216
+ const end = values[begin + 1] ?? 0n;
217
+ // Timestamps are implementation-defined ns ticks and the counter may reset between writes
218
+ // ("unexpected values such as negative deltas ... can safely be discarded"): clamp negatives to 0.
219
+ results[name] = end > start ? Number(end - start) * MS_PER_NS : 0;
220
+ }
221
+ const frozen = Object.freeze(results);
222
+ for (const listener of [...this.#listeners]) {
223
+ try {
224
+ listener(frozen);
225
+ }
226
+ catch (error) {
227
+ console.error(error);
228
+ }
229
+ }
230
+ }
231
+ #retainRing(frame) {
232
+ if (this.#frameRetains.has(frame))
233
+ return;
234
+ this.#frameRetains.set(frame, this.#ring);
235
+ this.#ring.retain();
236
+ }
237
+ #releaseRing(frame) {
238
+ const ring = this.#frameRetains.get(frame);
239
+ if (!ring)
240
+ return;
241
+ this.#frameRetains.delete(frame);
242
+ ring.release();
243
+ }
244
+ #createRing() {
245
+ return createQueryRing(this.#device, { type: "timestamp", capacity: this.#capacity, label: "aigpu.timer", trackSettled: this.#host.trackSettled, errorSink: this.#host.errorSink });
246
+ }
247
+ #assertUsable(where) {
248
+ if (this.#disposed)
249
+ throw timerInvalidError("the timer is disposed.", "Create a new timer with timer(gpu).", where);
250
+ }
251
+ }
252
+ function nextPowerOfTwo(value) {
253
+ let result = 1;
254
+ while (result < value)
255
+ result *= 2;
256
+ return result;
257
+ }
258
+ function previewName(value) {
259
+ return typeof value === "string" ? `'${value}'` : String(value);
260
+ }
261
+ //# sourceMappingURL=timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { HostShareableLayout } from "@aigpu/wgsl/reflect-source";
2
+ /** Builds the binary compatibility signature used by shared uniforms after first-bind adoption. */
3
+ export declare function sharedUniformLayoutSignature(layout: HostShareableLayout): string;
4
+ /** Formats a reflected layout for Lane-E shared-uniform diagnostics. */
5
+ export declare function formatSharedUniformLayout(layout: HostShareableLayout, opts?: {
6
+ readonly abbreviated?: boolean;
7
+ }): string;
8
+ //# sourceMappingURL=uniforms-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniforms-layout.d.ts","sourceRoot":"","sources":["../src/uniforms-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AAE9F,mGAAmG;AACnG,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAEhF;AAED,wEAAwE;AACxE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,GAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAI5H"}
@@ -0,0 +1,84 @@
1
+ /** Builds the binary compatibility signature used by shared uniforms after first-bind adoption. */
2
+ export function sharedUniformLayoutSignature(layout) {
3
+ return JSON.stringify(signatureNode(layout));
4
+ }
5
+ /** Formats a reflected layout for Lane-E shared-uniform diagnostics. */
6
+ export function formatSharedUniformLayout(layout, opts = {}) {
7
+ if (layout.members?.length)
8
+ return formatStructLayout(layout.members, opts.abbreviated === true);
9
+ if (layout.element)
10
+ return formatArrayLayout(layout);
11
+ return formatType(layout.type);
12
+ }
13
+ function signatureNode(layout) {
14
+ return {
15
+ type: typeSignature(layout.type),
16
+ align: layout.align,
17
+ size: layout.size,
18
+ stride: layout.stride,
19
+ members: layout.members?.map(memberSignature),
20
+ element: layout.element ? signatureNode(layout.element) : undefined,
21
+ };
22
+ }
23
+ function memberSignature(member) {
24
+ return {
25
+ name: member.name,
26
+ offset: member.offset,
27
+ align: member.align,
28
+ size: member.size,
29
+ explicitAlign: member.explicitAlign,
30
+ explicitSize: member.explicitSize,
31
+ type: typeSignature(member.type),
32
+ layout: signatureNode(member.layout),
33
+ };
34
+ }
35
+ function typeSignature(type) {
36
+ switch (type.kind) {
37
+ case "scalar": return { scalar: type.name };
38
+ case "vector": return { vector: type.width, element: typeSignature(type.element) };
39
+ case "matrix": return { matrix: [type.columns, type.rows], element: typeSignature(type.element) };
40
+ case "array": return { array: typeSignature(type.element), count: type.count ?? type.countExpression };
41
+ case "atomic": return { atomic: typeSignature(type.element) };
42
+ default: return type.kind;
43
+ }
44
+ }
45
+ function formatStructLayout(members, abbreviated) {
46
+ const shown = abbreviated ? members.slice(0, 1) : members;
47
+ const suffix = abbreviated && members.length > 1 ? ", ..." : "";
48
+ return `{ ${shown.map(formatMember).join(", ")}${suffix} }`;
49
+ }
50
+ function formatArrayLayout(layout) {
51
+ const count = arrayCount(layout.type);
52
+ const suffix = count === undefined ? "" : `, ${count}`;
53
+ return `array<${formatSharedUniformLayout(layout.element)}${suffix}>`;
54
+ }
55
+ function formatMember(member) {
56
+ return `${member.name}: ${formatSharedUniformLayout(member.layout)}`;
57
+ }
58
+ function formatType(type) {
59
+ switch (type.kind) {
60
+ case "scalar": return type.name;
61
+ case "vector": return `vec${type.width}${scalarSuffix(type.element)}`;
62
+ case "matrix": return `mat${type.columns}x${type.rows}${scalarSuffix(type.element)}`;
63
+ case "array": return formatArrayType(type);
64
+ case "identifier": return type.name;
65
+ case "atomic": return `atomic<${formatType(type.element)}>`;
66
+ default: return type.kind;
67
+ }
68
+ }
69
+ function formatArrayType(type) {
70
+ const count = type.count ?? type.countExpression;
71
+ const suffix = count === undefined ? "" : `, ${count}`;
72
+ return `array<${formatType(type.element)}${suffix}>`;
73
+ }
74
+ function scalarSuffix(type) {
75
+ if (type.kind !== "scalar")
76
+ return "";
77
+ if (type.name === "bool")
78
+ return "b";
79
+ return type.name.slice(0, 1);
80
+ }
81
+ function arrayCount(type) {
82
+ return type.kind === "array" ? type.count ?? type.countExpression : undefined;
83
+ }
84
+ //# sourceMappingURL=uniforms-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniforms-layout.js","sourceRoot":"","sources":["../src/uniforms-layout.ts"],"names":[],"mappings":"AAEA,mGAAmG;AACnG,MAAM,UAAU,4BAA4B,CAAC,MAA2B;IACtE,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,yBAAyB,CAAC,MAA2B,EAAE,OAA2C,EAAE;IAClH,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;IACjG,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,MAA2B;IAChD,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC;QAC7C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAoB;IAC3C,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAc;IACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnF,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClG,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACvG,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgC,EAAE,WAAoB;IAChF,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1D,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA2B;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;IACvD,OAAO,SAAS,yBAAyB,CAAC,MAAM,CAAC,OAAQ,CAAC,GAAG,MAAM,GAAG,CAAC;AACzE,CAAC;AAED,SAAS,YAAY,CAAC,MAAoB;IACxC,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;QAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrF,KAAK,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,YAAY,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;QACpC,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC5D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAmD;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;IACvD,OAAO,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { Buffer, Device } from "@aigpu/core";
2
+ import type { BindingInfo } from "@aigpu/wgsl/reflect-source";
3
+ import type { SharedUniforms } from "./api-types.ts";
4
+ import type { Gpu } from "./kernel.ts";
5
+ import { BINDING_RESOURCE, type BindingResourceProvider } from "./draw-protocols.ts";
6
+ import type { NormalizedBindingResource } from "./set-resources.ts";
7
+ /**
8
+ * Values-first shared uniform/storage buffer. The WGSL layout is adopted lazily from
9
+ * the first shader that binds this object, keeping the backing buffer identity stable.
10
+ */
11
+ export declare class SharedUniformsImpl<T extends Record<string, unknown>> implements SharedUniforms<T>, BindingResourceProvider {
12
+ #private;
13
+ private readonly device;
14
+ constructor(device: Device, initialValues: T);
15
+ get buffer(): Buffer | undefined;
16
+ get gpu(): GPUBuffer | undefined;
17
+ get size(): number | undefined;
18
+ set(values: Partial<T>): void;
19
+ /**
20
+ * Adopts or validates the reflected binding layout, then returns a user-owned resource.
21
+ *
22
+ * Keyed by the nominal protocol symbol so `set-resources.ts` recognizes a shared uniforms block
23
+ * without importing this module: binding a plain buffer must not link the layout machinery.
24
+ */
25
+ [BINDING_RESOURCE](binding: BindingInfo, sourceHint: string): NormalizedBindingResource;
26
+ /**
27
+ * Frees the backing buffer, if the layout was already adopted. Idempotent, and a no-op for an
28
+ * object that no shader ever bound — the buffer only exists after adoption.
29
+ *
30
+ * @internal Lifetime is the gpu's: `gpu.dispose()` runs this in the resource phase.
31
+ */
32
+ destroy(): void;
33
+ }
34
+ export declare function createSharedUniforms<T extends Record<string, unknown>>(device: Device, values: T): SharedUniformsImpl<T>;
35
+ /**
36
+ * Values-first shared uniform/storage block for this gpu. Bind the same object in several shaders:
37
+ * the WGSL layout is adopted from the first binding that uses it and validated against the rest, so
38
+ * one `set()` updates every consumer through a single buffer.
39
+ *
40
+ * The buffer (created on adoption) is freed by `gpu.dispose()`.
41
+ */
42
+ export declare function uniforms<T extends Record<string, unknown>>(gpu: Gpu, values: T): SharedUniforms<T>;
43
+ //# sourceMappingURL=uniforms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniforms.d.ts","sourceRoot":"","sources":["../src/uniforms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAepE;;;GAGG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,cAAc,CAAC,CAAC,CAAC,EAAE,uBAAuB;;IAK1G,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAI7D,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAA4B;IAC5D,IAAI,GAAG,IAAI,SAAS,GAAG,SAAS,CAAiC;IACjE,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAAqC;IAEnE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,yBAAyB;IA+DvF;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAExH;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAGlG"}
@@ -0,0 +1,176 @@
1
+ import { liveKernel, ownResource } from "./live-kernel.js";
2
+ import { BINDING_RESOURCE } from "./draw-protocols.js";
3
+ import { sharedUniformLayoutMismatchError, unsupportedError } from "./errors.js";
4
+ import { writeLayoutValue } from "./set-packing.js";
5
+ import { formatSharedUniformLayout, sharedUniformLayoutSignature } from "./uniforms-layout.js";
6
+ import { assertBufferUsable } from "./lifecycle.js";
7
+ /**
8
+ * Values-first shared uniform/storage buffer. The WGSL layout is adopted lazily from
9
+ * the first shader that binds this object, keeping the backing buffer identity stable.
10
+ */
11
+ export class SharedUniformsImpl {
12
+ device;
13
+ #values;
14
+ #state;
15
+ #bufferRef;
16
+ constructor(device, initialValues) {
17
+ this.device = device;
18
+ this.#values = cloneRecord(initialValues);
19
+ }
20
+ get buffer() { return this.#bufferRef; }
21
+ get gpu() { return this.#bufferRef?.gpu; }
22
+ get size() { return this.#state?.layout.size; }
23
+ set(values) {
24
+ mergeInto(this.#values, values);
25
+ this.#writeCurrentValues();
26
+ }
27
+ /**
28
+ * Adopts or validates the reflected binding layout, then returns a user-owned resource.
29
+ *
30
+ * Keyed by the nominal protocol symbol so `set-resources.ts` recognizes a shared uniforms block
31
+ * without importing this module: binding a plain buffer must not link the layout machinery.
32
+ */
33
+ [BINDING_RESOURCE](binding, sourceHint) {
34
+ ensureBufferBinding(binding);
35
+ const adopted = this.#ensureLayout(binding, sourceHint);
36
+ const buffer = this.#requiredBuffer();
37
+ assertBufferUsable(buffer, `${sourceHint}.set`);
38
+ return {
39
+ resource: { buffer: buffer.gpu, offset: 0, size: adopted.layout.size },
40
+ identity: buffer.resourceIdentity,
41
+ unsubscribe: (cb) => buffer.onDestroy(cb),
42
+ };
43
+ }
44
+ #ensureLayout(binding, sourceHint) {
45
+ const layout = staticBindingLayout(binding);
46
+ const addressSpace = normalizeAddressSpace(binding.addressSpace);
47
+ if (!this.#state)
48
+ return this.#adoptLayout(binding, layout, addressSpace, sourceHint);
49
+ this.#assertCompatibleLayout(binding, layout, addressSpace, sourceHint);
50
+ return this.#state;
51
+ }
52
+ #adoptLayout(binding, layout, addressSpace, sourceHint) {
53
+ this.#state = {
54
+ layout,
55
+ layoutSignature: sharedUniformLayoutSignature(layout),
56
+ layoutText: formatSharedUniformLayout(layout),
57
+ sourceHint,
58
+ bindingName: binding.name,
59
+ addressSpace,
60
+ };
61
+ this.#bufferRef = this.device.createBuffer({
62
+ size: layout.size,
63
+ usage: addressSpace === "storage" ? ["storage", "copy_dst"] : ["uniform", "copy_dst"],
64
+ label: `${binding.name}.sharedUniform`,
65
+ });
66
+ this.#writeCurrentValues();
67
+ return this.#state;
68
+ }
69
+ #assertCompatibleLayout(binding, layout, addressSpace, sourceHint) {
70
+ const state = this.#state;
71
+ if (state.addressSpace !== addressSpace) {
72
+ throw unsupportedError("uniforms", `shared uniforms '${state.bindingName}' already adopted address space ${state.addressSpace}; '${binding.name}' uses ${addressSpace}.`);
73
+ }
74
+ if (sharedUniformLayoutSignature(layout) === state.layoutSignature)
75
+ return;
76
+ throw sharedUniformLayoutMismatchError({
77
+ bindingName: state.bindingName,
78
+ adoptedLayout: state.layoutText,
79
+ adoptedSource: state.sourceHint,
80
+ incomingLayout: formatSharedUniformLayout(layout, { abbreviated: true }),
81
+ incomingSource: sourceHint,
82
+ });
83
+ }
84
+ #writeCurrentValues() {
85
+ if (!this.#state || !this.#bufferRef)
86
+ return;
87
+ this.#bufferRef.write(writeLayoutValue(this.#state.layout, this.#values), 0);
88
+ }
89
+ #requiredBuffer() {
90
+ if (!this.#bufferRef)
91
+ throw unsupportedError("uniforms", "shared uniforms have not adopted a layout yet.");
92
+ return this.#bufferRef;
93
+ }
94
+ /**
95
+ * Frees the backing buffer, if the layout was already adopted. Idempotent, and a no-op for an
96
+ * object that no shader ever bound — the buffer only exists after adoption.
97
+ *
98
+ * @internal Lifetime is the gpu's: `gpu.dispose()` runs this in the resource phase.
99
+ */
100
+ destroy() {
101
+ this.#bufferRef?.destroy();
102
+ }
103
+ }
104
+ export function createSharedUniforms(device, values) {
105
+ return new SharedUniformsImpl(device, values);
106
+ }
107
+ /**
108
+ * Values-first shared uniform/storage block for this gpu. Bind the same object in several shaders:
109
+ * the WGSL layout is adopted from the first binding that uses it and validated against the rest, so
110
+ * one `set()` updates every consumer through a single buffer.
111
+ *
112
+ * The buffer (created on adoption) is freed by `gpu.dispose()`.
113
+ */
114
+ export function uniforms(gpu, values) {
115
+ const kernel = liveKernel(gpu, "uniforms");
116
+ return ownResource(kernel, new SharedUniformsImpl(kernel.device, values), (shared) => shared.destroy());
117
+ }
118
+ function ensureBufferBinding(binding) {
119
+ if (binding.bindingLayout?.kind === "buffer")
120
+ return;
121
+ throw unsupportedError("uniforms", `Binding '${binding.name}' does not accept shared uniforms; the shader reflected ${binding.bindingLayout?.kind ?? "none"}.`);
122
+ }
123
+ function staticBindingLayout(binding) {
124
+ if (!binding.layout)
125
+ throw unsupportedError("uniforms", `Binding '${binding.name}' does not expose a host-shareable layout.`);
126
+ if (binding.layout.size === undefined)
127
+ throw unsupportedError("uniforms", `Binding '${binding.name}' has a runtime-sized layout; it cannot be shared.`);
128
+ return binding.layout;
129
+ }
130
+ function mergeInto(target, patch) {
131
+ for (const [key, value] of Object.entries(patch)) {
132
+ if (isUnsafeKey(key))
133
+ continue;
134
+ if (isPlainObject(value) && isPlainObject(target[key]))
135
+ mergeInto(target[key], value);
136
+ else
137
+ target[key] = cloneValue(value);
138
+ }
139
+ }
140
+ function cloneRecord(value) {
141
+ const next = {};
142
+ for (const [key, entry] of Object.entries(value)) {
143
+ if (isUnsafeKey(key))
144
+ continue;
145
+ next[key] = cloneValue(entry);
146
+ }
147
+ return next;
148
+ }
149
+ function isUnsafeKey(key) {
150
+ return key === "__proto__" || key === "constructor" || key === "prototype";
151
+ }
152
+ function cloneValue(value) {
153
+ if (Array.isArray(value))
154
+ return value.map(cloneValue);
155
+ if (ArrayBuffer.isView(value))
156
+ return cloneTypedArray(value);
157
+ if (isPlainObject(value))
158
+ return cloneRecord(value);
159
+ return value;
160
+ }
161
+ function cloneTypedArray(value) {
162
+ if (value instanceof Float32Array)
163
+ return value.slice();
164
+ if (value instanceof Uint32Array)
165
+ return value.slice();
166
+ if (value instanceof Int32Array)
167
+ return value.slice();
168
+ return value;
169
+ }
170
+ function isPlainObject(value) {
171
+ return typeof value === "object" && value !== null && !Array.isArray(value) && !ArrayBuffer.isView(value);
172
+ }
173
+ function normalizeAddressSpace(addressSpace) {
174
+ return addressSpace === "storage" ? "storage" : "uniform";
175
+ }
176
+ //# sourceMappingURL=uniforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniforms.js","sourceRoot":"","sources":["../src/uniforms.ts"],"names":[],"mappings":"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"}