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 @@
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Texture, type Device, type ResourceDestroyCallback, type ResourceIdentity, type UnsubscribeResourceDestroy } from "@aigpu/core";
2
+ import type { RenderPassDescriptorOptions, Target, TargetOptions } from "./target.ts";
3
+ import { type ClearColor } from "./target-utils.ts";
4
+ import type { Gpu } from "./kernel.ts";
5
+ /**
6
+ * Offscreen render target: color attachments (plus optional depth and MSAA) sized in pixels.
7
+ *
8
+ * Its textures belong to the gpu's device, so `gpu.dispose()` releases them with the device; the
9
+ * target is not registered as a separate kernel resource because there is nothing to tear down
10
+ * ahead of the device — unlike a surface, which must unconfigure its canvas context first.
11
+ */
12
+ export declare function target(gpu: Gpu, opts: TargetOptions): Target;
13
+ /** Offscreen render target. MSAA targets render into sampleCount=4 attachments and resolve into `.color`. */
14
+ export declare class OffscreenTarget implements Target {
15
+ #private;
16
+ private readonly device;
17
+ private readonly options;
18
+ readonly resourceIdentity: ResourceIdentity;
19
+ constructor(device: Device, options: TargetOptions);
20
+ get gpu(): unknown;
21
+ get size(): readonly [number, number];
22
+ get texelSize(): readonly [number, number];
23
+ /** Resolved, sampleable color texture. For MSAA targets, render passes resolve into this texture. */
24
+ get color(): Texture;
25
+ /** Resolved, sampleable color textures. For MSAA targets, render passes resolve into these textures. */
26
+ get colors(): readonly [Texture, ...Texture[]];
27
+ get depth(): Texture | undefined;
28
+ get format(): GPUTextureFormat;
29
+ /** Default clear color of this target; passes that clear without naming a color use it. */
30
+ get clearColor(): ClearColor;
31
+ set clearColor(value: ClearColor);
32
+ get sampleCount(): 1 | 4;
33
+ resize(size: readonly [number, number]): void;
34
+ read(): Promise<Uint8Array>;
35
+ readFloats(): Promise<Float32Array>;
36
+ onDestroy(cb: ResourceDestroyCallback<Target>): UnsubscribeResourceDestroy;
37
+ onTexturesRecreated(cb: () => void): () => void;
38
+ destroy(): void;
39
+ renderPassDescriptor(opts?: RenderPassDescriptorOptions): GPURenderPassDescriptor;
40
+ }
41
+ //# sourceMappingURL=target-offscreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-offscreen.d.ts","sourceRoot":"","sources":["../src/target-offscreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAyC,KAAK,MAAM,EAAE,KAAK,uBAAuB,EAAE,KAAK,gBAAgB,EAAE,KAAK,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAChL,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAC5G,OAAO,EAA8K,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhO,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAE5D;AAED,6GAA6G;AAC7G,qBAAa,eAAgB,YAAW,MAAM;;IAUhC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;IATrE,QAAQ,CAAC,gBAAgB,mBAA2C;gBASvC,MAAM,EAAE,MAAM,EAAmB,OAAO,EAAE,aAAa;IASpF,IAAI,GAAG,IAAI,OAAO,CAA2B;IAC7C,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAA8B;IACnE,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAiE;IAC3G,qGAAqG;IACrG,IAAI,KAAK,IAAI,OAAO,CAAmC;IACvD,wGAAwG;IACxG,IAAI,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAgC;IAC9E,IAAI,KAAK,IAAI,OAAO,GAAG,SAAS,CAA+B;IAC/D,IAAI,MAAM,IAAI,gBAAgB,CAAmE;IACjG,2FAA2F;IAC3F,IAAI,UAAU,IAAI,UAAU,CAA6C;IACzE,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAwE;IACxG,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,CAAyC;IAEjE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAKvC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAC3B,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,uBAAuB,CAAC,MAAM,CAAC,GAAG,0BAA0B;IAC1E,mBAAmB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAC/C,OAAO,IAAI,IAAI;IAEf,oBAAoB,CAAC,IAAI,GAAE,2BAAgC,GAAG,uBAAuB;CA0DtF"}
@@ -0,0 +1,115 @@
1
+ import { createResourceIdentity, DestroySignal } from "@aigpu/core";
2
+ import { BUILT_IN_CLEAR_COLOR, colorAttachment, copyClearColor, colorSpecsFor, depthAttachment, depthFormatFor, sampleCountFor, sameSize, validateClearColor, validateTargetOptions } from "./target-utils.js";
3
+ import { liveKernel } from "./live-kernel.js";
4
+ /**
5
+ * Offscreen render target: color attachments (plus optional depth and MSAA) sized in pixels.
6
+ *
7
+ * Its textures belong to the gpu's device, so `gpu.dispose()` releases them with the device; the
8
+ * target is not registered as a separate kernel resource because there is nothing to tear down
9
+ * ahead of the device — unlike a surface, which must unconfigure its canvas context first.
10
+ */
11
+ export function target(gpu, opts) {
12
+ return new OffscreenTarget(liveKernel(gpu, "target").device, opts);
13
+ }
14
+ /** Offscreen render target. MSAA targets render into sampleCount=4 attachments and resolve into `.color`. */
15
+ export class OffscreenTarget {
16
+ device;
17
+ options;
18
+ resourceIdentity = createResourceIdentity("render-target");
19
+ #destroySignal = new DestroySignal();
20
+ #texturesRecreatedCallbacks = new Set();
21
+ #currentSize;
22
+ #currentColors;
23
+ #currentMsaaColors;
24
+ #currentDepth;
25
+ #clearColor;
26
+ constructor(device, options) {
27
+ this.device = device;
28
+ this.options = options;
29
+ validateTargetOptions(options, device);
30
+ this.#clearColor = options.clearColor === undefined ? BUILT_IN_CLEAR_COLOR : validateClearColor(options.clearColor, "target.clearColor");
31
+ this.#currentSize = options.size;
32
+ this.#currentColors = this.#createResolvedColors();
33
+ this.#currentMsaaColors = this.sampleCount === 4 ? this.#createMsaaColors() : undefined;
34
+ this.#currentDepth = this.#createDepth();
35
+ }
36
+ get gpu() { return this.color.gpu; }
37
+ get size() { return this.#currentSize; }
38
+ get texelSize() { return [1 / this.#currentSize[0], 1 / this.#currentSize[1]]; }
39
+ /** Resolved, sampleable color texture. For MSAA targets, render passes resolve into this texture. */
40
+ get color() { return this.#currentColors[0]; }
41
+ /** Resolved, sampleable color textures. For MSAA targets, render passes resolve into these textures. */
42
+ get colors() { return this.#currentColors; }
43
+ get depth() { return this.#currentDepth; }
44
+ get format() { return colorSpecsFor(this.options)[0]?.format ?? "rgba8unorm"; }
45
+ /** Default clear color of this target; passes that clear without naming a color use it. */
46
+ get clearColor() { return copyClearColor(this.#clearColor); }
47
+ set clearColor(value) { this.#clearColor = validateClearColor(value, "target.clearColor"); }
48
+ get sampleCount() { return sampleCountFor(this.options); }
49
+ resize(size) {
50
+ if (sameSize(this.#currentSize, size))
51
+ return;
52
+ this.#recreateTextures(size);
53
+ }
54
+ async read() { return this.color.read(); }
55
+ async readFloats() { return this.color.readFloats(); }
56
+ onDestroy(cb) { return this.#destroySignal.onDestroy(this, cb); }
57
+ onTexturesRecreated(cb) { this.#texturesRecreatedCallbacks.add(cb); return () => { this.#texturesRecreatedCallbacks.delete(cb); }; }
58
+ destroy() { this.#destroySignal.emit(this); this.#texturesRecreatedCallbacks.clear(); this.#destroyTextures(); }
59
+ renderPassDescriptor(opts = {}) {
60
+ const { clear = [0, 0, 0, 1], preserve, clearDepth, clearStencil, depthReadOnly } = opts;
61
+ return {
62
+ colorAttachments: this.#currentColors.map((resolved, index) => colorAttachment(resolved, this.#currentMsaaColors?.[index], clear, preserve)),
63
+ depthStencilAttachment: this.#currentDepth ? depthAttachment(this.#currentDepth, preserve, clearDepth, clearStencil, depthReadOnly) : undefined,
64
+ };
65
+ }
66
+ #recreateTextures(size) {
67
+ this.#destroyTextures();
68
+ this.#currentSize = [size[0], size[1]];
69
+ this.#currentColors = this.#createResolvedColors();
70
+ this.#currentMsaaColors = this.sampleCount === 4 ? this.#createMsaaColors() : undefined;
71
+ this.#currentDepth = this.#createDepth();
72
+ this.#emitTexturesRecreated();
73
+ }
74
+ #emitTexturesRecreated() {
75
+ for (const cb of [...this.#texturesRecreatedCallbacks])
76
+ cb();
77
+ }
78
+ #destroyTextures() {
79
+ for (const texture of this.#currentColors)
80
+ texture.destroy();
81
+ for (const texture of this.#currentMsaaColors ?? [])
82
+ texture.destroy();
83
+ this.#currentDepth?.destroy();
84
+ }
85
+ #createResolvedColors() {
86
+ return colorSpecsFor(this.options).map((spec, index) => this.device.createTexture({
87
+ size: this.#currentSize,
88
+ format: spec.format,
89
+ usage: ["render_attachment", "texture_binding", "copy_src"],
90
+ sampleCount: 1,
91
+ label: this.options.label ? `${this.options.label}.color${index}.resolve` : undefined,
92
+ }));
93
+ }
94
+ #createMsaaColors() {
95
+ return colorSpecsFor(this.options).map((spec, index) => this.device.createTexture({
96
+ size: this.#currentSize,
97
+ format: spec.format,
98
+ usage: ["render_attachment"],
99
+ sampleCount: 4,
100
+ label: this.options.label ? `${this.options.label}.color${index}` : undefined,
101
+ }));
102
+ }
103
+ #createDepth() {
104
+ const format = depthFormatFor(this.options);
105
+ // texture_binding lets read-only depth passes bind `target.depth` as a sampled texture in the same pass.
106
+ return format ? this.device.createTexture({
107
+ size: this.#currentSize,
108
+ format,
109
+ usage: ["render_attachment", "texture_binding"],
110
+ sampleCount: this.sampleCount,
111
+ label: this.options.label ? `${this.options.label}.depth` : undefined,
112
+ }) : undefined;
113
+ }
114
+ }
115
+ //# sourceMappingURL=target-offscreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-offscreen.js","sourceRoot":"","sources":["../src/target-offscreen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Target, TargetOptions, TargetTextureOptions } from "./target.ts";
2
+ export declare const DEFAULT_FORMAT: GPUTextureFormat;
3
+ export type ClearColor = GPUColor | readonly [number, number, number, number];
4
+ /** Clear color used by a pass when neither the pass nor the target chose one. */
5
+ export declare const BUILT_IN_CLEAR_COLOR: ClearColor;
6
+ /**
7
+ * Validates a clear color on assignment (`target.clearColor`, `surface(gpu, canvas, { clearColor })`),
8
+ * so a typo lands on the line that wrote it instead of inside a render pass descriptor.
9
+ */
10
+ export declare function validateClearColor(value: ClearColor, where: string): ClearColor;
11
+ /** Defensive copy: clear colors are mutable WebGPU dictionaries/arrays at runtime. */
12
+ export declare function copyClearColor(value: ClearColor): ClearColor;
13
+ export interface TargetDeviceCaps {
14
+ readonly isCompatibilityMode?: boolean;
15
+ }
16
+ export declare function colorSpecsFor(options: TargetTextureOptions): readonly {
17
+ readonly format: GPUTextureFormat;
18
+ }[];
19
+ export declare function depthFormatFor(options: TargetTextureOptions): GPUTextureFormat | undefined;
20
+ export declare function sampleCountFor(options: TargetTextureOptions): 1 | 4;
21
+ export declare function validateTargetOptions(options: Partial<TargetOptions> | undefined, caps: TargetDeviceCaps): void;
22
+ export declare function colorAttachment(resolved: {
23
+ createView(): GPUTextureView;
24
+ }, msaa: {
25
+ createView(): GPUTextureView;
26
+ } | undefined, clear: ClearColor, preserve?: boolean): GPURenderPassColorAttachment;
27
+ export declare function depthAttachment(depth: {
28
+ createView(): GPUTextureView;
29
+ readonly sampleCount?: number;
30
+ readonly format?: GPUTextureFormat;
31
+ }, preserve?: boolean, clearDepth?: number, clearStencil?: number, readOnly?: boolean): GPURenderPassDepthStencilAttachment;
32
+ export declare function hasStencilAspect(format: GPUTextureFormat | undefined): boolean;
33
+ export declare function colorValue(clear: ClearColor): GPUColor;
34
+ export declare function sameSize(a: readonly [number, number], b: readonly [number, number]): boolean;
35
+ /** @internal Internal normalization guard: `renderPassDescriptor` is required on Target and never on options bags. */
36
+ export declare function isTarget(value: unknown): value is Target;
37
+ //# sourceMappingURL=target-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-utils.d.ts","sourceRoot":"","sources":["../src/target-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE/E,eAAO,MAAM,cAAc,EAAE,gBAA+B,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9E,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,EAAE,UAAwC,CAAC;AAE5E;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAK/E;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAG5D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,EAAE,CAE7G;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,SAAS,CAE1F;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,CAAC,GAAG,CAAC,CAQnE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAO/G;AAWD,wBAAgB,eAAe,CAAC,QAAQ,EAAE;IAAE,UAAU,IAAI,cAAc,CAAA;CAAE,EAAE,IAAI,EAAE;IAAE,UAAU,IAAI,cAAc,CAAA;CAAE,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,4BAA4B,CASnM;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,UAAU,IAAI,cAAc,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,mCAAmC,CAmBnQ;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAE9E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAEtD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAE5F;AAGD,sHAAsH;AACtH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAGxD"}
@@ -0,0 +1,103 @@
1
+ import { clearColorInvalidError, targetSizeRequiredError, targetStencilOnlyDepthError, unsupportedError } from "./errors.js";
2
+ export const DEFAULT_FORMAT = "rgba8unorm";
3
+ /** Clear color used by a pass when neither the pass nor the target chose one. */
4
+ export const BUILT_IN_CLEAR_COLOR = Object.freeze([0, 0, 0, 1]);
5
+ /**
6
+ * Validates a clear color on assignment (`target.clearColor`, `surface(gpu, canvas, { clearColor })`),
7
+ * so a typo lands on the line that wrote it instead of inside a render pass descriptor.
8
+ */
9
+ export function validateClearColor(value, where) {
10
+ const object = value;
11
+ const components = Array.isArray(value) ? value : [object?.r, object?.g, object?.b, object?.a];
12
+ if (components.length !== 4 || !components.every((component) => typeof component === "number" && Number.isFinite(component)))
13
+ throw clearColorInvalidError(where);
14
+ return copyClearColor(value);
15
+ }
16
+ /** Defensive copy: clear colors are mutable WebGPU dictionaries/arrays at runtime. */
17
+ export function copyClearColor(value) {
18
+ const object = value;
19
+ return Array.isArray(value) ? [value[0], value[1], value[2], value[3]] : { r: object.r, g: object.g, b: object.b, a: object.a };
20
+ }
21
+ export function colorSpecsFor(options) {
22
+ return options.colors ?? [{ format: options.format ?? DEFAULT_FORMAT }];
23
+ }
24
+ export function depthFormatFor(options) {
25
+ return options.depth === true ? "depth24plus" : options.depth || undefined;
26
+ }
27
+ export function sampleCountFor(options) {
28
+ const msaa = options.msaa;
29
+ if (msaa === true || msaa === 4)
30
+ return 4;
31
+ if (msaa === undefined || msaa === false)
32
+ return 1;
33
+ const e = targetSizeRequiredError();
34
+ e.code = "AIGPU-TARGET-MSAA-INVALID";
35
+ e.message = `msaa received ${msaa}; WebGPU 1|4; use true`;
36
+ throw e;
37
+ }
38
+ export function validateTargetOptions(options, caps) {
39
+ if (!options?.size)
40
+ throw targetSizeRequiredError();
41
+ const depthFormat = depthFormatFor(options);
42
+ // Stencil-only formats have no depth aspect, so the default depth state (depthWriteEnabled: true) cannot compile against them.
43
+ if (depthFormat === "stencil8")
44
+ throw targetStencilOnlyDepthError(depthFormat);
45
+ if (sampleCountFor(options) !== 4)
46
+ return;
47
+ for (const spec of colorSpecsFor(options))
48
+ validateMsaaFormat(spec.format, caps);
49
+ }
50
+ function validateMsaaFormat(format, caps) {
51
+ if (!(caps.isCompatibilityMode && format === "rgba16float"))
52
+ return;
53
+ throw unsupportedError("target", "Dawn compatibility mode does not support rgba16float+msaa.", "Use rgba8unorm for MSAA here, or disable msaa.");
54
+ }
55
+ export function colorAttachment(resolved, msaa, clear, preserve) {
56
+ const attachment = {
57
+ view: (msaa ?? resolved).createView(),
58
+ resolveTarget: msaa ? resolved.createView() : undefined,
59
+ loadOp: preserve ? "load" : "clear",
60
+ storeOp: msaa ? "discard" : "store",
61
+ };
62
+ if (!preserve)
63
+ attachment.clearValue = colorValue(clear);
64
+ return attachment;
65
+ }
66
+ export function depthAttachment(depth, preserve, clearDepth, clearStencil, readOnly) {
67
+ if (readOnly) {
68
+ // WebGPU requires the ops to be OMITTED for read-only aspects: "If format has a depth aspect and
69
+ // this.depthReadOnly is false: this.depthLoadOp must be provided. this.depthStoreOp must be provided.
70
+ // Otherwise: this.depthLoadOp must not be provided. this.depthStoreOp must not be provided." — and the
71
+ // same for stencilLoadOp/stencilStoreOp with stencilReadOnly, so combined formats mark both aspects.
72
+ const attachment = { view: depth.createView(), depthReadOnly: true };
73
+ if (hasStencilAspect(depth.format))
74
+ attachment.stencilReadOnly = true;
75
+ return attachment;
76
+ }
77
+ const attachment = { view: depth.createView(), depthLoadOp: preserve ? "load" : "clear", depthStoreOp: depth.sampleCount > 1 ? "discard" : "store" };
78
+ if (!preserve)
79
+ attachment.depthClearValue = clearDepth ?? 1;
80
+ // WebGPU requires stencilLoadOp/stencilStoreOp whenever the format has a stencil aspect and stencilReadOnly is not set.
81
+ if (depth.format && hasStencilAspect(depth.format)) {
82
+ attachment.stencilLoadOp = preserve ? "load" : "clear";
83
+ attachment.stencilStoreOp = depth.sampleCount > 1 ? "discard" : "store";
84
+ if (!preserve)
85
+ attachment.stencilClearValue = clearStencil ?? 0;
86
+ }
87
+ return attachment;
88
+ }
89
+ export function hasStencilAspect(format) {
90
+ return !!format && format.includes("stencil");
91
+ }
92
+ export function colorValue(clear) {
93
+ return Array.isArray(clear) ? { r: clear[0], g: clear[1], b: clear[2], a: clear[3] } : clear;
94
+ }
95
+ export function sameSize(a, b) {
96
+ return a[0] === b[0] && a[1] === b[1];
97
+ }
98
+ /** @internal Internal normalization guard: `renderPassDescriptor` is required on Target and never on options bags. */
99
+ export function isTarget(value) {
100
+ return typeof value === "object" && value !== null
101
+ && typeof value.renderPassDescriptor === "function";
102
+ }
103
+ //# sourceMappingURL=target-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-utils.js","sourceRoot":"","sources":["../src/target-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { ClearColor } from "./target-utils.ts";
2
+ import type { Texture, ResourceDestroyCallback, ResourceIdentity, UnsubscribeResourceDestroy } from "@aigpu/core";
3
+ export interface TargetTextureOptions {
4
+ readonly format?: GPUTextureFormat;
5
+ /**
6
+ * Default clear color of this target, used by passes that clear without naming a color.
7
+ * Defaults to `[0, 0, 0, 1]`; mutable at runtime through `target.clearColor`.
8
+ */
9
+ readonly clearColor?: ClearColor;
10
+ readonly colors?: readonly {
11
+ readonly format: GPUTextureFormat;
12
+ }[];
13
+ readonly depth?: boolean | GPUTextureFormat;
14
+ readonly msaa?: boolean | 4;
15
+ readonly label?: string;
16
+ }
17
+ export interface TargetOptions extends TargetTextureOptions {
18
+ readonly size: readonly [number, number];
19
+ }
20
+ export interface TargetSignature {
21
+ readonly colors: readonly GPUTextureFormat[];
22
+ readonly depth?: GPUTextureFormat;
23
+ readonly sampleCount?: 1 | 4;
24
+ }
25
+ export type CompileTarget = Target | TargetSignature;
26
+ /** Options bag for `Target.renderPassDescriptor()`. `Frame.pass` supplies these from `FramePassOptions`. */
27
+ export interface RenderPassDescriptorOptions {
28
+ /** Clear color for all color attachments unless `preserve` is true. Defaults to `[0, 0, 0, 1]`. */
29
+ readonly clear?: ClearColor;
30
+ /** When true, color and depth attachments load existing contents and omit clear values. */
31
+ readonly preserve?: boolean;
32
+ /** Depth clear value used when the pass clears. Defaults to `1`. */
33
+ readonly clearDepth?: number;
34
+ /** Stencil clear value used when the pass clears. Defaults to `0`. */
35
+ readonly clearStencil?: number;
36
+ /** Builds the depth-stencil attachment read-only, omitting its load/store ops (stencil aspect included). */
37
+ readonly depthReadOnly?: boolean;
38
+ }
39
+ export interface Target {
40
+ readonly gpu: unknown;
41
+ readonly size: readonly [number, number];
42
+ readonly texelSize: readonly [number, number];
43
+ readonly color: Texture;
44
+ readonly colors: readonly [Texture, ...Texture[]];
45
+ readonly depth?: Texture;
46
+ readonly format: GPUTextureFormat;
47
+ readonly sampleCount: 1 | 4;
48
+ /**
49
+ * Default clear color of this target: the color a pass uses when it clears without naming one
50
+ * (`pass(target, body)` or `clear: true`). Writable at runtime, validated on assignment.
51
+ * Precedence: pass `clear` color > `target.clearColor` > the built-in `[0, 0, 0, 1]`.
52
+ */
53
+ clearColor: ClearColor;
54
+ readonly resourceIdentity: ResourceIdentity;
55
+ resize(size: readonly [number, number]): void;
56
+ /** Raw unpadded bytes of `color` in the target's own format (`bgra*` swizzled to RGBA). */
57
+ read(): Promise<Uint8Array>;
58
+ /** Components of `color` decoded to f32 — the HDR-friendly readback for `rgba16float`/`rgba32float` targets. */
59
+ readFloats(): Promise<Float32Array>;
60
+ onDestroy(cb: ResourceDestroyCallback<Target>): UnsubscribeResourceDestroy;
61
+ renderPassDescriptor(opts?: RenderPassDescriptorOptions): GPURenderPassDescriptor;
62
+ }
63
+ export { OffscreenTarget } from "./target-offscreen.ts";
64
+ export type { Surface, SurfaceOptions, SurfaceResizeEvent } from "./surface.ts";
65
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../src/target.ts"],"names":[],"mappings":"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"}
package/dist/target.js ADDED
@@ -0,0 +1,2 @@
1
+ export { OffscreenTarget } from "./target-offscreen.js";
2
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../src/target.ts"],"names":[],"mappings":"AAmEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { Device } from "@aigpu/core";
2
+ import { FRAME_PASS_ATTACHMENT, type FramePassAttachContext, type FramePassAttachment, type FramePassAttachResult } from "./frame-protocols.ts";
3
+ import type { Gpu } from "./kernel.ts";
4
+ import { type QueryHostOptions } from "./query-ring.ts";
5
+ /**
6
+ * Marks one frame pass for GPU timing. Create with `timer.span(name)` and pass it
7
+ * as `FramePassOptions.timer`; the pass's GPU duration is reported under `name`
8
+ * through `timer.onResults`.
9
+ */
10
+ export interface TimerSpan {
11
+ readonly name: string;
12
+ }
13
+ /** GPU pass timer created by `timer(gpu)`. Needs the "timestamp-query" device feature. */
14
+ export interface Timer {
15
+ /** Marks a pass for timing. Pass the result as FramePassOptions.timer. One name per frame. */
16
+ span(name: string): TimerSpan;
17
+ /** Registers a callback invoked whenever a new set of results lands (typically 1-2 frames after submit). Times in milliseconds. Returns an unsubscribe function. */
18
+ onResults(cb: (spans: Readonly<Record<string, number>>) => void): () => void;
19
+ /** Releases the timer's query set and buffers. Further use of the timer or its spans throws. */
20
+ dispose(): void;
21
+ }
22
+ declare class InternalTimerSpan implements TimerSpan, FramePassAttachment {
23
+ readonly name: string;
24
+ readonly owner: InternalTimer;
25
+ constructor(name: string, owner: InternalTimer);
26
+ /**
27
+ * Frame pass attachment: registering the span is what returns the descriptor's `timestampWrites`
28
+ * (undefined when the span is dropped this frame because the query set is full). The owner is the
29
+ * timer, not the span, so a frame that attaches two spans of the same timer bookkeeps one owner.
30
+ */
31
+ [FRAME_PASS_ATTACHMENT](ctx: FramePassAttachContext): FramePassAttachResult;
32
+ }
33
+ /** @internal The concrete span, for tests that need the internal shape behind the TimerSpan handle. */
34
+ export type { InternalTimerSpan };
35
+ /** @internal */
36
+ export declare function createTimer(device: Device, host?: QueryHostOptions): Timer;
37
+ /**
38
+ * GPU pass timing for this gpu. Needs the "timestamp-query" device feature — request it at init:
39
+ * `init({ requiredFeatures: ["timestamp-query"] })`.
40
+ *
41
+ * The timer owns a query ring: its readbacks join `gpu.settled()`, a dropped readback is reported
42
+ * on `gpu.onError`, and `gpu.dispose()` releases the query set (deferring destruction while a frame
43
+ * in flight still references it). `timer.dispose()` releases it earlier and drops the registration.
44
+ */
45
+ export declare function timer(gpu: Gpu): Timer;
46
+ /**
47
+ * Ring-1 GPU pass timer. Owns name→span bookkeeping per frame, contiguous
48
+ * begin/end index pair allocation, ns→ms conversion, and onResults dispatch;
49
+ * the query set + resolve/readback plumbing lives in the shared query ring.
50
+ *
51
+ * @internal
52
+ */
53
+ export declare class InternalTimer {
54
+ #private;
55
+ constructor(device: Device, host?: QueryHostOptions);
56
+ span(name: string): TimerSpan;
57
+ onResults(cb: (spans: Readonly<Record<string, number>>) => void): () => void;
58
+ dispose(): void;
59
+ /**
60
+ * @internal Frame.pass hook: registers the span for the current frame and returns the pass
61
+ * descriptor's timestampWrites, or undefined when the span is dropped for this frame because
62
+ * the query set is full (capacity grows at the next frame boundary — never mid-frame, since
63
+ * earlier passes already reference the current set).
64
+ */
65
+ attachSpan(span: InternalTimerSpan, frame: unknown, frameDevice: Device): GPURenderPassTimestampWrites | undefined;
66
+ /** @internal Frame.submit hook, before encoder.finish(): appends this frame's single resolve to the frame encoder. */
67
+ finalizeFrame(frame: unknown, encoder: GPUCommandEncoder): void;
68
+ /** @internal Frame.submit hook, after queue.submit succeeds: starts the non-blocking readback. */
69
+ frameSubmitted(frame: unknown): void;
70
+ /**
71
+ * @internal Frame abandon hook (a failed pass, a failed finish/submit, or Frame.cancel()): the
72
+ * frame ends without ever reaching the queue. Drops the pending encoded state so no readback can
73
+ * decode stale staging bytes as a phantom duration, and releases the retain this frame took when
74
+ * it attached a span — the counterpart of frameSubmitted() for frames that never submit.
75
+ */
76
+ frameAbandoned(frame: unknown): void;
77
+ }
78
+ //# sourceMappingURL=timer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAChJ,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAmB,KAAK,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AAEzF;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0FAA0F;AAC1F,MAAM,WAAW,KAAK;IACpB,8FAA8F;IAC9F,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,oKAAoK;IACpK,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7E,gGAAgG;IAChG,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,cAAM,iBAAkB,YAAW,SAAS,EAAE,mBAAmB;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,KAAK,EAAE,aAAa;gBAA3C,IAAI,EAAE,MAAM,EAAW,KAAK,EAAE,aAAa;IAEhE;;;;OAIG;IACH,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,sBAAsB,GAAG,qBAAqB;CAG5E;AAED,uGAAuG;AACvG,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,KAAK,CAE9E;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,CAGrC;AAOD;;;;;;GAMG;AACH,qBAAa,aAAa;;gBA2BZ,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB;IAcvD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAa7B,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAM5E,OAAO,IAAI,IAAI;IAcf;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS;IA4BlH,sHAAsH;IACtH,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAM/D,kGAAkG;IAClG,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAsBpC;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAwDrC"}