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
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Nominal protocols a `Frame` talks to, so `frame.ts` never imports a feature module.
3
+ *
4
+ * `frame(gpu, cb)` must not drag draw, effect, bundle, timer or visibility into a program that
5
+ * does not use them: a frame that only clears a surface pays for a command encoder, nothing else.
6
+ * Concrete classes therefore expose a symbol-keyed protocol object, and the frame resolves it
7
+ * through the `*Of()` accessors below.
8
+ *
9
+ * Rules for this file:
10
+ * - **Nominal, not duck typing.** The symbols are module-private to the package (never exported
11
+ * from an entrypoint), so only code that imported this module can implement a protocol. A plain
12
+ * object literal from user code can never be mistaken for a drawable or a telemetry owner.
13
+ * - **No registration by side effect.** Nothing self-registers at import time; the object carries
14
+ * its own protocol, so tree shaking still sees an unused feature as unused.
15
+ * - **Types only.** This module has no runtime dependency of its own (the symbols aside), so
16
+ * importing it from a feature costs nothing.
17
+ */
18
+ import type { Device } from "@aigpu/core";
19
+ import type { ClaimedGroupValidationResult } from "./claim-validation.ts";
20
+ import type { DrawCallOptions } from "./draw.ts";
21
+ import type { Target } from "./target.ts";
22
+ /**
23
+ * Identity of the frame a protocol call belongs to. Owners key their per-frame bookkeeping on it
24
+ * and never inspect it, so the concrete `Frame` class stays private to `frame.ts`.
25
+ */
26
+ export type FrameHandle = object;
27
+ export declare const FRAME_DRAWABLE: unique symbol;
28
+ export interface FrameDrawableProtocol {
29
+ /** Used by pass-level error messages (read-only depth rejections name the offending draw). */
30
+ readonly label: string;
31
+ encode(pass: GPURenderPassEncoder, target: Target, opts: DrawCallOptions, claimValidation?: (result: ClaimedGroupValidationResult) => void): void;
32
+ /** True when the drawable's depth state writes depth — rejected by a `depthReadOnly` pass. */
33
+ writesDepth(): boolean;
34
+ /** Names of the stencil ops that can write, empty when none — rejected by a `depthReadOnly` pass on a stencil format. */
35
+ stencilWritingOps(): readonly string[];
36
+ }
37
+ export interface FrameDrawable {
38
+ readonly [FRAME_DRAWABLE]: FrameDrawableProtocol;
39
+ }
40
+ export declare function frameDrawableOf(value: unknown): FrameDrawableProtocol | undefined;
41
+ export declare const FRAME_BUNDLE: unique symbol;
42
+ export interface FrameBundleProtocol {
43
+ readonly gpu: GPURenderBundle;
44
+ /** Throws `AIGPU-R3-BUNDLE-STALE` when the recorded signature no longer matches `target`. */
45
+ assertReplayable(target: Target): void;
46
+ }
47
+ export interface FrameBundleLike {
48
+ readonly [FRAME_BUNDLE]: FrameBundleProtocol;
49
+ }
50
+ export declare function frameBundleOf(value: unknown): FrameBundleProtocol | undefined;
51
+ /**
52
+ * Per-frame lifecycle of anything a pass attached: query rings today, scene view generations later.
53
+ *
54
+ * Exactly one of `frameSubmitted` / `frameAbandoned` runs per frame the owner was attached to.
55
+ * The frame calls `finalizeFrame` only on owners that survived every pass, right before
56
+ * `encoder.finish()`, and `frameAbandoned` on the rest (failed pass, failed finish/submit, cancel)
57
+ * so the retain each owner took at attach time is always released exactly once.
58
+ */
59
+ export interface FrameOwner {
60
+ /** Encodes the owner's end-of-frame work (resolve + staging copy) into the frame's still-open encoder. */
61
+ finalizeFrame(frame: FrameHandle, encoder: GPUCommandEncoder): void;
62
+ /** The frame reached the queue: start the readback of what this frame encoded. */
63
+ frameSubmitted(frame: FrameHandle): void;
64
+ /** The frame never reached the queue: drop this frame's pending state and release the retain. */
65
+ frameAbandoned(frame: FrameHandle): void;
66
+ }
67
+ export declare const FRAME_PASS_ATTACHMENT: unique symbol;
68
+ export interface FramePassAttachContext {
69
+ /** Identity of the frame being encoded. */
70
+ readonly frame: FrameHandle;
71
+ /** The device the frame encodes against; attachments validate their own device against it. */
72
+ readonly device: Device;
73
+ /** The pass's resolved target, for attachments that require specific attachments (occlusion needs depth). */
74
+ readonly target: Target;
75
+ }
76
+ /** Occlusion query source of a pass: supplied by the attachment, consumed by `FramePass.occlusion()`. */
77
+ export interface FrameOcclusionSource {
78
+ readonly querySet: GPUQuerySet;
79
+ /**
80
+ * Reserves the query index for `query` in this frame. Throws on an unknown/disposed handle.
81
+ * `frame` is optional because a pass can be encoded outside a frame (tests drive `FramePass`
82
+ * directly); the attachment then has no frame to bill the slot to.
83
+ */
84
+ beginQuery(query: object, frame?: FrameHandle): number;
85
+ }
86
+ /**
87
+ * What attaching contributed to the pass. `owner` is bookkeeping-only; the optional members
88
+ * decorate the render pass descriptor the frame is about to open.
89
+ */
90
+ export interface FramePassAttachResult {
91
+ readonly owner: FrameOwner;
92
+ readonly timestampWrites?: GPURenderPassTimestampWrites;
93
+ readonly occlusion?: FrameOcclusionSource;
94
+ }
95
+ /**
96
+ * Implemented by the value a user hands to a `FramePassOptions` telemetry slot: `timer.span(name)`
97
+ * for `timer`, the instance itself for `visibility`.
98
+ *
99
+ * `attach` may throw (invalid handle, duplicate span, missing depth attachment): the frame treats a
100
+ * throw as a failed pass and rolls the owner's frame bookkeeping back, including any earlier pass
101
+ * of the same frame that the same owner contributed.
102
+ */
103
+ export interface FramePassAttachment {
104
+ [FRAME_PASS_ATTACHMENT](ctx: FramePassAttachContext): FramePassAttachResult;
105
+ }
106
+ export declare function framePassAttachmentOf(value: unknown): FramePassAttachment | undefined;
107
+ //# sourceMappingURL=frame-protocols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-protocols.d.ts","sourceRoot":"","sources":["../src/frame-protocols.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Drawable: what `FramePass.draw()` encodes (draw.ts, effect.ts, later scene views).
3
+ // ---------------------------------------------------------------------------
4
+ export const FRAME_DRAWABLE = Symbol("aigpu.frame.drawable");
5
+ export function frameDrawableOf(value) {
6
+ return value?.[FRAME_DRAWABLE];
7
+ }
8
+ // ---------------------------------------------------------------------------
9
+ // Bundle: what `FramePass.bundles()` replays (bundle.ts).
10
+ // ---------------------------------------------------------------------------
11
+ export const FRAME_BUNDLE = Symbol("aigpu.frame.bundle");
12
+ export function frameBundleOf(value) {
13
+ return value?.[FRAME_BUNDLE];
14
+ }
15
+ export const FRAME_PASS_ATTACHMENT = Symbol("aigpu.frame.passAttachment");
16
+ export function framePassAttachmentOf(value) {
17
+ const attach = value?.[FRAME_PASS_ATTACHMENT];
18
+ return typeof attach === "function" ? value : undefined;
19
+ }
20
+ //# sourceMappingURL=frame-protocols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-protocols.js","sourceRoot":"","sources":["../src/frame-protocols.ts"],"names":[],"mappings":"AA4BA,8EAA8E;AAC9E,qFAAqF;AACrF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAAkB,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAgB5E,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAQ,KAAmD,EAAE,CAAC,cAAc,CAAC,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAkB,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAYxE,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAQ,KAAqD,EAAE,CAAC,YAAY,CAAC,CAAC;AAChF,CAAC;AAuBD,MAAM,CAAC,MAAM,qBAAqB,GAAkB,MAAM,CAAC,4BAA4B,CAAC,CAAC;AA4CzF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,MAAM,GAAI,KAAyD,EAAE,CAAC,qBAAqB,CAAC,CAAC;IACnG,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAE,KAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Per-frame clock, as a lazy kernel service.
3
+ *
4
+ * This is the small "frame state" the core deliberately does not carry as public fields:
5
+ * a program that never opens a frame never creates it. Registered through a token so the
6
+ * kernel keeps no static reference to it. The public face of this service is `clock(gpu)`.
7
+ */
8
+ import { type Kernel } from "./kernel.ts";
9
+ export interface FrameState {
10
+ /** Seconds since the first frame. */
11
+ time: number;
12
+ /** Seconds between the last two ticks. */
13
+ deltaTime: number;
14
+ frameCount: number;
15
+ /**
16
+ * Advances the clock by `dtSeconds` right now and claims this frame's tick: the next `tick()`
17
+ * counts the frame and runs the hooks, but does not move the clock again.
18
+ */
19
+ advanceBy(dtSeconds: number): void;
20
+ /**
21
+ * Counts one frame and runs the registered per-frame hooks, advancing the clock with wall-clock
22
+ * time unless `advanceBy()` already advanced it since the last tick. Throws `AIGPU-FRAME-REENTRANT`
23
+ * if re-entered.
24
+ */
25
+ tick(): void;
26
+ /** Runs right after the clock advances, before the frame callback (surface auto-resize lives here). */
27
+ onAdvance(hook: () => void): () => void;
28
+ }
29
+ export declare const frameStateToken: import("./kernel.ts").ServiceToken<FrameState>;
30
+ /** Lazily creates the frame state of this kernel; repeated calls return the same instance. */
31
+ export declare function frameState(kernel: Kernel): FrameState;
32
+ //# sourceMappingURL=frame-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-state.d.ts","sourceRoot":"","sources":["../src/frame-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,IAAI,IAAI,IAAI,CAAC;IACb,uGAAuG;IACvG,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACzC;AAED,eAAO,MAAM,eAAe,gDAA0C,CAAC;AAEvE,8FAA8F;AAC9F,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAErD"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Per-frame clock, as a lazy kernel service.
3
+ *
4
+ * This is the small "frame state" the core deliberately does not carry as public fields:
5
+ * a program that never opens a frame never creates it. Registered through a token so the
6
+ * kernel keeps no static reference to it. The public face of this service is `clock(gpu)`.
7
+ */
8
+ import { serviceToken } from "./kernel.js";
9
+ import { frameReentrantError } from "./errors.js";
10
+ export const frameStateToken = serviceToken("frame-state");
11
+ /** Lazily creates the frame state of this kernel; repeated calls return the same instance. */
12
+ export function frameState(kernel) {
13
+ return kernel.service(frameStateToken, createFrameState);
14
+ }
15
+ function createFrameState() {
16
+ const hooks = new Set();
17
+ let lastTimeMs = nowMs();
18
+ let ticking = false;
19
+ // True while a manual advance() owns this frame's tick: one advance per frame, manual wins.
20
+ let manualPending = false;
21
+ const state = {
22
+ time: 0,
23
+ deltaTime: 0,
24
+ frameCount: 0,
25
+ advanceBy(dtSeconds) {
26
+ state.deltaTime = dtSeconds;
27
+ state.time += dtSeconds;
28
+ manualPending = true;
29
+ },
30
+ tick() {
31
+ if (ticking)
32
+ throw frameReentrantError();
33
+ ticking = true;
34
+ try {
35
+ const next = nowMs();
36
+ if (manualPending) {
37
+ // The clock already moved this frame; only re-base the wall clock so the next
38
+ // auto-advanced frame measures from this tick, not from the last automatic one.
39
+ manualPending = false;
40
+ }
41
+ else {
42
+ state.deltaTime = Math.max(0, (next - lastTimeMs) / 1000);
43
+ state.time += state.deltaTime;
44
+ }
45
+ lastTimeMs = next;
46
+ state.frameCount += 1;
47
+ for (const hook of [...hooks])
48
+ hook();
49
+ }
50
+ finally {
51
+ ticking = false;
52
+ }
53
+ },
54
+ onAdvance(hook) {
55
+ hooks.add(hook);
56
+ return () => { hooks.delete(hook); };
57
+ },
58
+ };
59
+ return state;
60
+ }
61
+ function nowMs() { return globalThis.performance?.now?.() ?? Date.now(); }
62
+ //# sourceMappingURL=frame-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-state.js","sourceRoot":"","sources":["../src/frame-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAuBlD,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAa,aAAa,CAAC,CAAC;AAEvE,8FAA8F;AAC9F,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAc,CAAC;IACpC,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,4FAA4F;IAC5F,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,KAAK,GAAe;QACxB,IAAI,EAAE,CAAC;QACP,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,SAAS,CAAC,SAAiB;YACzB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC5B,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;YACxB,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI;YACF,IAAI,OAAO;gBAAE,MAAM,mBAAmB,EAAE,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;gBACrB,IAAI,aAAa,EAAE,CAAC;oBAClB,8EAA8E;oBAC9E,gFAAgF;oBAChF,aAAa,GAAG,KAAK,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1D,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;gBAChC,CAAC;gBACD,UAAU,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;gBACtB,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;oBAAE,IAAI,EAAE,CAAC;YACxC,CAAC;oBAAS,CAAC;gBACT,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,SAAS,CAAC,IAAgB;YACxB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,KAAa,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,127 @@
1
+ import type { Device } from "@aigpu/core";
2
+ import { type ClaimedGroupValidationResult, type ValidationErrorSink } from "./claim-validation.ts";
3
+ import type { Bundle } from "./bundle.ts";
4
+ import type { Draw, DrawCallOptions } from "./draw.ts";
5
+ import type { Effect } from "./effect.ts";
6
+ import type { Target } from "./target.ts";
7
+ import { type ClearColor } from "./target-utils.ts";
8
+ import type { TimerSpan } from "./timer.ts";
9
+ import type { Visibility, VisibilityQuery } from "./visibility.ts";
10
+ import { type FrameOcclusionSource } from "./frame-protocols.ts";
11
+ import { type Gpu } from "./kernel.ts";
12
+ /**
13
+ * Opens a frame on `gpu`: advances the frame clock, runs `cb` against a fresh command encoder and
14
+ * submits it when the callback returns (or on the way out of a throw).
15
+ *
16
+ * Without a callback the frame is yours: encode passes at your own pace and finish it with
17
+ * `frame.submit()` or `frame.cancel()` — an unfinished frame holds every retain its passes took.
18
+ * Frames are not reentrant: opening one from inside another (or from a surface resize callback)
19
+ * throws `AIGPU-FRAME-REENTRANT`.
20
+ */
21
+ export declare function frame(gpu: Gpu, cb?: (frame: Frame) => void): Frame;
22
+ /**
23
+ * Runs `cb` once per animation frame until the returned handle is stopped.
24
+ *
25
+ * The loop belongs to the gpu's `scheduler` phase, so `gpu.dispose()` stops it before anything it
26
+ * could encode against is torn down; a loop that stops on its own drops that registration.
27
+ */
28
+ export declare function frameLoop(gpu: Gpu, cb: FrameLoopCallback, opts?: FrameLoopOptions): FrameLoopHandle;
29
+ export interface FramePassOptions {
30
+ readonly target: Target;
31
+ /** Omit or pass true to clear with `target.clearColor`; pass false to preserve color/depth; pass a color to clear this pass with it. */
32
+ readonly clear?: boolean | ClearColor;
33
+ /** Depth clear value used when the pass clears. Defaults to 1. Use 0 with depth: { compare: "greater" } for reversed-Z. */
34
+ readonly clearDepth?: number;
35
+ /** Stencil clear value used when the pass clears. Defaults to 0. Requires a depth format with a stencil aspect. */
36
+ readonly clearStencil?: number;
37
+ /** Opens the pass with a read-only depth attachment: depth can be tested against and sampled as a texture in the same pass, but not written. For combined depth-stencil formats the stencil aspect is read-only too. Defaults to false. */
38
+ readonly depthReadOnly?: boolean;
39
+ /** Viewport for every draw in this pass. Defaults to the full target. */
40
+ readonly viewport?: {
41
+ readonly x?: number;
42
+ readonly y?: number;
43
+ readonly width: number;
44
+ readonly height: number;
45
+ readonly minDepth?: number;
46
+ readonly maxDepth?: number;
47
+ };
48
+ /** Scissor rectangle [x, y, width, height] for every draw in this pass. Integers. Note: does not affect the clear — loadOp "clear" always clears the full attachment. */
49
+ readonly scissor?: readonly [number, number, number, number];
50
+ /** Times this pass on the GPU: pass `timer.span(name)` from a `timer(gpu)`. The pass duration lands in `timer.onResults` under `name`, in milliseconds. One span name per frame. */
51
+ readonly timer?: TimerSpan;
52
+ /** Enables occlusion queries in this pass: pass a `visibility(gpu)` instance, then wrap proxy draws in `pass.occlusion(handle, body)`. Requires a target with a depth attachment. */
53
+ readonly visibility?: Visibility;
54
+ }
55
+ export interface FrameLoopHandle {
56
+ stop(): void;
57
+ }
58
+ export interface FrameLoopOptions {
59
+ readonly fps?: number;
60
+ }
61
+ export type FrameLoopCallback = (frame: Frame) => void;
62
+ export declare class Frame {
63
+ #private;
64
+ private readonly device;
65
+ private readonly defaultTarget?;
66
+ private readonly errorSink?;
67
+ private readonly trackSettled?;
68
+ private readonly releaseLifecycle?;
69
+ /**
70
+ * Resolves after submitted GPU work completes and raw claimed-bind-group
71
+ * validation has been delivered to `gpu.onError`.
72
+ *
73
+ * This is a completion/timing signal only; it never rejects and is not an error
74
+ * channel.
75
+ */
76
+ done: Promise<void>;
77
+ constructor(device: Device, defaultTarget?: Target | undefined, errorSink?: ValidationErrorSink | undefined, trackSettled?: ((promise: Promise<unknown>) => void) | undefined, releaseLifecycle?: (() => void) | undefined);
78
+ pass(target: Target, body: Effect | Draw | ((pass: FramePass) => void)): void;
79
+ pass(options: FramePassOptions, body: Effect | Draw | ((pass: FramePass) => void)): void;
80
+ submit(): void;
81
+ /**
82
+ * Discards the frame without submitting it: the command encoder is dropped (nothing this frame
83
+ * encoded ever runs) and every telemetry instance it attached releases the retain it took on its
84
+ * query ring, so a `timer(gpu)` / `visibility(gpu)` can be disposed for good without waiting for
85
+ * `gpu.dispose()`. This is the explicit way out of the leak a manual `frame(gpu)` would otherwise
86
+ * hold: a frame is never assumed abandoned, because an old frame can still be submitted.
87
+ *
88
+ * Idempotent, like `submit()`: cancelling twice is a no-op, and `submit()` after `cancel()` does
89
+ * nothing. Cancelling a frame that was already submitted throws `AIGPU-FRAME-SUBMITTED` — its work
90
+ * is on the queue and cannot be taken back, so silently accepting the call would hide a real
91
+ * lifecycle bug.
92
+ */
93
+ cancel(): void;
94
+ }
95
+ export declare class FramePass {
96
+ #private;
97
+ private readonly encoder;
98
+ readonly target: Target;
99
+ private readonly validations;
100
+ private readonly depthReadOnly;
101
+ private readonly occlusionSource?;
102
+ private readonly frame?;
103
+ private readonly assertFrameOpen?;
104
+ constructor(encoder: GPURenderPassEncoder, target: Target, validations: ClaimedGroupValidationResult[], depthReadOnly?: boolean, occlusionSource?: FrameOcclusionSource | undefined, frame?: Frame | undefined, assertFrameOpen?: ((where: string) => void) | undefined);
105
+ draw(drawable: Draw | Effect, opts?: DrawCallOptions): void;
106
+ /**
107
+ * Wraps one or more draws in begin/endOcclusionQuery. The body ALWAYS executes; condition your
108
+ * real draws on `q.hidden` outside.
109
+ */
110
+ occlusion(query: VisibilityQuery, body: Draw | Effect | (() => void)): void;
111
+ bundles(...bundles: readonly Bundle[]): void;
112
+ }
113
+ export declare class FrameRunner {
114
+ #private;
115
+ private readonly createFrame;
116
+ private readonly advance;
117
+ private readonly trackLoop?;
118
+ /**
119
+ * @param trackLoop Lifecycle hook for the owning gpu: called with each started loop handle and
120
+ * returns the untrack function the handle runs when it stops on its own, so `gpu.dispose()` can
121
+ * stop the loops still running without holding on to the ones already stopped.
122
+ */
123
+ constructor(createFrame: () => Frame, advance: () => void, trackLoop?: ((handle: FrameLoopHandle) => () => void) | undefined);
124
+ frame(cb?: (frame: Frame) => void): Frame;
125
+ loop(cb: FrameLoopCallback, opts?: FrameLoopOptions): FrameLoopHandle;
126
+ }
127
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAqO,KAAK,4BAA4B,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEvU,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,EAAoD,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAA4G,KAAK,oBAAoB,EAA+C,MAAM,sBAAsB,CAAC;AAGxN,OAAO,EAAgB,KAAK,GAAG,EAAe,MAAM,aAAa,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,GAAE,gBAAqB,GAAG,eAAe,CAEvG;AAuBD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wIAAwI;IACxI,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACtC,2HAA2H;IAC3H,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mHAAmH;IACnH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2OAA2O;IAC3O,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,yKAAyK;IACzK,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,oLAAoL;IACpL,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,qLAAqL;IACrL,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAAG,IAAI,IAAI,IAAI,CAAA;CAAE;AACjD,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3D,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAEvD,qBAAa,KAAK;;IA4Bd,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IA/BpC;;;;;;OAMG;IACH,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAqB;gBAoBrB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,YAAA,EACtB,SAAS,CAAC,EAAE,mBAAmB,YAAA,EAC/B,YAAY,CAAC,GAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,aAAA,EAClD,gBAAgB,CAAC,GAAE,MAAM,IAAI,aAAA;IAMhD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,IAAI;IAC7E,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,IAAI;IAmGxF,MAAM,IAAI,IAAI;IA0Dd;;;;;;;;;;;OAWG;IACH,MAAM,IAAI,IAAI;CAqFf;AAED,qBAAa,SAAS;;IAER,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAwB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAkC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAU,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAAwB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAAS,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAAxR,OAAO,EAAE,oBAAoB,EAAW,MAAM,EAAE,MAAM,EAAmB,WAAW,EAAE,4BAA4B,EAAE,EAAmB,aAAa,UAAQ,EAAmB,eAAe,CAAC,EAAE,oBAAoB,YAAA,EAAmB,KAAK,CAAC,EAAE,KAAK,YAAA,EAAmB,eAAe,CAAC,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,aAAA;IAC9U,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,IAAI;IAM/D;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;IAkB3E,OAAO,CAAC,GAAG,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;CAa7C;AAqGD,qBAAa,WAAW;;IAOV,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAe,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAc,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IALxH;;;;OAIG;gBAC0B,WAAW,EAAE,MAAM,KAAK,EAAmB,OAAO,EAAE,MAAM,IAAI,EAAmB,SAAS,CAAC,GAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,IAAI,aAAA;IACjK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK;IAyBzC,IAAI,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,GAAE,gBAAqB,GAAG,eAAe;CAgC1E"}