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,56 @@
1
+ /**
2
+ * Shared public types with no runtime weight and no dependency on the `Gpu` facade.
3
+ *
4
+ * They live outside `gpu.ts` so feature modules (compute, storage, ping-pong, uniforms, ...)
5
+ * can be imported — and tree-shaken — without pulling the object that owns every factory.
6
+ */
7
+ import type { AIGpuError } from "./errors.ts";
8
+ import type { Target } from "./target.ts";
9
+ export interface ComputeOptions {
10
+ readonly label?: string;
11
+ readonly set?: Record<string, unknown>;
12
+ /** Values for WGSL `override` constants, keyed by name (or by numeric id as a string when the override has @id). Immutable after construction. */
13
+ readonly constants?: Readonly<Record<string, number | boolean>>;
14
+ /** Compute entry point to use when the shader has several. Defaults to the first @compute entry point. */
15
+ readonly entry?: string;
16
+ }
17
+ export interface DispatchOptions {
18
+ /** GPU-driven dispatch: read the workgroup counts from a buffer instead of CPU-side counts. */
19
+ readonly indirect: StorageBuffer | {
20
+ readonly buffer: StorageBuffer;
21
+ readonly offset?: number;
22
+ };
23
+ }
24
+ export interface Compute {
25
+ set(values: Record<string, unknown>): this;
26
+ dispatch(x: number, y?: number, z?: number): void;
27
+ dispatch(opts: DispatchOptions): void;
28
+ }
29
+ export type StorageAccess = "read" | "read-write";
30
+ export interface StorageOptions {
31
+ /** Binding access for shader reflection. Defaults to "read-write". */
32
+ readonly access?: StorageAccess;
33
+ /** Adds the "indirect" buffer usage so the buffer can supply GPU-read draw/dispatch arguments. Defaults to false. */
34
+ readonly indirect?: boolean;
35
+ }
36
+ export interface StorageBuffer {
37
+ readonly size: number;
38
+ readonly access: StorageAccess;
39
+ read(): Promise<ArrayBuffer>;
40
+ write(data: BufferSource): void;
41
+ }
42
+ export interface PingPongTargets {
43
+ readonly read: Target;
44
+ readonly write: Target;
45
+ swap(): void;
46
+ }
47
+ export interface PingPongStorage {
48
+ readonly read: StorageBuffer;
49
+ readonly write: StorageBuffer;
50
+ swap(): void;
51
+ }
52
+ export interface SharedUniforms<T extends Record<string, unknown> = Record<string, unknown>> {
53
+ set(values: Partial<T>): void;
54
+ }
55
+ export type GpuErrorListener = (error: AIGpuError) => void;
56
+ //# sourceMappingURL=api-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,kJAAkJ;IAClJ,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAChE,0GAA0G;IAC1G,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,eAAe;IAC9B,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjG;AACD,MAAM,WAAW,OAAO;IAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE;AACjK,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC;AAClD,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC,qHAAqH;IACrH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAAC,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE;AACvJ,MAAM,WAAW,eAAe;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,IAAI,CAAA;CAAE;AAChG,MAAM,WAAW,eAAe;IAAG,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAAC,IAAI,IAAI,IAAI,CAAA;CAAE;AAC9G,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;CAAE;AAC9H,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.js","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { ResourceIdentity, UnsubscribeResourceDestroy } from "@aigpu/core";
2
+ export type BindGroupIdentityPart = ResourceIdentity | {
3
+ readonly kind: string;
4
+ readonly id: number;
5
+ } | string | number;
6
+ export type BindGroupFactory = () => GPUBindGroup;
7
+ export interface BindGroupCache {
8
+ getOrCreate(drawId: number | string, group: number, identityTuple: readonly BindGroupIdentityPart[], factory: BindGroupFactory): GPUBindGroup;
9
+ evictIdentity(identity: BindGroupIdentityPart): void;
10
+ clearDraw(drawId: number | string): void;
11
+ dispose(): void;
12
+ }
13
+ export declare function createBindGroupCache(): BindGroupCache;
14
+ export declare function identityKey(identity: BindGroupIdentityPart): string;
15
+ export declare function subscribeEviction(resource: {
16
+ onDestroy?: (cb: (resource: unknown) => void) => UnsubscribeResourceDestroy;
17
+ readonly resourceIdentity?: ResourceIdentity;
18
+ }, cache: BindGroupCache): UnsubscribeResourceDestroy | undefined;
19
+ //# sourceMappingURL=bind-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind-cache.d.ts","sourceRoot":"","sources":["../src/bind-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AACxH,MAAM,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,qBAAqB,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAAC;IAC9I,aAAa,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CA2BrD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAGnE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,KAAK,0BAA0B,CAAC;IAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CAAE,EACvI,KAAK,EAAE,cAAc,GACpB,0BAA0B,GAAG,SAAS,CAIxC"}
@@ -0,0 +1,43 @@
1
+ export function createBindGroupCache() {
2
+ const entries = new Map();
3
+ return {
4
+ getOrCreate(drawId, group, identityTuple, factory) {
5
+ const identities = identityTuple.map(identityKey);
6
+ const key = `${drawId}:${group}:${identities.join("|")}`;
7
+ const existing = entries.get(key);
8
+ if (existing)
9
+ return existing.bindGroup;
10
+ const bindGroup = factory();
11
+ entries.set(key, { identities, bindGroup });
12
+ return bindGroup;
13
+ },
14
+ evictIdentity(identity) {
15
+ const needle = identityKey(identity);
16
+ for (const [key, entry] of entries) {
17
+ if (entry.identities.includes(needle))
18
+ entries.delete(key);
19
+ }
20
+ },
21
+ clearDraw(drawId) {
22
+ const prefix = `${drawId}:`;
23
+ for (const key of entries.keys())
24
+ if (key.startsWith(prefix))
25
+ entries.delete(key);
26
+ },
27
+ dispose() {
28
+ entries.clear();
29
+ },
30
+ };
31
+ }
32
+ export function identityKey(identity) {
33
+ if (typeof identity === "string" || typeof identity === "number")
34
+ return String(identity);
35
+ return `${identity.kind}:${identity.id}`;
36
+ }
37
+ export function subscribeEviction(resource, cache) {
38
+ const identity = resource.resourceIdentity;
39
+ if (!identity || typeof resource.onDestroy !== "function")
40
+ return undefined;
41
+ return resource.onDestroy(() => cache.evictIdentity(identity));
42
+ }
43
+ //# sourceMappingURL=bind-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind-cache.js","sourceRoot":"","sources":["../src/bind-cache.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwF,CAAC;IAEhH,OAAO;QACL,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO;YAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC,SAAS,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,aAAa,CAAC,QAAQ;YACpB,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,SAAS,CAAC,MAAM;YACd,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;gBAAE,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpF,CAAC;QACD,OAAO;YACL,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAA+B;IACzD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1F,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAuI,EACvI,KAAqB;IAErB,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC5E,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type Draw, type DrawCallOptions } from "./draw.ts";
2
+ import { type Effect } from "./effect.ts";
3
+ import type { CompileTarget } from "./target.ts";
4
+ import type { Gpu } from "./kernel.ts";
5
+ /**
6
+ * Records an explicit WebGPU render bundle: the draws in `record` are encoded once and replayed
7
+ * with `pass.bundles(bundle)`.
8
+ *
9
+ * A bundle freezes its commands, its bind groups and the target signature it was recorded for; the
10
+ * recorded state is re-checked at replay and a mismatch throws `AIGPU-R3-BUNDLE-STALE` instead of
11
+ * drawing something stale. Recording against a `Surface` is only legal inside a frame, because the
12
+ * surface's current texture — and therefore its format — is only defined there.
13
+ */
14
+ export declare function bundle(gpu: Gpu, opts: BundleOptions, record: (recorder: BundleRecorder) => void): Bundle;
15
+ export interface BundleOptions {
16
+ readonly target: CompileTarget;
17
+ readonly label?: string;
18
+ }
19
+ export interface BundleRecorder {
20
+ draw(drawable: Draw | Effect, opts?: DrawCallOptions): void;
21
+ }
22
+ export interface Bundle {
23
+ readonly id: string;
24
+ readonly gpu: GPURenderBundle;
25
+ }
26
+ /** Records explicit WebGPU render bundles and keeps the R3 stale signature checked at replay time. */
27
+ export declare function createBundle(device: {
28
+ readonly gpu: GPUDevice;
29
+ }, opts: BundleOptions, record: (recorder: BundleRecorder) => void): Bundle;
30
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAkJ,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5M,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,aAAa,CAAC;AAM1E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,CAExG;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;CAC/B;AAKD,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;CAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,CAOzI"}
package/dist/bundle.js ADDED
@@ -0,0 +1,127 @@
1
+ import { createRenderBundle } from "./core/render-bundle.js";
2
+ import { drawUsesBlendConstant, drawUsesStencilReference, encodeDraw, registerDrawBundle } from "./draw.js";
3
+ import { InternalEffect, effectDraw } from "./effect.js";
4
+ import { normalizeSignature, signatureKeyOf, validateTargetSignature } from "./pipeline-store.js";
5
+ import { bundleBlendConstantError, bundleStencilReferenceError, surfaceNotInFrameError, AIGpuError } from "./errors.js";
6
+ import { isFrameActive, isSurface } from "./surface.js";
7
+ import { FRAME_BUNDLE } from "./frame-protocols.js";
8
+ import { liveKernel } from "./live-kernel.js";
9
+ /**
10
+ * Records an explicit WebGPU render bundle: the draws in `record` are encoded once and replayed
11
+ * with `pass.bundles(bundle)`.
12
+ *
13
+ * A bundle freezes its commands, its bind groups and the target signature it was recorded for; the
14
+ * recorded state is re-checked at replay and a mismatch throws `AIGPU-R3-BUNDLE-STALE` instead of
15
+ * drawing something stale. Recording against a `Surface` is only legal inside a frame, because the
16
+ * surface's current texture — and therefore its format — is only defined there.
17
+ */
18
+ export function bundle(gpu, opts, record) {
19
+ return createBundle(liveKernel(gpu, "bundle").device, opts, record);
20
+ }
21
+ let nextBundleId = 1;
22
+ let recordingDepth = 0;
23
+ /** Records explicit WebGPU render bundles and keeps the R3 stale signature checked at replay time. */
24
+ export function createBundle(device, opts, record) {
25
+ const id = opts.label ?? `bundle${nextBundleId++}`;
26
+ if (isSurface(opts.target) && !isFrameActive())
27
+ throw surfaceNotInFrameError("bundle");
28
+ const signature = normalizeBundleSignature(opts.target);
29
+ const bundle = new RecordedBundle(device, id, signature);
30
+ bundle.record(record);
31
+ return bundle;
32
+ }
33
+ class RecordedBundle {
34
+ device;
35
+ id;
36
+ signature;
37
+ gpu;
38
+ #staleEvent;
39
+ #signatureKey;
40
+ #draws = new Set();
41
+ constructor(device, id, signature) {
42
+ this.device = device;
43
+ this.id = id;
44
+ this.signature = signature;
45
+ this.#signatureKey = signatureKeyOf(signature);
46
+ }
47
+ record(record) {
48
+ this.gpu = createRenderBundle(this.device, {
49
+ label: this.id,
50
+ colorFormats: this.signature.colors,
51
+ depthStencilFormat: this.signature.depth,
52
+ sampleCount: this.signature.sampleCount ?? 1,
53
+ record: (recorder) => this.#recordCommands(record, recorder.gpu),
54
+ });
55
+ for (const draw of this.#draws)
56
+ registerDrawBundle(draw, this);
57
+ }
58
+ /**
59
+ * Frame bundle protocol: `pass.bundles()` replays through this, so `frame.ts` never imports
60
+ * bundle.ts. The recorded bundle is its own protocol object — `gpu` and the staleness check.
61
+ */
62
+ get [FRAME_BUNDLE]() { return this; }
63
+ markStale(event) {
64
+ if (recordingDepth > 0)
65
+ return;
66
+ this.#staleEvent ??= event;
67
+ }
68
+ assertReplayable(target) {
69
+ const actual = normalizeBundleSignature(target);
70
+ const actualKey = signatureKeyOf(actual);
71
+ if (this.#signatureKey !== actualKey)
72
+ throw bundleStaleError(this.id, targetSignatureStaleMessage(this.id, this.#signatureKey, actualKey));
73
+ if (this.#staleEvent)
74
+ throw bundleStaleError(this.id, staleEventMessage(this.id, this.#staleEvent));
75
+ }
76
+ remember(draw) {
77
+ this.#draws.add(draw);
78
+ }
79
+ #recordCommands(record, encoder) {
80
+ recordingDepth += 1;
81
+ try {
82
+ record(new ExplicitBundleRecorder(this, encoder));
83
+ }
84
+ finally {
85
+ recordingDepth -= 1;
86
+ }
87
+ }
88
+ }
89
+ class ExplicitBundleRecorder {
90
+ bundle;
91
+ encoder;
92
+ constructor(bundle, encoder) {
93
+ this.bundle = bundle;
94
+ this.encoder = encoder;
95
+ }
96
+ draw(drawable, opts = {}) {
97
+ // Blend/writeMask are constructor-only draw pipeline state. If they ever become mutable or per-call,
98
+ // bundles need a new staleness dimension beyond the target signature checked at replay.
99
+ const draw = drawable instanceof InternalEffect ? effectDraw(drawable) : drawable;
100
+ // The blend constant is render-pass state; GPURenderBundleEncoder has no setBlendConstant, so reject at recording.
101
+ if (drawUsesBlendConstant(draw))
102
+ throw bundleBlendConstantError(this.bundle.id, draw.label);
103
+ // Likewise the stencil reference: GPURenderBundleEncoder has no setStencilReference. Stencil pipeline state without ref records fine.
104
+ if (drawUsesStencilReference(draw))
105
+ throw bundleStencilReferenceError(this.bundle.id, draw.label);
106
+ this.bundle.remember(draw);
107
+ encodeDraw(draw, this.encoder, this.bundle.signature, opts);
108
+ }
109
+ }
110
+ function normalizeBundleSignature(target) {
111
+ const signature = normalizeSignature(target);
112
+ validateTargetSignature(signature, "bundle");
113
+ return signature;
114
+ }
115
+ function targetSignatureStaleMessage(id, recordedKey, actualKey) {
116
+ return `bundle '${id}' is stale: the replay target signature does not match the recorded signature. Bundles freeze format/depth/sampleCount and bind groups.\n Recorded signature: ${recordedKey}\n Actual signature: ${actualKey}\n Fix: re-record the bundle for this target → ${id} = bundle(gpu, { target: scene }, ...)\n (re-recording is always your responsibility; the library only detects this).`;
117
+ }
118
+ function staleEventMessage(id, event) {
119
+ if (event.kind === "group-claim") {
120
+ return `bundle '${id}' is stale: group ${event.group} of draw\n '${event.drawLabel}' changed bind group after recording. Bundles freeze commands and bind groups.\n Fix: re-record it → ${id} = bundle(gpu, { target: scene }, ...)\n (re-recording is always your responsibility; the library only detects this).`;
121
+ }
122
+ return `bundle '${id}' is stale: binding \`${event.bindingName}\` (@group(${event.group}) @binding(${event.binding})) of draw\n '${event.drawLabel}' changed resource after recording. Bundles freeze commands and bind groups.\n Fix: re-record it → ${id} = bundle(gpu, { target: scene }, ...)\n (re-recording is always your responsibility; the library only detects this).`;
123
+ }
124
+ function bundleStaleError(id, message) {
125
+ return new AIGpuError({ code: "AIGPU-R3-BUNDLE-STALE", message, where: `bundle '${id}' replay` });
126
+ }
127
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Device } from "@aigpu/core";
2
+ import { type ClaimedGroupValidationContext, type ClaimedGroupValidationResult } from "./claim-validation.ts";
3
+ /**
4
+ * Ends a render pass and maps native end-time failures back to raw group claims.
5
+ *
6
+ * Raw WebGPU validation scopes are device-global, so this abort helper drains
7
+ * only scopes still open after a failing pass end and suppresses every collected
8
+ * validation promise before rethrowing. Callers pass the fallback context they
9
+ * already used before this extraction so end-failure diagnostics stay unchanged.
10
+ *
11
+ * @internal
12
+ */
13
+ export declare function endRenderPassWithClaimValidation(device: Device, pass: GPURenderPassEncoder, validations: ClaimedGroupValidationResult[], fallbackContext?: ClaimedGroupValidationContext): void;
14
+ //# sourceMappingURL=claim-validation-encode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-validation-encode.d.ts","sourceRoot":"","sources":["../src/claim-validation-encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EAClC,MAAM,uBAAuB,CAAC;AAG/B;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,oBAAoB,EAC1B,WAAW,EAAE,4BAA4B,EAAE,EAC3C,eAAe,CAAC,EAAE,6BAA6B,GAC9C,IAAI,CAYN"}
@@ -0,0 +1,28 @@
1
+ import { discardClaimedGroupValidationResults, popClaimedGroupValidationScopes, } from "./claim-validation.js";
2
+ import { claimedGroupNativeValidationError } from "./errors.js";
3
+ /**
4
+ * Ends a render pass and maps native end-time failures back to raw group claims.
5
+ *
6
+ * Raw WebGPU validation scopes are device-global, so this abort helper drains
7
+ * only scopes still open after a failing pass end and suppresses every collected
8
+ * validation promise before rethrowing. Callers pass the fallback context they
9
+ * already used before this extraction so end-failure diagnostics stay unchanged.
10
+ *
11
+ * @internal
12
+ */
13
+ export function endRenderPassWithClaimValidation(device, pass, validations, fallbackContext) {
14
+ try {
15
+ pass.end();
16
+ }
17
+ catch (error) {
18
+ const scopes = popClaimedGroupValidationScopes(device);
19
+ discardClaimedGroupValidationResults(validations);
20
+ discardClaimedGroupValidationResults(scopes);
21
+ validations.length = 0;
22
+ const context = scopes[0]?.context ?? fallbackContext;
23
+ if (context)
24
+ throw claimedGroupNativeValidationError(context.label, context.group, error);
25
+ throw error;
26
+ }
27
+ }
28
+ //# sourceMappingURL=claim-validation-encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-validation-encode.js","sourceRoot":"","sources":["../src/claim-validation-encode.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oCAAoC,EACpC,+BAA+B,GAGhC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AAEhE;;;;;;;;;GASG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAc,EACd,IAA0B,EAC1B,WAA2C,EAC3C,eAA+C;IAE/C,IAAI,CAAC;QACH,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;QACvD,oCAAoC,CAAC,WAAW,CAAC,CAAC;QAClD,oCAAoC,CAAC,MAAM,CAAC,CAAC;QAC7C,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,eAAe,CAAC;QACtD,IAAI,OAAO;YAAE,MAAM,iCAAiC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { Device } from "@aigpu/core";
2
+ import { type AIGpuError } from "./errors.ts";
3
+ export interface ClaimedGroupValidationContext {
4
+ readonly label: string;
5
+ readonly group: number;
6
+ }
7
+ export interface ClaimedGroupValidationResult {
8
+ readonly context: ClaimedGroupValidationContext;
9
+ readonly error: Promise<GPUError | null>;
10
+ }
11
+ export type ValidationErrorSink = (error: AIGpuError) => void | Promise<void>;
12
+ export interface ClaimedGroupValidationDoneOptions {
13
+ readonly errorSink?: ValidationErrorSink;
14
+ }
15
+ /**
16
+ * Opens a native WebGPU validation scope for one raw claimed bind group.
17
+ *
18
+ * WebGPU error scopes are device-global and strictly LIFO, so callers must pair
19
+ * this with `popLastClaimedGroupValidationScope()` immediately after the small
20
+ * protected encode operation. Metadata-backed claims bypass this helper because
21
+ * aigpu can validate their layout synchronously and the normal path should not
22
+ * pay for native error scopes.
23
+ */
24
+ export declare function pushClaimedGroupValidationScope(device: Device, context: ClaimedGroupValidationContext): void;
25
+ /**
26
+ * Pops the most recent raw-claim scope in native LIFO order and returns its promise.
27
+ *
28
+ * The returned promise is delivered through `gpu.onError` and tracked by
29
+ * `Frame.done` / `gpu.settled()` after submit. Popping immediately keeps the device-global WebGPU scope stack from
30
+ * being shared accidentally by overlapping frames or one-shot draws.
31
+ */
32
+ export declare function popLastClaimedGroupValidationScope(device: Device): ClaimedGroupValidationResult | undefined;
33
+ /**
34
+ * Pops every currently open raw-claim scope for this device in native LIFO order.
35
+ *
36
+ * Device-global WebGPU error scopes are not an ownership/collection boundary;
37
+ * this exists only for abort paths that must drain scopes left open by a failed
38
+ * protected encode region before rethrowing.
39
+ *
40
+ * @internal
41
+ */
42
+ export declare function popClaimedGroupValidationScopes(device: Device): readonly ClaimedGroupValidationResult[];
43
+ /** Discards one open raw-claim scope after a synchronous encode failure. */
44
+ export declare function discardLastClaimedGroupValidationScope(device: Device): void;
45
+ /**
46
+ * Discards every currently open raw-claim scope for this device after aborting an encode region.
47
+ *
48
+ * This is intentionally device-global and abort-only: normal validation owners
49
+ * pop scopes immediately and store the returned promises on their frame/draw.
50
+ *
51
+ * @internal
52
+ */
53
+ export declare function discardClaimedGroupValidationScopes(device: Device): void;
54
+ /** Suppresses already-popped validation promises when their frame/draw will not submit. */
55
+ export declare function discardClaimedGroupValidationResults(results: readonly ClaimedGroupValidationResult[]): void;
56
+ /**
57
+ * Resolves after the device queue reports submitted work completion, when supported.
58
+ *
59
+ * This is feature-guarded because the mock and some compatibility environments
60
+ * may omit `onSubmittedWorkDone`.
61
+ */
62
+ export declare function submittedWorkDone(device: Device): Promise<void>;
63
+ /**
64
+ * Awaits raw claimed-bind-group validation collected during encode.
65
+ *
66
+ * No scopes remain open here: native scopes were already popped in LIFO order
67
+ * immediately after each protected encode operation. Validation errors are
68
+ * delivered to the supplied device-level error sink as `AIGPU-R4-GROUP-VALIDATION`;
69
+ * this promise resolves after delivery and never rejects.
70
+ */
71
+ export declare function claimedGroupValidationDone(device: Device, results?: readonly ClaimedGroupValidationResult[], opts?: ClaimedGroupValidationDoneOptions): Promise<void>;
72
+ export declare function preferClaimedGroupValidationResult(preferred: ClaimedGroupValidationResult, fallback: ClaimedGroupValidationResult): ClaimedGroupValidationResult;
73
+ //# sourceMappingURL=claim-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-validation.d.ts","sourceRoot":"","sources":["../src/claim-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9E,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;CAC1C;AAID;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAM5G;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS,CAM3G;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,4BAA4B,EAAE,CAQvG;AAED,4EAA4E;AAC5E,wBAAgB,sCAAsC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAExE;AAED,2FAA2F;AAC3F,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,SAAS,4BAA4B,EAAE,GAAG,IAAI,CAE3G;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,SAAS,4BAA4B,EAAO,EAAE,IAAI,GAAE,iCAAsC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7K;AAED,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,4BAA4B,EAAE,QAAQ,EAAE,4BAA4B,GAAG,4BAA4B,CAKhK"}
@@ -0,0 +1,135 @@
1
+ import { claimedGroupNativeValidationError } from "./errors.js";
2
+ const pendingScopes = new WeakMap();
3
+ /**
4
+ * Opens a native WebGPU validation scope for one raw claimed bind group.
5
+ *
6
+ * WebGPU error scopes are device-global and strictly LIFO, so callers must pair
7
+ * this with `popLastClaimedGroupValidationScope()` immediately after the small
8
+ * protected encode operation. Metadata-backed claims bypass this helper because
9
+ * aigpu can validate their layout synchronously and the normal path should not
10
+ * pay for native error scopes.
11
+ */
12
+ export function pushClaimedGroupValidationScope(device, context) {
13
+ if (!device.gpu.pushErrorScope || !device.gpu.popErrorScope)
14
+ return;
15
+ device.gpu.pushErrorScope("validation");
16
+ const pending = pendingScopes.get(device.gpu);
17
+ if (pending)
18
+ pending.push(context);
19
+ else
20
+ pendingScopes.set(device.gpu, [context]);
21
+ }
22
+ /**
23
+ * Pops the most recent raw-claim scope in native LIFO order and returns its promise.
24
+ *
25
+ * The returned promise is delivered through `gpu.onError` and tracked by
26
+ * `Frame.done` / `gpu.settled()` after submit. Popping immediately keeps the device-global WebGPU scope stack from
27
+ * being shared accidentally by overlapping frames or one-shot draws.
28
+ */
29
+ export function popLastClaimedGroupValidationScope(device) {
30
+ const pending = pendingScopes.get(device.gpu);
31
+ if (!pending?.length || !device.gpu.popErrorScope)
32
+ return undefined;
33
+ const context = pending.pop();
34
+ if (!pending.length)
35
+ pendingScopes.delete(device.gpu);
36
+ return { context, error: device.gpu.popErrorScope() };
37
+ }
38
+ /**
39
+ * Pops every currently open raw-claim scope for this device in native LIFO order.
40
+ *
41
+ * Device-global WebGPU error scopes are not an ownership/collection boundary;
42
+ * this exists only for abort paths that must drain scopes left open by a failed
43
+ * protected encode region before rethrowing.
44
+ *
45
+ * @internal
46
+ */
47
+ export function popClaimedGroupValidationScopes(device) {
48
+ const results = [];
49
+ let result = popLastClaimedGroupValidationScope(device);
50
+ while (result) {
51
+ results.push(result);
52
+ result = popLastClaimedGroupValidationScope(device);
53
+ }
54
+ return results;
55
+ }
56
+ /** Discards one open raw-claim scope after a synchronous encode failure. */
57
+ export function discardLastClaimedGroupValidationScope(device) {
58
+ const result = popLastClaimedGroupValidationScope(device);
59
+ if (result)
60
+ suppressClaimedGroupValidationResult(result);
61
+ }
62
+ /**
63
+ * Discards every currently open raw-claim scope for this device after aborting an encode region.
64
+ *
65
+ * This is intentionally device-global and abort-only: normal validation owners
66
+ * pop scopes immediately and store the returned promises on their frame/draw.
67
+ *
68
+ * @internal
69
+ */
70
+ export function discardClaimedGroupValidationScopes(device) {
71
+ for (const result of popClaimedGroupValidationScopes(device))
72
+ suppressClaimedGroupValidationResult(result);
73
+ }
74
+ /** Suppresses already-popped validation promises when their frame/draw will not submit. */
75
+ export function discardClaimedGroupValidationResults(results) {
76
+ for (const result of results)
77
+ suppressClaimedGroupValidationResult(result);
78
+ }
79
+ /**
80
+ * Resolves after the device queue reports submitted work completion, when supported.
81
+ *
82
+ * This is feature-guarded because the mock and some compatibility environments
83
+ * may omit `onSubmittedWorkDone`.
84
+ */
85
+ export function submittedWorkDone(device) {
86
+ return device.gpu.queue.onSubmittedWorkDone?.() ?? Promise.resolve();
87
+ }
88
+ /**
89
+ * Awaits raw claimed-bind-group validation collected during encode.
90
+ *
91
+ * No scopes remain open here: native scopes were already popped in LIFO order
92
+ * immediately after each protected encode operation. Validation errors are
93
+ * delivered to the supplied device-level error sink as `AIGPU-R4-GROUP-VALIDATION`;
94
+ * this promise resolves after delivery and never rejects.
95
+ */
96
+ export function claimedGroupValidationDone(device, results = [], opts = {}) {
97
+ return settleClaimedGroupValidations(device, results, opts.errorSink ?? defaultErrorSink);
98
+ }
99
+ export function preferClaimedGroupValidationResult(preferred, fallback) {
100
+ return {
101
+ context: preferred.context,
102
+ error: preferValidationError(preferred.error, fallback.error),
103
+ };
104
+ }
105
+ async function preferValidationError(preferred, fallback) {
106
+ const results = await Promise.allSettled([preferred, fallback]);
107
+ for (const result of results) {
108
+ if (result.status === "fulfilled" && result.value)
109
+ return result.value;
110
+ }
111
+ const rejection = results.find((result) => result.status === "rejected");
112
+ if (rejection?.status === "rejected")
113
+ throw rejection.reason;
114
+ return null;
115
+ }
116
+ async function settleClaimedGroupValidations(device, results, errorSink) {
117
+ await submittedWorkDone(device);
118
+ for (const result of results) {
119
+ try {
120
+ const error = await result.error;
121
+ if (error)
122
+ await errorSink(claimedGroupNativeValidationError(result.context.label, result.context.group, error));
123
+ }
124
+ catch (error) {
125
+ await errorSink(claimedGroupNativeValidationError(result.context.label, result.context.group, error));
126
+ }
127
+ }
128
+ }
129
+ function suppressClaimedGroupValidationResult(result) {
130
+ void result.error.catch(() => undefined);
131
+ }
132
+ function defaultErrorSink(error) {
133
+ console.error(error);
134
+ }
135
+ //# sourceMappingURL=claim-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-validation.js","sourceRoot":"","sources":["../src/claim-validation.ts"],"names":[],"mappings":"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"}