@nodetool-ai/gpu 0.8.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 (359) hide show
  1. package/README.md +52 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/blend/blendModes.d.ts +67 -0
  4. package/dist/blend/blendModes.d.ts.map +1 -0
  5. package/dist/blend/blendModes.js +80 -0
  6. package/dist/blend/blendModes.js.map +1 -0
  7. package/dist/blend/index.d.ts +10 -0
  8. package/dist/blend/index.d.ts.map +1 -0
  9. package/dist/blend/index.js +10 -0
  10. package/dist/blend/index.js.map +1 -0
  11. package/dist/blend/wgsl.d.ts +16 -0
  12. package/dist/blend/wgsl.d.ts.map +1 -0
  13. package/dist/blend/wgsl.js +85 -0
  14. package/dist/blend/wgsl.js.map +1 -0
  15. package/dist/compositor/compositor.d.ts +112 -0
  16. package/dist/compositor/compositor.d.ts.map +1 -0
  17. package/dist/compositor/compositor.js +353 -0
  18. package/dist/compositor/compositor.js.map +1 -0
  19. package/dist/compositor/headless.d.ts +47 -0
  20. package/dist/compositor/headless.d.ts.map +1 -0
  21. package/dist/compositor/headless.js +158 -0
  22. package/dist/compositor/headless.js.map +1 -0
  23. package/dist/compositor/index.d.ts +8 -0
  24. package/dist/compositor/index.d.ts.map +1 -0
  25. package/dist/compositor/index.js +8 -0
  26. package/dist/compositor/index.js.map +1 -0
  27. package/dist/compositor/shaders.d.ts +24 -0
  28. package/dist/compositor/shaders.d.ts.map +1 -0
  29. package/dist/compositor/shaders.js +241 -0
  30. package/dist/compositor/shaders.js.map +1 -0
  31. package/dist/compositor/transform.d.ts +49 -0
  32. package/dist/compositor/transform.d.ts.map +1 -0
  33. package/dist/compositor/transform.js +74 -0
  34. package/dist/compositor/transform.js.map +1 -0
  35. package/dist/context.d.ts +108 -0
  36. package/dist/context.d.ts.map +1 -0
  37. package/dist/context.js +205 -0
  38. package/dist/context.js.map +1 -0
  39. package/dist/debug/premulValidator.d.ts +85 -0
  40. package/dist/debug/premulValidator.d.ts.map +1 -0
  41. package/dist/debug/premulValidator.js +239 -0
  42. package/dist/debug/premulValidator.js.map +1 -0
  43. package/dist/executor.d.ts +74 -0
  44. package/dist/executor.d.ts.map +1 -0
  45. package/dist/executor.js +413 -0
  46. package/dist/executor.js.map +1 -0
  47. package/dist/fullscreenQuad.d.ts +11 -0
  48. package/dist/fullscreenQuad.d.ts.map +1 -0
  49. package/dist/fullscreenQuad.js +31 -0
  50. package/dist/fullscreenQuad.js.map +1 -0
  51. package/dist/index.d.ts +16 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +16 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/module.d.ts +162 -0
  56. package/dist/module.d.ts.map +1 -0
  57. package/dist/module.js +100 -0
  58. package/dist/module.js.map +1 -0
  59. package/dist/node.d.ts +38 -0
  60. package/dist/node.d.ts.map +1 -0
  61. package/dist/node.js +140 -0
  62. package/dist/node.js.map +1 -0
  63. package/dist/pool.d.ts +30 -0
  64. package/dist/pool.d.ts.map +1 -0
  65. package/dist/pool.js +33 -0
  66. package/dist/pool.js.map +1 -0
  67. package/dist/recipe.d.ts +148 -0
  68. package/dist/recipe.d.ts.map +1 -0
  69. package/dist/recipe.js +181 -0
  70. package/dist/recipe.js.map +1 -0
  71. package/dist/registry.d.ts +49 -0
  72. package/dist/registry.d.ts.map +1 -0
  73. package/dist/registry.js +100 -0
  74. package/dist/registry.js.map +1 -0
  75. package/dist/shaders/_canary/passthrough/v1/module.d.ts +13 -0
  76. package/dist/shaders/_canary/passthrough/v1/module.d.ts.map +1 -0
  77. package/dist/shaders/_canary/passthrough/v1/module.js +71 -0
  78. package/dist/shaders/_canary/passthrough/v1/module.js.map +1 -0
  79. package/dist/shaders/alpha/premulToStraight/v1/module.d.ts +16 -0
  80. package/dist/shaders/alpha/premulToStraight/v1/module.d.ts.map +1 -0
  81. package/dist/shaders/alpha/premulToStraight/v1/module.js +62 -0
  82. package/dist/shaders/alpha/premulToStraight/v1/module.js.map +1 -0
  83. package/dist/shaders/alpha/straightToPremul/v1/module.d.ts +19 -0
  84. package/dist/shaders/alpha/straightToPremul/v1/module.d.ts.map +1 -0
  85. package/dist/shaders/alpha/straightToPremul/v1/module.js +61 -0
  86. package/dist/shaders/alpha/straightToPremul/v1/module.js.map +1 -0
  87. package/dist/shaders/color/brightnessContrast/v1/module.d.ts +17 -0
  88. package/dist/shaders/color/brightnessContrast/v1/module.d.ts.map +1 -0
  89. package/dist/shaders/color/brightnessContrast/v1/module.js +84 -0
  90. package/dist/shaders/color/brightnessContrast/v1/module.js.map +1 -0
  91. package/dist/shaders/color/cdl/v1/module.d.ts +35 -0
  92. package/dist/shaders/color/cdl/v1/module.d.ts.map +1 -0
  93. package/dist/shaders/color/cdl/v1/module.js +106 -0
  94. package/dist/shaders/color/cdl/v1/module.js.map +1 -0
  95. package/dist/shaders/color/channelMerge/v1/module.d.ts +22 -0
  96. package/dist/shaders/color/channelMerge/v1/module.d.ts.map +1 -0
  97. package/dist/shaders/color/channelMerge/v1/module.js +101 -0
  98. package/dist/shaders/color/channelMerge/v1/module.js.map +1 -0
  99. package/dist/shaders/color/channelShuffle/v1/module.d.ts +29 -0
  100. package/dist/shaders/color/channelShuffle/v1/module.d.ts.map +1 -0
  101. package/dist/shaders/color/channelShuffle/v1/module.js +94 -0
  102. package/dist/shaders/color/channelShuffle/v1/module.js.map +1 -0
  103. package/dist/shaders/color/channelSplit/v1/module.d.ts +18 -0
  104. package/dist/shaders/color/channelSplit/v1/module.d.ts.map +1 -0
  105. package/dist/shaders/color/channelSplit/v1/module.js +90 -0
  106. package/dist/shaders/color/channelSplit/v1/module.js.map +1 -0
  107. package/dist/shaders/color/colorBalance/v1/module.d.ts +18 -0
  108. package/dist/shaders/color/colorBalance/v1/module.d.ts.map +1 -0
  109. package/dist/shaders/color/colorBalance/v1/module.js +86 -0
  110. package/dist/shaders/color/colorBalance/v1/module.js.map +1 -0
  111. package/dist/shaders/color/cubeLut/v1/module.d.ts +14 -0
  112. package/dist/shaders/color/cubeLut/v1/module.d.ts.map +1 -0
  113. package/dist/shaders/color/cubeLut/v1/module.js +78 -0
  114. package/dist/shaders/color/cubeLut/v1/module.js.map +1 -0
  115. package/dist/shaders/color/curves/v1/module.d.ts +31 -0
  116. package/dist/shaders/color/curves/v1/module.d.ts.map +1 -0
  117. package/dist/shaders/color/curves/v1/module.js +102 -0
  118. package/dist/shaders/color/curves/v1/module.js.map +1 -0
  119. package/dist/shaders/color/exposure/v1/module.d.ts +15 -0
  120. package/dist/shaders/color/exposure/v1/module.d.ts.map +1 -0
  121. package/dist/shaders/color/exposure/v1/module.js +78 -0
  122. package/dist/shaders/color/exposure/v1/module.js.map +1 -0
  123. package/dist/shaders/color/exposureTone/v1/module.d.ts +28 -0
  124. package/dist/shaders/color/exposureTone/v1/module.d.ts.map +1 -0
  125. package/dist/shaders/color/exposureTone/v1/module.js +107 -0
  126. package/dist/shaders/color/exposureTone/v1/module.js.map +1 -0
  127. package/dist/shaders/color/filmLook/v1/module.d.ts +28 -0
  128. package/dist/shaders/color/filmLook/v1/module.d.ts.map +1 -0
  129. package/dist/shaders/color/filmLook/v1/module.js +103 -0
  130. package/dist/shaders/color/filmLook/v1/module.js.map +1 -0
  131. package/dist/shaders/color/grade/v1/module.d.ts +35 -0
  132. package/dist/shaders/color/grade/v1/module.d.ts.map +1 -0
  133. package/dist/shaders/color/grade/v1/module.js +182 -0
  134. package/dist/shaders/color/grade/v1/module.js.map +1 -0
  135. package/dist/shaders/color/grayscale/v1/module.d.ts +14 -0
  136. package/dist/shaders/color/grayscale/v1/module.d.ts.map +1 -0
  137. package/dist/shaders/color/grayscale/v1/module.js +79 -0
  138. package/dist/shaders/color/grayscale/v1/module.js.map +1 -0
  139. package/dist/shaders/color/hsb/v1/module.d.ts +20 -0
  140. package/dist/shaders/color/hsb/v1/module.d.ts.map +1 -0
  141. package/dist/shaders/color/hsb/v1/module.js +131 -0
  142. package/dist/shaders/color/hsb/v1/module.js.map +1 -0
  143. package/dist/shaders/color/hslAdjust/v1/module.d.ts +30 -0
  144. package/dist/shaders/color/hslAdjust/v1/module.d.ts.map +1 -0
  145. package/dist/shaders/color/hslAdjust/v1/module.js +170 -0
  146. package/dist/shaders/color/hslAdjust/v1/module.js.map +1 -0
  147. package/dist/shaders/color/invert/v1/module.d.ts +15 -0
  148. package/dist/shaders/color/invert/v1/module.d.ts.map +1 -0
  149. package/dist/shaders/color/invert/v1/module.js +85 -0
  150. package/dist/shaders/color/invert/v1/module.js.map +1 -0
  151. package/dist/shaders/color/levels/v1/module.d.ts +33 -0
  152. package/dist/shaders/color/levels/v1/module.d.ts.map +1 -0
  153. package/dist/shaders/color/levels/v1/module.js +116 -0
  154. package/dist/shaders/color/levels/v1/module.js.map +1 -0
  155. package/dist/shaders/color/liftGammaGain/v1/module.d.ts +40 -0
  156. package/dist/shaders/color/liftGammaGain/v1/module.d.ts.map +1 -0
  157. package/dist/shaders/color/liftGammaGain/v1/module.js +114 -0
  158. package/dist/shaders/color/liftGammaGain/v1/module.js.map +1 -0
  159. package/dist/shaders/color/posterize/v1/module.d.ts +16 -0
  160. package/dist/shaders/color/posterize/v1/module.d.ts.map +1 -0
  161. package/dist/shaders/color/posterize/v1/module.js +80 -0
  162. package/dist/shaders/color/posterize/v1/module.js.map +1 -0
  163. package/dist/shaders/color/solarize/v1/module.d.ts +15 -0
  164. package/dist/shaders/color/solarize/v1/module.d.ts.map +1 -0
  165. package/dist/shaders/color/solarize/v1/module.js +83 -0
  166. package/dist/shaders/color/solarize/v1/module.js.map +1 -0
  167. package/dist/shaders/color/splitToning/v1/module.d.ts +26 -0
  168. package/dist/shaders/color/splitToning/v1/module.d.ts.map +1 -0
  169. package/dist/shaders/color/splitToning/v1/module.js +95 -0
  170. package/dist/shaders/color/splitToning/v1/module.js.map +1 -0
  171. package/dist/shaders/filters/blur/gaussian/v1/module.d.ts +23 -0
  172. package/dist/shaders/filters/blur/gaussian/v1/module.d.ts.map +1 -0
  173. package/dist/shaders/filters/blur/gaussian/v1/module.js +110 -0
  174. package/dist/shaders/filters/blur/gaussian/v1/module.js.map +1 -0
  175. package/dist/shaders/filters/blur/separable/v1/module.d.ts +18 -0
  176. package/dist/shaders/filters/blur/separable/v1/module.d.ts.map +1 -0
  177. package/dist/shaders/filters/blur/separable/v1/module.js +64 -0
  178. package/dist/shaders/filters/blur/separable/v1/module.js.map +1 -0
  179. package/dist/shaders/filters/convolve3x3/v1/module.d.ts +23 -0
  180. package/dist/shaders/filters/convolve3x3/v1/module.d.ts.map +1 -0
  181. package/dist/shaders/filters/convolve3x3/v1/module.js +128 -0
  182. package/dist/shaders/filters/convolve3x3/v1/module.js.map +1 -0
  183. package/dist/shaders/filters/glow/v1/module.d.ts +26 -0
  184. package/dist/shaders/filters/glow/v1/module.d.ts.map +1 -0
  185. package/dist/shaders/filters/glow/v1/module.js +102 -0
  186. package/dist/shaders/filters/glow/v1/module.js.map +1 -0
  187. package/dist/shaders/filters/grain/v1/module.d.ts +38 -0
  188. package/dist/shaders/filters/grain/v1/module.d.ts.map +1 -0
  189. package/dist/shaders/filters/grain/v1/module.js +110 -0
  190. package/dist/shaders/filters/grain/v1/module.js.map +1 -0
  191. package/dist/shaders/filters/pixelate/v1/module.d.ts +14 -0
  192. package/dist/shaders/filters/pixelate/v1/module.d.ts.map +1 -0
  193. package/dist/shaders/filters/pixelate/v1/module.js +76 -0
  194. package/dist/shaders/filters/pixelate/v1/module.js.map +1 -0
  195. package/dist/shaders/filters/sharpen/unsharpMask/v1/module.d.ts +17 -0
  196. package/dist/shaders/filters/sharpen/unsharpMask/v1/module.d.ts.map +1 -0
  197. package/dist/shaders/filters/sharpen/unsharpMask/v1/module.js +93 -0
  198. package/dist/shaders/filters/sharpen/unsharpMask/v1/module.js.map +1 -0
  199. package/dist/shaders/filters/threshold/v1/module.d.ts +17 -0
  200. package/dist/shaders/filters/threshold/v1/module.d.ts.map +1 -0
  201. package/dist/shaders/filters/threshold/v1/module.js +71 -0
  202. package/dist/shaders/filters/threshold/v1/module.js.map +1 -0
  203. package/dist/shaders/filters/vignette/v1/module.d.ts +18 -0
  204. package/dist/shaders/filters/vignette/v1/module.d.ts.map +1 -0
  205. package/dist/shaders/filters/vignette/v1/module.js +78 -0
  206. package/dist/shaders/filters/vignette/v1/module.js.map +1 -0
  207. package/dist/shaders/filters/visualFx/v1/module.d.ts +24 -0
  208. package/dist/shaders/filters/visualFx/v1/module.d.ts.map +1 -0
  209. package/dist/shaders/filters/visualFx/v1/module.js +210 -0
  210. package/dist/shaders/filters/visualFx/v1/module.js.map +1 -0
  211. package/dist/shaders/index.d.ts +86 -0
  212. package/dist/shaders/index.d.ts.map +1 -0
  213. package/dist/shaders/index.js +161 -0
  214. package/dist/shaders/index.js.map +1 -0
  215. package/dist/shaders/keyer/chromaKey/v1/module.d.ts +25 -0
  216. package/dist/shaders/keyer/chromaKey/v1/module.d.ts.map +1 -0
  217. package/dist/shaders/keyer/chromaKey/v1/module.js +111 -0
  218. package/dist/shaders/keyer/chromaKey/v1/module.js.map +1 -0
  219. package/dist/shaders/keyer/lumaKey/v1/module.d.ts +22 -0
  220. package/dist/shaders/keyer/lumaKey/v1/module.d.ts.map +1 -0
  221. package/dist/shaders/keyer/lumaKey/v1/module.js +89 -0
  222. package/dist/shaders/keyer/lumaKey/v1/module.js.map +1 -0
  223. package/dist/shaders/mask/apply/v1/module.d.ts +16 -0
  224. package/dist/shaders/mask/apply/v1/module.d.ts.map +1 -0
  225. package/dist/shaders/mask/apply/v1/module.js +79 -0
  226. package/dist/shaders/mask/apply/v1/module.js.map +1 -0
  227. package/dist/shaders/mask/fromImage/v1/module.d.ts +18 -0
  228. package/dist/shaders/mask/fromImage/v1/module.d.ts.map +1 -0
  229. package/dist/shaders/mask/fromImage/v1/module.js +99 -0
  230. package/dist/shaders/mask/fromImage/v1/module.js.map +1 -0
  231. package/dist/shaders/mask/invert/v1/module.d.ts +12 -0
  232. package/dist/shaders/mask/invert/v1/module.d.ts.map +1 -0
  233. package/dist/shaders/mask/invert/v1/module.js +57 -0
  234. package/dist/shaders/mask/invert/v1/module.js.map +1 -0
  235. package/dist/shaders/mixer/add/v1/module.d.ts +17 -0
  236. package/dist/shaders/mixer/add/v1/module.d.ts.map +1 -0
  237. package/dist/shaders/mixer/add/v1/module.js +73 -0
  238. package/dist/shaders/mixer/add/v1/module.js.map +1 -0
  239. package/dist/shaders/mixer/colorOverlay/v1/module.d.ts +26 -0
  240. package/dist/shaders/mixer/colorOverlay/v1/module.d.ts.map +1 -0
  241. package/dist/shaders/mixer/colorOverlay/v1/module.js +81 -0
  242. package/dist/shaders/mixer/colorOverlay/v1/module.js.map +1 -0
  243. package/dist/shaders/mixer/dropShadow/v1/module.d.ts +28 -0
  244. package/dist/shaders/mixer/dropShadow/v1/module.d.ts.map +1 -0
  245. package/dist/shaders/mixer/dropShadow/v1/module.js +104 -0
  246. package/dist/shaders/mixer/dropShadow/v1/module.js.map +1 -0
  247. package/dist/shaders/mixer/outline/v1/module.d.ts +27 -0
  248. package/dist/shaders/mixer/outline/v1/module.d.ts.map +1 -0
  249. package/dist/shaders/mixer/outline/v1/module.js +105 -0
  250. package/dist/shaders/mixer/outline/v1/module.js.map +1 -0
  251. package/dist/shaders/mixer/over/v1/module.d.ts +16 -0
  252. package/dist/shaders/mixer/over/v1/module.d.ts.map +1 -0
  253. package/dist/shaders/mixer/over/v1/module.js +71 -0
  254. package/dist/shaders/mixer/over/v1/module.js.map +1 -0
  255. package/dist/shaders/mixer/shadowCompose/v1/module.d.ts +26 -0
  256. package/dist/shaders/mixer/shadowCompose/v1/module.d.ts.map +1 -0
  257. package/dist/shaders/mixer/shadowCompose/v1/module.js +95 -0
  258. package/dist/shaders/mixer/shadowCompose/v1/module.js.map +1 -0
  259. package/dist/shaders/sources/angularGradient/v1/module.d.ts +18 -0
  260. package/dist/shaders/sources/angularGradient/v1/module.d.ts.map +1 -0
  261. package/dist/shaders/sources/angularGradient/v1/module.js +67 -0
  262. package/dist/shaders/sources/angularGradient/v1/module.js.map +1 -0
  263. package/dist/shaders/sources/checkerboard/v1/module.d.ts +19 -0
  264. package/dist/shaders/sources/checkerboard/v1/module.d.ts.map +1 -0
  265. package/dist/shaders/sources/checkerboard/v1/module.js +70 -0
  266. package/dist/shaders/sources/checkerboard/v1/module.js.map +1 -0
  267. package/dist/shaders/sources/diamondGradient/v1/module.d.ts +18 -0
  268. package/dist/shaders/sources/diamondGradient/v1/module.d.ts.map +1 -0
  269. package/dist/shaders/sources/diamondGradient/v1/module.js +61 -0
  270. package/dist/shaders/sources/diamondGradient/v1/module.js.map +1 -0
  271. package/dist/shaders/sources/gaussianNoise/v1/module.d.ts +21 -0
  272. package/dist/shaders/sources/gaussianNoise/v1/module.d.ts.map +1 -0
  273. package/dist/shaders/sources/gaussianNoise/v1/module.js +72 -0
  274. package/dist/shaders/sources/gaussianNoise/v1/module.js.map +1 -0
  275. package/dist/shaders/sources/linearGradient/v1/module.d.ts +21 -0
  276. package/dist/shaders/sources/linearGradient/v1/module.d.ts.map +1 -0
  277. package/dist/shaders/sources/linearGradient/v1/module.js +72 -0
  278. package/dist/shaders/sources/linearGradient/v1/module.js.map +1 -0
  279. package/dist/shaders/sources/radialGradient/v1/module.d.ts +18 -0
  280. package/dist/shaders/sources/radialGradient/v1/module.d.ts.map +1 -0
  281. package/dist/shaders/sources/radialGradient/v1/module.js +60 -0
  282. package/dist/shaders/sources/radialGradient/v1/module.js.map +1 -0
  283. package/dist/shaders/sources/solid/v1/module.d.ts +17 -0
  284. package/dist/shaders/sources/solid/v1/module.d.ts.map +1 -0
  285. package/dist/shaders/sources/solid/v1/module.js +49 -0
  286. package/dist/shaders/sources/solid/v1/module.js.map +1 -0
  287. package/dist/shaders/transform/affine/v1/module.d.ts +36 -0
  288. package/dist/shaders/transform/affine/v1/module.d.ts.map +1 -0
  289. package/dist/shaders/transform/affine/v1/module.js +94 -0
  290. package/dist/shaders/transform/affine/v1/module.js.map +1 -0
  291. package/dist/shaders/transform/cornerPin/v1/module.d.ts +40 -0
  292. package/dist/shaders/transform/cornerPin/v1/module.d.ts.map +1 -0
  293. package/dist/shaders/transform/cornerPin/v1/module.js +109 -0
  294. package/dist/shaders/transform/cornerPin/v1/module.js.map +1 -0
  295. package/dist/shaders/transform/crop/v1/module.d.ts +26 -0
  296. package/dist/shaders/transform/crop/v1/module.d.ts.map +1 -0
  297. package/dist/shaders/transform/crop/v1/module.js +82 -0
  298. package/dist/shaders/transform/crop/v1/module.js.map +1 -0
  299. package/dist/shaders/transform/displace/v1/module.d.ts +23 -0
  300. package/dist/shaders/transform/displace/v1/module.d.ts.map +1 -0
  301. package/dist/shaders/transform/displace/v1/module.js +95 -0
  302. package/dist/shaders/transform/displace/v1/module.js.map +1 -0
  303. package/dist/shaders/transform/mirror/v1/module.d.ts +14 -0
  304. package/dist/shaders/transform/mirror/v1/module.d.ts.map +1 -0
  305. package/dist/shaders/transform/mirror/v1/module.js +73 -0
  306. package/dist/shaders/transform/mirror/v1/module.js.map +1 -0
  307. package/dist/shaders/transform/offset/v1/module.d.ts +21 -0
  308. package/dist/shaders/transform/offset/v1/module.d.ts.map +1 -0
  309. package/dist/shaders/transform/offset/v1/module.js +88 -0
  310. package/dist/shaders/transform/offset/v1/module.js.map +1 -0
  311. package/dist/shaders/transform/pad/v1/module.d.ts +26 -0
  312. package/dist/shaders/transform/pad/v1/module.d.ts.map +1 -0
  313. package/dist/shaders/transform/pad/v1/module.js +95 -0
  314. package/dist/shaders/transform/pad/v1/module.js.map +1 -0
  315. package/dist/shaders/transform/polarRemap/v1/module.d.ts +20 -0
  316. package/dist/shaders/transform/polarRemap/v1/module.d.ts.map +1 -0
  317. package/dist/shaders/transform/polarRemap/v1/module.js +95 -0
  318. package/dist/shaders/transform/polarRemap/v1/module.js.map +1 -0
  319. package/dist/shaders/transform/resize/v1/module.d.ts +20 -0
  320. package/dist/shaders/transform/resize/v1/module.d.ts.map +1 -0
  321. package/dist/shaders/transform/resize/v1/module.js +116 -0
  322. package/dist/shaders/transform/resize/v1/module.js.map +1 -0
  323. package/dist/shaders/transform/rotate90/v1/module.d.ts +25 -0
  324. package/dist/shaders/transform/rotate90/v1/module.d.ts.map +1 -0
  325. package/dist/shaders/transform/rotate90/v1/module.js +90 -0
  326. package/dist/shaders/transform/rotate90/v1/module.js.map +1 -0
  327. package/dist/shaders/transform/spherize/v1/module.d.ts +21 -0
  328. package/dist/shaders/transform/spherize/v1/module.d.ts.map +1 -0
  329. package/dist/shaders/transform/spherize/v1/module.js +94 -0
  330. package/dist/shaders/transform/spherize/v1/module.js.map +1 -0
  331. package/dist/shaders/transform/tile/v1/module.d.ts +22 -0
  332. package/dist/shaders/transform/tile/v1/module.d.ts.map +1 -0
  333. package/dist/shaders/transform/tile/v1/module.js +89 -0
  334. package/dist/shaders/transform/tile/v1/module.js.map +1 -0
  335. package/dist/shared/lumaWgsl.d.ts +14 -0
  336. package/dist/shared/lumaWgsl.d.ts.map +1 -0
  337. package/dist/shared/lumaWgsl.js +18 -0
  338. package/dist/shared/lumaWgsl.js.map +1 -0
  339. package/dist/shared/premulWgsl.d.ts +46 -0
  340. package/dist/shared/premulWgsl.d.ts.map +1 -0
  341. package/dist/shared/premulWgsl.js +90 -0
  342. package/dist/shared/premulWgsl.js.map +1 -0
  343. package/dist/texture.d.ts +54 -0
  344. package/dist/texture.d.ts.map +1 -0
  345. package/dist/texture.js +70 -0
  346. package/dist/texture.js.map +1 -0
  347. package/dist/types.d.ts +103 -0
  348. package/dist/types.d.ts.map +1 -0
  349. package/dist/types.js +8 -0
  350. package/dist/types.js.map +1 -0
  351. package/dist/validate/wgslLinearity.d.ts +86 -0
  352. package/dist/validate/wgslLinearity.d.ts.map +1 -0
  353. package/dist/validate/wgslLinearity.js +298 -0
  354. package/dist/validate/wgslLinearity.js.map +1 -0
  355. package/dist/webgpu/index.d.ts +11 -0
  356. package/dist/webgpu/index.d.ts.map +1 -0
  357. package/dist/webgpu/index.js +11 -0
  358. package/dist/webgpu/index.js.map +1 -0
  359. package/package.json +85 -0
@@ -0,0 +1,413 @@
1
+ /**
2
+ * `Executor` — the tiny shared runtime that turns a {@link ShaderModule} plus
3
+ * bound textures and params into encoded GPU work.
4
+ *
5
+ * Steps per call: validate input labels against the module's I/O contract,
6
+ * get-or-compile the pipeline via `ctx.pipelineCache`, pack `params` through
7
+ * the module's TypeGPU schema, build the bind group from the module's typed
8
+ * layout (`root.unwrap(layout)`), and encode the pass. The host owns *when*
9
+ * to submit and *where* the output texture lives.
10
+ *
11
+ * **No executor-inserted readback.** `encode` records GPU commands only — it
12
+ * never calls `copyTextureToBuffer`, `mapAsync`, or any path that pulls
13
+ * pixels to the CPU. Materialization is a deliberate host-side step at
14
+ * boundaries (Phase 4).
15
+ *
16
+ * The `fragment` arm (full-screen pass) drives image-in/image-out modules;
17
+ * the `compute` arm (a workgroup dispatch writing a storage-texture output)
18
+ * drives the migrated timeline effects. Both share input validation, the
19
+ * params packer, and bind-group construction — only the pipeline kind and the
20
+ * encoded pass differ.
21
+ */
22
+ import { writeToArrayBuffer } from "typegpu";
23
+ import * as d from "typegpu/data";
24
+ import { encodePremulValidationPass, isPremulDebugEnabled } from "./debug/premulValidator.js";
25
+ import { FULLSCREEN_TRIANGLE_VERTEX, FULLSCREEN_VERTEX_ENTRY } from "./fullscreenQuad.js";
26
+ import { moduleKey } from "./module.js";
27
+ import { alphaPremulToStraightV1 } from "./shaders/alpha/premulToStraight/v1/module.js";
28
+ import { alphaStraightToPremulV1 } from "./shaders/alpha/straightToPremul/v1/module.js";
29
+ function variantMatchesInputs(variant, inputs) {
30
+ const required = variant.bindingKinds;
31
+ if (!required) {
32
+ return true;
33
+ }
34
+ for (const [name, kind] of Object.entries(required)) {
35
+ const bound = inputs[name];
36
+ if (!bound) {
37
+ continue;
38
+ }
39
+ if (bound.meta.bindingKind !== kind) {
40
+ return false;
41
+ }
42
+ }
43
+ return true;
44
+ }
45
+ function variantMeetsCapabilities(variant, capabilities) {
46
+ const req = variant.requires;
47
+ if (!req) {
48
+ return true;
49
+ }
50
+ if (req.textureExternal && !capabilities.textureExternal) {
51
+ return false;
52
+ }
53
+ if (req.f16Storage && !capabilities.f16Storage) {
54
+ return false;
55
+ }
56
+ return true;
57
+ }
58
+ /**
59
+ * Resolve which `(layout, wgsl, ...)` to use for this dispatch.
60
+ *
61
+ * Phase 3 policy: try variants in declaration order; the first one whose
62
+ * `bindingKinds` match the bound inputs AND whose `requires` are satisfied by
63
+ * `ctx.capabilities` wins. If no variant matches, the module's primary is
64
+ * used; if it can't match either (e.g. a `texture_external` input on a host
65
+ * without that capability), the Executor lets the original validation /
66
+ * pipeline-creation fail loud rather than substituting silently.
67
+ */
68
+ export function resolveVariant(module, inputs, capabilities) {
69
+ const primary = {
70
+ layout: module.layout,
71
+ wgsl: module.wgsl,
72
+ entryPoint: module.entryPoint,
73
+ samplers: module.samplers,
74
+ workgroupSize: module.workgroupSize,
75
+ variant: undefined
76
+ };
77
+ if (!module.variants || module.variants.length === 0) {
78
+ return primary;
79
+ }
80
+ for (const variant of module.variants) {
81
+ if (variantMatchesInputs(variant, inputs) &&
82
+ variantMeetsCapabilities(variant, capabilities)) {
83
+ return {
84
+ layout: variant.layout,
85
+ wgsl: variant.wgsl,
86
+ entryPoint: variant.entryPoint,
87
+ samplers: variant.samplers ?? {},
88
+ workgroupSize: variant.workgroupSize ?? module.workgroupSize,
89
+ variant: variant.name
90
+ };
91
+ }
92
+ }
93
+ return primary;
94
+ }
95
+ export function createExecutor() {
96
+ const samplerCache = new WeakMap();
97
+ function getSampler(device, descriptor) {
98
+ let perDevice = samplerCache.get(device);
99
+ if (!perDevice) {
100
+ perDevice = new Map();
101
+ samplerCache.set(device, perDevice);
102
+ }
103
+ const key = JSON.stringify(descriptor);
104
+ let sampler = perDevice.get(key);
105
+ if (!sampler) {
106
+ sampler = device.createSampler(descriptor);
107
+ perDevice.set(key, sampler);
108
+ }
109
+ return sampler;
110
+ }
111
+ function validateInputs(module, inputs) {
112
+ for (const [name, contract] of Object.entries(module.io.inputs)) {
113
+ const bound = inputs[name];
114
+ if (!bound) {
115
+ if (contract.optional) {
116
+ continue;
117
+ }
118
+ throw new Error(`${moduleKey(module.id, module.version)}: missing required input "${name}"`);
119
+ }
120
+ if (!contract.bindingKinds.includes(bound.meta.bindingKind)) {
121
+ throw new Error(`${moduleKey(module.id, module.version)}: input "${name}" has binding kind ` +
122
+ `"${bound.meta.bindingKind}", expected one of [${contract.bindingKinds.join(", ")}]`);
123
+ }
124
+ // colorSpace strict-check is deferred until `color/convert/*` modules
125
+ // land (Phase 3b); without them there is no safe way to auto-bridge a
126
+ // gamma↔linear mismatch, so failing loud here would just trip recipes
127
+ // whose internal modules already disagree about color space.
128
+ // alpha is checked-and-auto-bridged in `convertAlphaIfNeeded`.
129
+ }
130
+ }
131
+ /**
132
+ * Phase 3a alpha auto-insert: when a bound input's `meta.alpha` doesn't
133
+ * match the module's contract, encode an `alpha/convert/*` pass into the
134
+ * same encoder and substitute the converted texture. Scratch textures used
135
+ * for the conversion are released after the main dispatch is encoded — the
136
+ * GPU queue serializes the recorded passes, so the scratch is safe to reuse.
137
+ */
138
+ function convertAlphaIfNeeded(args) {
139
+ const { ctx, module, encoder, inputs } = args;
140
+ const converted = { ...inputs };
141
+ const scratchToRelease = [];
142
+ for (const [name, contract] of Object.entries(module.io.inputs)) {
143
+ const bound = converted[name];
144
+ if (!bound) {
145
+ continue;
146
+ }
147
+ if (bound.meta.alpha === contract.alpha) {
148
+ continue;
149
+ }
150
+ const convertModule = pickAlphaConvertModule(bound.meta.alpha, contract.alpha);
151
+ const scratch = ctx.scratch.acquire({
152
+ width: bound.width,
153
+ height: bound.height,
154
+ // Exact size, not bucketed: the convert pass only writes the logical
155
+ // dimensions (it bounds-checks against the source), and the converted
156
+ // texture is then sampled in normalized space by the main dispatch. A
157
+ // bucketed allocation would leave the margin unwritten, which the
158
+ // normalized sample reads as garbage.
159
+ exact: true,
160
+ format: "rgba8unorm",
161
+ usage: GPUTextureUsage.TEXTURE_BINDING |
162
+ GPUTextureUsage.STORAGE_BINDING |
163
+ GPUTextureUsage.COPY_SRC |
164
+ GPUTextureUsage.COPY_DST,
165
+ label: `alpha-convert-${module.id}-${name}`,
166
+ meta: {
167
+ colorSpace: bound.meta.colorSpace,
168
+ alpha: contract.alpha,
169
+ bindingKind: "texture_2d"
170
+ }
171
+ });
172
+ const [wgX, wgY] = convertModule.workgroupSize;
173
+ // Recursive encode for the convert pass — strict alpha matches by
174
+ // construction (bound.meta.alpha matches the convertModule's input), so
175
+ // this won't recurse a second time.
176
+ encodeInternal({
177
+ ctx,
178
+ module: convertModule,
179
+ encoder,
180
+ inputs: { source: bound },
181
+ output: scratch,
182
+ params: convertModule.paramDefaults,
183
+ dispatch: {
184
+ kind: "compute",
185
+ x: Math.ceil(bound.width / wgX),
186
+ y: Math.ceil(bound.height / wgY),
187
+ z: 1
188
+ }
189
+ });
190
+ converted[name] = scratch;
191
+ scratchToRelease.push(scratch);
192
+ }
193
+ return { inputs: converted, scratchToRelease };
194
+ }
195
+ function pickAlphaConvertModule(from, to) {
196
+ if (from === "straight" && to === "premultiplied") {
197
+ return alphaStraightToPremulV1;
198
+ }
199
+ if (from === "premultiplied" && to === "straight") {
200
+ return alphaPremulToStraightV1;
201
+ }
202
+ // Both branches of the (from, to) pair are exhausted by the early-return
203
+ // in convertAlphaIfNeeded when `from === to`; defensive only.
204
+ throw new Error(`no alpha convert module for ${from} → ${to}`);
205
+ }
206
+ function buildBindGroup(ctx, module, resolved, inputs, output, uniformBuffer) {
207
+ const entries = [];
208
+ let binding = 0;
209
+ for (const [name, entry] of Object.entries(resolved.layout.entries)) {
210
+ const current = binding++;
211
+ if (!entry) {
212
+ continue;
213
+ }
214
+ if ("uniform" in entry) {
215
+ if (!uniformBuffer) {
216
+ throw new Error(`${moduleKey(module.id, module.version)}: layout declares uniform "${name}" but module has no params`);
217
+ }
218
+ entries.push({ binding: current, resource: { buffer: uniformBuffer } });
219
+ }
220
+ else if ("storageTexture" in entry) {
221
+ // Storage textures are always the module's output — compute modules
222
+ // write their result here (read-write storage is not used in the pool).
223
+ entries.push({ binding: current, resource: output.createView() });
224
+ }
225
+ else if ("texture" in entry || "externalTexture" in entry) {
226
+ const bound = inputs[name];
227
+ if (bound) {
228
+ entries.push({ binding: current, resource: bound.createView() });
229
+ continue;
230
+ }
231
+ // Unbound: only allowed if the io contract marks this input optional;
232
+ // the executor then supplies a 1×1 white texture so the WGSL samples
233
+ // coverage = 1 everywhere (canonical mask-slot fallback). The
234
+ // validateInputs pass has already enforced contract.optional for any
235
+ // input named in `module.io.inputs`; if a layout has texture bindings
236
+ // not declared in `io.inputs`, that's a programming error and we
237
+ // surface it here as a missing-binding error rather than a silent
238
+ // white-texture substitution.
239
+ const contract = module.io.inputs[name];
240
+ if (!contract) {
241
+ throw new Error(`${moduleKey(module.id, module.version)}: layout binds texture "${name}" but it is not declared in io.inputs`);
242
+ }
243
+ if (!contract.optional) {
244
+ throw new Error(`${moduleKey(module.id, module.version)}: no texture bound for required input "${name}"`);
245
+ }
246
+ entries.push({
247
+ binding: current,
248
+ resource: ctx.getDefaultWhiteTexture().createView()
249
+ });
250
+ }
251
+ else if ("sampler" in entry) {
252
+ const descriptor = resolved.samplers[name];
253
+ if (!descriptor) {
254
+ throw new Error(`${moduleKey(module.id, module.version)}: no sampler descriptor for "${name}"`);
255
+ }
256
+ entries.push({
257
+ binding: current,
258
+ resource: getSampler(ctx.device, descriptor)
259
+ });
260
+ }
261
+ else {
262
+ throw new Error(`${moduleKey(module.id, module.version)}: unsupported layout entry "${name}"`);
263
+ }
264
+ }
265
+ return ctx.device.createBindGroup({
266
+ label: `${module.id}-bindgroup`,
267
+ layout: ctx.root.unwrap(resolved.layout),
268
+ entries
269
+ });
270
+ }
271
+ function getFragmentPipeline(ctx, module, resolved, targetFormat) {
272
+ const variantTag = resolved.variant ? `:${resolved.variant}` : "";
273
+ const cacheKey = `${moduleKey(module.id, module.version)}${variantTag}:fragment:${targetFormat}`;
274
+ const cached = ctx.pipelineCache.get(cacheKey);
275
+ if (cached) {
276
+ // SAFETY: the key carries the `:fragment:` segment, and the only write
277
+ // under a `:fragment:` key is the `createRenderPipeline` result below,
278
+ // so a hit here is a GPURenderPipeline.
279
+ return cached;
280
+ }
281
+ const shaderModule = ctx.device.createShaderModule({
282
+ label: `${module.id}-shader`,
283
+ code: `${FULLSCREEN_TRIANGLE_VERTEX}\n${resolved.wgsl}`
284
+ });
285
+ const pipeline = ctx.device.createRenderPipeline({
286
+ label: `${module.id}-pipeline`,
287
+ layout: ctx.device.createPipelineLayout({
288
+ bindGroupLayouts: [ctx.root.unwrap(resolved.layout)]
289
+ }),
290
+ vertex: { module: shaderModule, entryPoint: FULLSCREEN_VERTEX_ENTRY },
291
+ fragment: {
292
+ module: shaderModule,
293
+ entryPoint: resolved.entryPoint,
294
+ targets: [{ format: targetFormat }]
295
+ },
296
+ primitive: { topology: "triangle-list" }
297
+ });
298
+ ctx.pipelineCache.set(cacheKey, pipeline);
299
+ return pipeline;
300
+ }
301
+ function getComputePipeline(ctx, module, resolved) {
302
+ const variantTag = resolved.variant ? `:${resolved.variant}` : "";
303
+ const cacheKey = `${moduleKey(module.id, module.version)}${variantTag}:compute`;
304
+ const cached = ctx.pipelineCache.get(cacheKey);
305
+ if (cached) {
306
+ // SAFETY: the key ends in `:compute`, and the only write under a
307
+ // `:compute` key is the `createComputePipeline` result below, so a hit
308
+ // here is a GPUComputePipeline.
309
+ return cached;
310
+ }
311
+ const shaderModule = ctx.device.createShaderModule({
312
+ label: `${module.id}-shader`,
313
+ code: resolved.wgsl
314
+ });
315
+ const pipeline = ctx.device.createComputePipeline({
316
+ label: `${module.id}-pipeline`,
317
+ layout: ctx.device.createPipelineLayout({
318
+ bindGroupLayouts: [ctx.root.unwrap(resolved.layout)]
319
+ }),
320
+ compute: { module: shaderModule, entryPoint: resolved.entryPoint }
321
+ });
322
+ ctx.pipelineCache.set(cacheKey, pipeline);
323
+ return pipeline;
324
+ }
325
+ function packUniform(ctx, module, resolved, params) {
326
+ const hasUniform = Object.values(resolved.layout.entries).some((entry) => entry !== null && "uniform" in entry);
327
+ if (!hasUniform) {
328
+ return null;
329
+ }
330
+ // The module's TypeGPU schema is the single source of truth for the byte
331
+ // layout — `writeToArrayBuffer` packs `params` exactly as the WGSL struct
332
+ // expects. The packed bytes go into a buffer from the context's reused
333
+ // ring (see `UniformRing`) rather than a fresh per-encode allocation.
334
+ const size = d.sizeOf(module.params);
335
+ const data = new ArrayBuffer(size);
336
+ writeToArrayBuffer(data, module.params, params);
337
+ const buffer = ctx.uniformRing.acquire(size);
338
+ ctx.device.queue.writeBuffer(buffer, 0, data);
339
+ return buffer;
340
+ }
341
+ function encodeFragment(args, resolved) {
342
+ const { ctx, module, encoder, inputs, output, params } = args;
343
+ const uniformBuffer = packUniform(ctx, module, resolved, params);
344
+ const bindGroup = buildBindGroup(ctx, module, resolved, inputs, output, uniformBuffer);
345
+ const pipeline = getFragmentPipeline(ctx, module, resolved, output.format);
346
+ const pass = encoder.beginRenderPass({
347
+ label: `${module.id}-pass`,
348
+ colorAttachments: [
349
+ { view: output.createView(), loadOp: "clear", storeOp: "store" }
350
+ ]
351
+ });
352
+ pass.setPipeline(pipeline);
353
+ pass.setBindGroup(0, bindGroup);
354
+ pass.draw(3);
355
+ pass.end();
356
+ output.markWritten();
357
+ }
358
+ function encodeCompute(args, resolved, dispatch) {
359
+ const { ctx, module, encoder, inputs, output, params } = args;
360
+ const uniformBuffer = packUniform(ctx, module, resolved, params);
361
+ const bindGroup = buildBindGroup(ctx, module, resolved, inputs, output, uniformBuffer);
362
+ const pipeline = getComputePipeline(ctx, module, resolved);
363
+ const pass = encoder.beginComputePass({ label: `${module.id}-pass` });
364
+ pass.setPipeline(pipeline);
365
+ pass.setBindGroup(0, bindGroup);
366
+ pass.dispatchWorkgroups(dispatch.x, dispatch.y, dispatch.z ?? 1);
367
+ pass.end();
368
+ output.markWritten();
369
+ }
370
+ function encodeInternal(args) {
371
+ validateInputs(args.module, args.inputs);
372
+ const { inputs: maybeConverted, scratchToRelease } = convertAlphaIfNeeded(args);
373
+ const effectiveArgs = { ...args, inputs: maybeConverted };
374
+ const resolved = resolveVariant(effectiveArgs.module, effectiveArgs.inputs, effectiveArgs.ctx.capabilities);
375
+ try {
376
+ if (effectiveArgs.dispatch.kind === "fragment") {
377
+ encodeFragment(effectiveArgs, resolved);
378
+ }
379
+ else {
380
+ encodeCompute(effectiveArgs, resolved, effectiveArgs.dispatch);
381
+ }
382
+ // Item 5 of the shader-pool invariant enforcement plan: when
383
+ // NODETOOL_GPU_DEBUG contains "premul", encode a scan of the output
384
+ // texture that flags texels violating rgb ≤ a, rgb ≥ 0, no NaN. Only
385
+ // makes sense for premul outputs (straight outputs are by definition
386
+ // unrelated to the premul invariant). The gate short-circuits to a
387
+ // single boolean check when the flag is off — zero overhead in
388
+ // production.
389
+ if (isPremulDebugEnabled() &&
390
+ effectiveArgs.module.io.output.alpha === "premultiplied") {
391
+ encodePremulValidationPass({
392
+ ctx: effectiveArgs.ctx,
393
+ module: effectiveArgs.module,
394
+ encoder: effectiveArgs.encoder,
395
+ output: effectiveArgs.output
396
+ });
397
+ }
398
+ }
399
+ finally {
400
+ // Release after recording — queue ordering keeps the scratch reads
401
+ // ahead of any future writes from a re-acquire.
402
+ for (const scratch of scratchToRelease) {
403
+ effectiveArgs.ctx.scratch.release(scratch);
404
+ }
405
+ }
406
+ }
407
+ return {
408
+ encode(args) {
409
+ encodeInternal(args);
410
+ }
411
+ };
412
+ }
413
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared full-screen pass vertex shader for fragment modules.
3
+ *
4
+ * A single oversized triangle (3 vertices) covering the viewport. Emits
5
+ * normalized UVs in `[0,1]` with a top-left origin — the pool's canonical
6
+ * coordinate convention. Fragment modules consume `@location(0) uv: vec2f`.
7
+ */
8
+ export declare const FULLSCREEN_TRIANGLE_VERTEX = "\nstruct FullscreenVertexOutput {\n @builtin(position) position: vec4f,\n @location(0) uv: vec2f,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex: u32) -> FullscreenVertexOutput {\n var positions = array<vec2f, 3>(\n vec2f(-1.0, -1.0),\n vec2f( 3.0, -1.0),\n vec2f(-1.0, 3.0),\n );\n let pos = positions[vertexIndex];\n var out: FullscreenVertexOutput;\n out.position = vec4f(pos, 0.0, 1.0);\n // Map clip-space [-1,1] to UV [0,1] with top-left origin (flip Y).\n out.uv = vec2f((pos.x + 1.0) * 0.5, (1.0 - pos.y) * 0.5);\n return out;\n}\n";
9
+ /** Vertex entry point name in {@link FULLSCREEN_TRIANGLE_VERTEX}. */
10
+ export declare const FULLSCREEN_VERTEX_ENTRY = "vs_main";
11
+ //# sourceMappingURL=fullscreenQuad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenQuad.d.ts","sourceRoot":"","sources":["../src/fullscreenQuad.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,mkBAoBtC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,YAAY,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Shared full-screen pass vertex shader for fragment modules.
3
+ *
4
+ * A single oversized triangle (3 vertices) covering the viewport. Emits
5
+ * normalized UVs in `[0,1]` with a top-left origin — the pool's canonical
6
+ * coordinate convention. Fragment modules consume `@location(0) uv: vec2f`.
7
+ */
8
+ export const FULLSCREEN_TRIANGLE_VERTEX = /* wgsl */ `
9
+ struct FullscreenVertexOutput {
10
+ @builtin(position) position: vec4f,
11
+ @location(0) uv: vec2f,
12
+ };
13
+
14
+ @vertex
15
+ fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> FullscreenVertexOutput {
16
+ var positions = array<vec2f, 3>(
17
+ vec2f(-1.0, -1.0),
18
+ vec2f( 3.0, -1.0),
19
+ vec2f(-1.0, 3.0),
20
+ );
21
+ let pos = positions[vertexIndex];
22
+ var out: FullscreenVertexOutput;
23
+ out.position = vec4f(pos, 0.0, 1.0);
24
+ // Map clip-space [-1,1] to UV [0,1] with top-left origin (flip Y).
25
+ out.uv = vec2f((pos.x + 1.0) * 0.5, (1.0 - pos.y) * 0.5);
26
+ return out;
27
+ }
28
+ `;
29
+ /** Vertex entry point name in {@link FULLSCREEN_TRIANGLE_VERTEX}. */
30
+ export const FULLSCREEN_VERTEX_ENTRY = "vs_main";
31
+ //# sourceMappingURL=fullscreenQuad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenQuad.js","sourceRoot":"","sources":["../src/fullscreenQuad.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;CAoBpD,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @nodetool-ai/gpu — Public API (pure root).
3
+ *
4
+ * The blend-mode catalog + shared WGSL blend functions (Phase 0), consumed by
5
+ * the sketch editor, the timeline preview, and the Compositor node. The mode
6
+ * names come from `@nodetool-ai/protocol/blend-modes` and are re-exported
7
+ * here; this package owns the WGSL/Canvas2D/libvips mappings on top of them.
8
+ * This entry is pure — no WebGPU runtime, no TypeGPU import — so Node-side
9
+ * consumers (base-nodes) can pull in the catalog without dragging in the GPU
10
+ * stack.
11
+ *
12
+ * The TypeGPU-backed shader pool (Phase 1) lives behind `./pool`; the
13
+ * browser-only layer-compositing engine behind `./webgpu`.
14
+ */
15
+ export * from "./blend/index.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @nodetool-ai/gpu — Public API (pure root).
3
+ *
4
+ * The blend-mode catalog + shared WGSL blend functions (Phase 0), consumed by
5
+ * the sketch editor, the timeline preview, and the Compositor node. The mode
6
+ * names come from `@nodetool-ai/protocol/blend-modes` and are re-exported
7
+ * here; this package owns the WGSL/Canvas2D/libvips mappings on top of them.
8
+ * This entry is pure — no WebGPU runtime, no TypeGPU import — so Node-side
9
+ * consumers (base-nodes) can pull in the catalog without dragging in the GPU
10
+ * stack.
11
+ *
12
+ * The TypeGPU-backed shader pool (Phase 1) lives behind `./pool`; the
13
+ * browser-only layer-compositing engine behind `./webgpu`.
14
+ */
15
+ export * from "./blend/index.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,kBAAkB,CAAC"}