@jbrowse/render-core 4.3.0 → 5.0.0-beta.10

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 (352) hide show
  1. package/esm/RenderCanvas.d.ts +2 -2
  2. package/esm/RenderLifecycleMixin.d.ts +52 -20
  3. package/esm/RenderLifecycleMixin.js +89 -23
  4. package/esm/canvas2dUtils.d.ts +90 -23
  5. package/esm/canvas2dUtils.js +119 -36
  6. package/esm/colorRampLut.d.ts +5 -5
  7. package/esm/colorRampLut.js +6 -6
  8. package/esm/computePipeline.d.ts +14 -0
  9. package/esm/computePipeline.js +62 -0
  10. package/esm/contractReports.d.ts +54 -0
  11. package/esm/contractReports.js +112 -0
  12. package/esm/coverageBand.d.ts +13 -8
  13. package/esm/coverageBand.js +15 -5
  14. package/esm/coverageBandBuffers.d.ts +2 -9
  15. package/esm/coverageBandBuffers.js +1 -13
  16. package/esm/createRenderingBackend.d.ts +14 -18
  17. package/esm/createRenderingBackend.js +4 -2
  18. package/esm/displayPhase.d.ts +83 -104
  19. package/esm/displayPhase.js +42 -82
  20. package/esm/encodeMemo.d.ts +14 -0
  21. package/esm/encodeMemo.js +48 -0
  22. package/esm/gpuContextLostError.d.ts +30 -0
  23. package/esm/gpuContextLostError.js +40 -0
  24. package/esm/gpuDevice.d.ts +29 -10
  25. package/esm/gpuDevice.js +35 -16
  26. package/esm/graphicsCapabilities.d.ts +27 -19
  27. package/esm/graphicsCapabilities.js +40 -18
  28. package/esm/hal/createHal.d.ts +4 -5
  29. package/esm/hal/createHal.js +14 -4
  30. package/esm/hal/deviceGpuCache.d.ts +25 -30
  31. package/esm/hal/deviceGpuCache.js +88 -97
  32. package/esm/hal/gpuHalBase.d.ts +5 -4
  33. package/esm/hal/gpuHalBase.js +25 -14
  34. package/esm/hal/index.d.ts +2 -2
  35. package/esm/hal/index.js +1 -1
  36. package/esm/hal/mockHal.d.ts +15 -10
  37. package/esm/hal/mockHal.js +31 -18
  38. package/esm/hal/oomReporter.d.ts +7 -0
  39. package/esm/hal/oomReporter.js +10 -0
  40. package/esm/hal/passIds.d.ts +8 -7
  41. package/esm/hal/passIds.js +11 -10
  42. package/esm/hal/regionRegistry.d.ts +0 -1
  43. package/esm/hal/regionRegistry.js +3 -15
  44. package/esm/hal/types.d.ts +55 -18
  45. package/esm/hal/webgl2Hal.d.ts +23 -6
  46. package/esm/hal/webgl2Hal.js +161 -155
  47. package/esm/hal/webgpuHal.d.ts +29 -13
  48. package/esm/hal/webgpuHal.js +221 -153
  49. package/esm/installUpload.d.ts +16 -3
  50. package/esm/installUpload.js +13 -41
  51. package/esm/instanceCache.d.ts +10 -7
  52. package/esm/instanceCache.js +14 -15
  53. package/esm/instancePass.d.ts +2 -1
  54. package/esm/mapUploadSync.d.ts +2 -10
  55. package/esm/mapUploadSync.js +2 -3
  56. package/esm/marks/barMark.d.ts +30 -0
  57. package/esm/marks/barMark.js +149 -0
  58. package/esm/marks/colorFill.d.ts +17 -0
  59. package/esm/marks/colorFill.js +26 -0
  60. package/esm/marks/drawAgainstHit.d.ts +113 -0
  61. package/esm/marks/drawAgainstHit.js +407 -0
  62. package/esm/marks/ellipseDistance.d.ts +10 -0
  63. package/esm/marks/ellipseDistance.js +136 -0
  64. package/esm/marks/glyphPaint.d.ts +36 -0
  65. package/esm/marks/glyphPaint.js +77 -0
  66. package/esm/marks/index.d.ts +33 -0
  67. package/esm/marks/index.js +20 -0
  68. package/esm/marks/lineMark.d.ts +37 -0
  69. package/esm/marks/lineMark.js +416 -0
  70. package/esm/marks/linkMark.d.ts +76 -0
  71. package/esm/marks/linkMark.js +585 -0
  72. package/esm/marks/markBackend.d.ts +118 -0
  73. package/esm/marks/markBackend.js +196 -0
  74. package/esm/marks/markHit.d.ts +32 -0
  75. package/esm/marks/markHit.js +61 -0
  76. package/esm/marks/markInk.d.ts +18 -0
  77. package/esm/marks/markInk.js +71 -0
  78. package/esm/marks/markPaint.d.ts +14 -0
  79. package/esm/marks/markPaint.js +32 -0
  80. package/esm/marks/markPlan.d.ts +25 -0
  81. package/esm/marks/markPlan.js +20 -0
  82. package/esm/marks/markRamp.d.ts +72 -0
  83. package/esm/marks/markRamp.js +197 -0
  84. package/esm/marks/nearestMarkHit.d.ts +55 -0
  85. package/esm/marks/nearestMarkHit.js +158 -0
  86. package/esm/marks/pathRecorder.d.ts +14 -0
  87. package/esm/marks/pathRecorder.js +80 -0
  88. package/esm/marks/pointMark.d.ts +42 -0
  89. package/esm/marks/pointMark.js +125 -0
  90. package/esm/marks/rowLane.d.ts +39 -0
  91. package/esm/marks/rowLane.js +41 -0
  92. package/esm/marks/rowSpanIndex.d.ts +29 -0
  93. package/esm/marks/rowSpanIndex.js +141 -0
  94. package/esm/marks/rowTable.d.ts +41 -0
  95. package/esm/marks/rowTable.js +75 -0
  96. package/esm/marks/ruleMark.d.ts +21 -0
  97. package/esm/marks/ruleMark.js +91 -0
  98. package/esm/marks/spanMark.d.ts +42 -0
  99. package/esm/marks/spanMark.js +81 -0
  100. package/esm/marks/types.d.ts +261 -0
  101. package/esm/marks/types.js +175 -0
  102. package/esm/marks/valueScale.d.ts +23 -0
  103. package/esm/marks/valueScale.js +11 -0
  104. package/esm/namedReactions.d.ts +3 -4
  105. package/esm/namedReactions.js +3 -4
  106. package/esm/perRegionRenderingBackend.d.ts +21 -3
  107. package/esm/perRegionRenderingBackend.js +37 -3
  108. package/esm/regionDataMap.d.ts +2 -2
  109. package/esm/regionDataMap.js +25 -23
  110. package/esm/renderBlock.d.ts +14 -0
  111. package/esm/renderBlock.js +25 -0
  112. package/esm/renderingBackendBase.d.ts +20 -14
  113. package/esm/renderingBackendBase.js +12 -7
  114. package/esm/scoreScale.d.ts +27 -0
  115. package/esm/scoreScale.js +88 -0
  116. package/esm/shaders/barMark.generated.d.ts +3 -0
  117. package/esm/shaders/barMark.generated.js +7 -0
  118. package/esm/shaders/barMark.glsl.generated.d.ts +2 -0
  119. package/esm/shaders/barMark.glsl.generated.js +4 -0
  120. package/esm/shaders/barMark.iface.generated.d.ts +90 -0
  121. package/esm/shaders/barMark.iface.generated.js +205 -0
  122. package/esm/shaders/barMark.wgsl.generated.d.ts +1 -0
  123. package/esm/shaders/barMark.wgsl.generated.js +3 -0
  124. package/esm/shaders/capsule.js.generated.d.ts +1 -0
  125. package/esm/shaders/capsule.js.generated.js +11 -0
  126. package/esm/shaders/clipStrip.generated.d.ts +2 -0
  127. package/esm/shaders/clipStrip.generated.js +4 -0
  128. package/esm/shaders/clipStrip.js.generated.d.ts +1 -0
  129. package/esm/shaders/clipStrip.js.generated.js +21 -0
  130. package/esm/shaders/colorRampLut.js.generated.d.ts +1 -0
  131. package/esm/shaders/colorRampLut.js.generated.js +17 -0
  132. package/esm/shaders/coverageBar.generated.d.ts +2 -3
  133. package/esm/shaders/coverageBar.generated.js +4 -3
  134. package/esm/shaders/coverageBar.glsl.generated.d.ts +2 -0
  135. package/esm/shaders/coverageBar.glsl.generated.js +4 -0
  136. package/esm/shaders/coverageBar.iface.generated.js +1 -1
  137. package/esm/shaders/coverageBar.wgsl.generated.d.ts +1 -0
  138. package/esm/shaders/coverageBar.wgsl.generated.js +3 -0
  139. package/esm/shaders/coverageClip.generated.d.ts +3 -0
  140. package/esm/shaders/coverageClip.generated.js +7 -0
  141. package/esm/shaders/coverageClip.glsl.generated.d.ts +2 -0
  142. package/esm/shaders/coverageClip.glsl.generated.js +4 -0
  143. package/esm/shaders/coverageClip.iface.generated.d.ts +85 -0
  144. package/esm/shaders/coverageClip.iface.generated.js +114 -0
  145. package/esm/shaders/coverageClip.wgsl.generated.d.ts +1 -0
  146. package/esm/shaders/coverageClip.wgsl.generated.js +3 -0
  147. package/esm/shaders/coverageIndicator.generated.d.ts +2 -3
  148. package/esm/shaders/coverageIndicator.generated.js +4 -3
  149. package/esm/shaders/coverageIndicator.glsl.generated.d.ts +2 -0
  150. package/esm/shaders/coverageIndicator.glsl.generated.js +4 -0
  151. package/esm/shaders/coverageIndicator.iface.generated.js +1 -1
  152. package/esm/shaders/coverageIndicator.wgsl.generated.d.ts +1 -0
  153. package/esm/shaders/coverageIndicator.wgsl.generated.js +3 -0
  154. package/esm/shaders/coverageInterbase.generated.d.ts +2 -3
  155. package/esm/shaders/coverageInterbase.generated.js +4 -3
  156. package/esm/shaders/coverageInterbase.glsl.generated.d.ts +2 -0
  157. package/esm/shaders/coverageInterbase.glsl.generated.js +4 -0
  158. package/esm/shaders/coverageInterbase.iface.generated.js +1 -1
  159. package/esm/shaders/coverageInterbase.wgsl.generated.d.ts +1 -0
  160. package/esm/shaders/coverageInterbase.wgsl.generated.js +3 -0
  161. package/esm/shaders/coverageMod.generated.d.ts +2 -3
  162. package/esm/shaders/coverageMod.generated.js +4 -3
  163. package/esm/shaders/coverageMod.glsl.generated.d.ts +2 -0
  164. package/esm/shaders/coverageMod.glsl.generated.js +4 -0
  165. package/esm/shaders/coverageMod.iface.generated.js +1 -1
  166. package/esm/shaders/coverageMod.wgsl.generated.d.ts +1 -0
  167. package/esm/shaders/coverageMod.wgsl.generated.js +3 -0
  168. package/esm/shaders/coverageSnp.generated.d.ts +2 -3
  169. package/esm/shaders/coverageSnp.generated.js +4 -3
  170. package/esm/shaders/coverageSnp.glsl.generated.d.ts +2 -0
  171. package/esm/shaders/coverageSnp.glsl.generated.js +4 -0
  172. package/esm/shaders/coverageSnp.iface.generated.js +1 -1
  173. package/esm/shaders/coverageSnp.wgsl.generated.d.ts +1 -0
  174. package/esm/shaders/coverageSnp.wgsl.generated.js +3 -0
  175. package/esm/shaders/curveDistance.js.generated.d.ts +5 -0
  176. package/esm/shaders/curveDistance.js.generated.js +87 -0
  177. package/esm/shaders/hpmath.js.generated.d.ts +2 -1
  178. package/esm/shaders/hpmath.js.generated.js +5 -2
  179. package/esm/shaders/lineCenterMark.generated.d.ts +3 -0
  180. package/esm/shaders/lineCenterMark.generated.js +7 -0
  181. package/esm/shaders/lineCenterMark.glsl.generated.d.ts +2 -0
  182. package/esm/shaders/lineCenterMark.glsl.generated.js +4 -0
  183. package/esm/shaders/lineCenterMark.iface.generated.d.ts +104 -0
  184. package/esm/shaders/lineCenterMark.iface.generated.js +237 -0
  185. package/esm/shaders/lineCenterMark.wgsl.generated.d.ts +1 -0
  186. package/esm/shaders/lineCenterMark.wgsl.generated.js +3 -0
  187. package/esm/shaders/lineCommon.generated.d.ts +2 -0
  188. package/esm/shaders/lineCommon.generated.js +4 -0
  189. package/esm/shaders/lineStepMark.generated.d.ts +3 -0
  190. package/esm/shaders/lineStepMark.generated.js +7 -0
  191. package/esm/shaders/lineStepMark.glsl.generated.d.ts +2 -0
  192. package/esm/shaders/lineStepMark.glsl.generated.js +4 -0
  193. package/esm/shaders/lineStepMark.iface.generated.d.ts +98 -0
  194. package/esm/shaders/lineStepMark.iface.generated.js +225 -0
  195. package/esm/shaders/lineStepMark.wgsl.generated.d.ts +1 -0
  196. package/esm/shaders/lineStepMark.wgsl.generated.js +3 -0
  197. package/esm/shaders/linkMark.consts.generated.d.ts +14 -0
  198. package/esm/shaders/linkMark.consts.generated.js +16 -0
  199. package/esm/shaders/linkMark.generated.d.ts +4 -0
  200. package/esm/shaders/linkMark.generated.js +8 -0
  201. package/esm/shaders/linkMark.glsl.generated.d.ts +2 -0
  202. package/esm/shaders/linkMark.glsl.generated.js +4 -0
  203. package/esm/shaders/linkMark.iface.generated.d.ts +142 -0
  204. package/esm/shaders/linkMark.iface.generated.js +1829 -0
  205. package/esm/shaders/linkMark.js.generated.d.ts +7 -0
  206. package/esm/shaders/linkMark.js.generated.js +159 -0
  207. package/esm/shaders/linkMark.wgsl.generated.d.ts +1 -0
  208. package/esm/shaders/linkMark.wgsl.generated.js +3 -0
  209. package/esm/shaders/markColor.generated.d.ts +9 -0
  210. package/esm/shaders/markColor.generated.js +11 -0
  211. package/esm/shaders/pointGlyph.js.generated.d.ts +2 -0
  212. package/esm/shaders/pointGlyph.js.generated.js +15 -0
  213. package/esm/shaders/pointMark.consts.generated.d.ts +7 -0
  214. package/esm/shaders/pointMark.consts.generated.js +9 -0
  215. package/esm/shaders/pointMark.generated.d.ts +4 -0
  216. package/esm/shaders/pointMark.generated.js +8 -0
  217. package/esm/shaders/pointMark.glsl.generated.d.ts +2 -0
  218. package/esm/shaders/pointMark.glsl.generated.js +4 -0
  219. package/esm/shaders/pointMark.iface.generated.d.ts +98 -0
  220. package/esm/shaders/pointMark.iface.generated.js +219 -0
  221. package/esm/shaders/pointMark.js.generated.d.ts +3 -0
  222. package/esm/shaders/pointMark.js.generated.js +93 -0
  223. package/esm/shaders/pointMark.wgsl.generated.d.ts +1 -0
  224. package/esm/shaders/pointMark.wgsl.generated.js +3 -0
  225. package/esm/shaders/rowRect.generated.d.ts +0 -1
  226. package/esm/shaders/rowRect.generated.js +0 -1
  227. package/esm/shaders/rowTable.generated.d.ts +1 -0
  228. package/esm/shaders/rowTable.generated.js +3 -0
  229. package/esm/shaders/rowTable.js.generated.d.ts +5 -0
  230. package/esm/shaders/rowTable.js.generated.js +29 -0
  231. package/esm/shaders/scoreScale.generated.d.ts +2 -0
  232. package/esm/shaders/scoreScale.generated.js +4 -0
  233. package/esm/shaders/scoreScale.js.generated.d.ts +1 -0
  234. package/esm/shaders/scoreScale.js.generated.js +50 -23
  235. package/esm/shaders/spanMark.generated.d.ts +3 -0
  236. package/esm/shaders/spanMark.generated.js +7 -0
  237. package/esm/shaders/spanMark.glsl.generated.d.ts +2 -0
  238. package/esm/shaders/spanMark.glsl.generated.js +4 -0
  239. package/esm/shaders/spanMark.iface.generated.d.ts +81 -0
  240. package/esm/shaders/spanMark.iface.generated.js +215 -0
  241. package/esm/shaders/spanMark.wgsl.generated.d.ts +1 -0
  242. package/esm/shaders/spanMark.wgsl.generated.js +3 -0
  243. package/esm/sharedBackendKey.d.ts +18 -0
  244. package/esm/{keyedRenderingBackend.js → sharedBackendKey.js} +5 -0
  245. package/esm/slangPass.d.ts +18 -11
  246. package/esm/slangPass.js +12 -4
  247. package/esm/useGraphicsCapabilities.d.ts +1 -1
  248. package/esm/useGraphicsCapabilities.js +1 -1
  249. package/esm/useRenderingBackend.d.ts +13 -13
  250. package/esm/useRenderingBackend.js +58 -20
  251. package/esm/webgpuUtils.d.ts +3 -11
  252. package/esm/webgpuUtils.js +12 -33
  253. package/package.json +32 -7
  254. package/src/shaders/antialias.slang +46 -0
  255. package/src/shaders/arcHull.test.ts +267 -0
  256. package/src/shaders/barMark.generated.ts +11 -0
  257. package/src/shaders/barMark.glsl.generated.ts +6 -0
  258. package/src/shaders/barMark.iface.generated.ts +285 -0
  259. package/src/shaders/barMark.slang +167 -0
  260. package/src/shaders/barMark.wgsl.generated.ts +4 -0
  261. package/src/shaders/capsule.js.generated.ts +14 -0
  262. package/src/shaders/capsule.slang +12 -4
  263. package/src/shaders/clipStrip.generated.ts +6 -0
  264. package/src/shaders/clipStrip.js.generated.ts +22 -0
  265. package/src/shaders/clipStrip.slang +34 -0
  266. package/src/shaders/clipStrip.test.ts +39 -0
  267. package/src/shaders/colorPack.slang +5 -1
  268. package/src/shaders/colorRampLut.js.generated.ts +22 -0
  269. package/src/shaders/colorRampLut.slang +15 -1
  270. package/src/shaders/coverageBand.slang +64 -32
  271. package/src/shaders/coverageBar.generated.ts +6 -5
  272. package/src/shaders/coverageBar.glsl.generated.ts +6 -0
  273. package/src/shaders/coverageBar.iface.generated.ts +1 -1
  274. package/src/shaders/coverageBar.slang +10 -10
  275. package/src/shaders/coverageBar.wgsl.generated.ts +4 -0
  276. package/src/shaders/coverageClip.generated.ts +11 -0
  277. package/src/shaders/coverageClip.glsl.generated.ts +6 -0
  278. package/src/shaders/coverageClip.iface.generated.ts +172 -0
  279. package/src/shaders/coverageClip.slang +38 -0
  280. package/src/shaders/coverageClip.wgsl.generated.ts +4 -0
  281. package/src/shaders/coverageIndicator.generated.ts +6 -5
  282. package/src/shaders/coverageIndicator.glsl.generated.ts +6 -0
  283. package/src/shaders/coverageIndicator.iface.generated.ts +1 -1
  284. package/src/shaders/coverageIndicator.wgsl.generated.ts +4 -0
  285. package/src/shaders/coverageInterbase.generated.ts +6 -5
  286. package/src/shaders/coverageInterbase.glsl.generated.ts +6 -0
  287. package/src/shaders/coverageInterbase.iface.generated.ts +1 -1
  288. package/src/shaders/coverageInterbase.wgsl.generated.ts +4 -0
  289. package/src/shaders/coverageMod.generated.ts +6 -5
  290. package/src/shaders/coverageMod.glsl.generated.ts +6 -0
  291. package/src/shaders/coverageMod.iface.generated.ts +1 -1
  292. package/src/shaders/coverageMod.wgsl.generated.ts +4 -0
  293. package/src/shaders/coverageSnp.generated.ts +6 -5
  294. package/src/shaders/coverageSnp.glsl.generated.ts +6 -0
  295. package/src/shaders/coverageSnp.iface.generated.ts +1 -1
  296. package/src/shaders/coverageSnp.wgsl.generated.ts +4 -0
  297. package/src/shaders/curveDistance.js.generated.ts +91 -0
  298. package/src/shaders/curveDistance.slang +265 -0
  299. package/src/shaders/hpClampFloor.test.ts +87 -0
  300. package/src/shaders/hpmath.js.generated.ts +6 -2
  301. package/src/shaders/hpmath.slang +100 -48
  302. package/src/shaders/insetValueScale.test.ts +67 -0
  303. package/src/shaders/lineCenterMark.generated.ts +11 -0
  304. package/src/shaders/lineCenterMark.glsl.generated.ts +6 -0
  305. package/src/shaders/lineCenterMark.iface.generated.ts +328 -0
  306. package/src/shaders/lineCenterMark.slang +127 -0
  307. package/src/shaders/lineCenterMark.wgsl.generated.ts +4 -0
  308. package/src/shaders/lineCommon.generated.ts +6 -0
  309. package/src/shaders/lineCommon.slang +102 -0
  310. package/src/shaders/lineStepMark.generated.ts +11 -0
  311. package/src/shaders/lineStepMark.glsl.generated.ts +6 -0
  312. package/src/shaders/lineStepMark.iface.generated.ts +311 -0
  313. package/src/shaders/lineStepMark.slang +125 -0
  314. package/src/shaders/lineStepMark.wgsl.generated.ts +4 -0
  315. package/src/shaders/linkMark.consts.generated.ts +30 -0
  316. package/src/shaders/linkMark.generated.ts +12 -0
  317. package/src/shaders/linkMark.glsl.generated.ts +6 -0
  318. package/src/shaders/linkMark.iface.generated.ts +1954 -0
  319. package/src/shaders/linkMark.js.generated.ts +167 -0
  320. package/src/shaders/linkMark.slang +439 -0
  321. package/src/shaders/linkMark.wgsl.generated.ts +4 -0
  322. package/src/shaders/markColor.generated.ts +20 -0
  323. package/src/shaders/markColor.slang +128 -0
  324. package/src/shaders/pointGlyph.js.generated.ts +20 -0
  325. package/src/shaders/pointGlyph.slang +23 -7
  326. package/src/shaders/pointGlyphPad.test.ts +242 -0
  327. package/src/shaders/pointMark.consts.generated.ts +16 -0
  328. package/src/shaders/pointMark.generated.ts +12 -0
  329. package/src/shaders/pointMark.glsl.generated.ts +6 -0
  330. package/src/shaders/pointMark.iface.generated.ts +304 -0
  331. package/src/shaders/pointMark.js.generated.ts +99 -0
  332. package/src/shaders/pointMark.slang +227 -0
  333. package/src/shaders/pointMark.wgsl.generated.ts +4 -0
  334. package/src/shaders/rowRect.generated.ts +0 -2
  335. package/src/shaders/rowRect.slang +39 -58
  336. package/src/shaders/rowTable.generated.ts +4 -0
  337. package/src/shaders/rowTable.js.generated.ts +37 -0
  338. package/src/shaders/rowTable.slang +98 -0
  339. package/src/shaders/scoreScale.generated.ts +6 -0
  340. package/src/shaders/scoreScale.js.generated.ts +48 -23
  341. package/src/shaders/scoreScale.slang +49 -55
  342. package/src/shaders/sdEllipse.test.ts +211 -0
  343. package/src/shaders/spanMark.generated.ts +11 -0
  344. package/src/shaders/spanMark.glsl.generated.ts +6 -0
  345. package/src/shaders/spanMark.iface.generated.ts +289 -0
  346. package/src/shaders/spanMark.slang +77 -0
  347. package/src/shaders/spanMark.wgsl.generated.ts +4 -0
  348. package/src/shaders/valueScale.slang +26 -0
  349. package/src/shaders/wideCircleLeg.test.ts +85 -0
  350. package/esm/globalRenderingBackend.d.ts +0 -90
  351. package/esm/globalRenderingBackend.js +0 -53
  352. package/esm/keyedRenderingBackend.d.ts +0 -41
@@ -1,9 +1,6 @@
1
- // Per-(region, pass) buffer registry shared by WebGL2Hal and WebGPUHal.
2
- // Owns the nested map and the destroy semantics so the two HALs only have to
3
- // supply a leaf-buffer type and its destroy hook. Both HALs used to ship
4
- // near-identical deleteBuffer/deleteRegion/deleteAll/prune/getOrCreate
5
- // implementations; centralizing avoids drift when one side's lifecycle is
6
- // tweaked and the other isn't. Contract pinned by regionRegistry.test.ts.
1
+ // Per-(region, pass) buffer registry shared by WebGL2Hal and WebGPUHal: the
2
+ // nested map plus destroy semantics, so each HAL supplies only its leaf-buffer
3
+ // type and destroy hook.
7
4
  export class RegionRegistry {
8
5
  destroy;
9
6
  regions = new Map();
@@ -54,13 +51,4 @@ export class RegionRegistry {
54
51
  }
55
52
  this.regions.clear();
56
53
  }
57
- // Delete every region whose key is NOT in `active`.
58
- prune(active) {
59
- const activeSet = new Set(active);
60
- for (const regionKey of this.regions.keys()) {
61
- if (!activeSet.has(regionKey)) {
62
- this.deleteRegion(regionKey);
63
- }
64
- }
65
- }
66
54
  }
@@ -27,9 +27,8 @@ export interface VertexAttributeLayout {
27
27
  * this is worth stating per display — see ARCHITECTURAL_LIMITS.md §"The MSAA
28
28
  * target is the largest per-display allocation".
29
29
  *
30
- * WebGL2 has no counterpart: it draws to the default framebuffer with
31
- * `antialias: true`, so its multisampling is the browser's choice inside the
32
- * browser's budget.
30
+ * WebGL2 draws to the default framebuffer and asks for `antialias` above one
31
+ * sample, so there the samples are the browser's, inside the browser's budget.
33
32
  */
34
33
  export type SampleCount = 1 | 4;
35
34
  export type BlendFactor = 'one' | 'src-alpha' | 'one-minus-src-alpha' | 'zero';
@@ -39,29 +38,57 @@ export type BlendState = {
39
38
  dstFactor: BlendFactor;
40
39
  } | {
41
40
  op: 'max';
41
+ } | {
42
+ op: 'min';
43
+ } | {
44
+ op: 'behind';
42
45
  };
46
+ export type ShaderStage = 'vertex' | 'fragment' | 'compute';
43
47
  /**
44
48
  * One entry of a shader's GPU binding table, as the Slang codegen reflects it.
45
49
  *
46
- * `kind` is spelled the way WebGPU spells it so a consumer can build a
47
- * `createBindGroupLayout` entry from it directly. That is the point: the binding
48
- * indices used to be asserted by hand in three places that never consulted the
49
- * shader — this HAL's two hardcoded render layouts, and the LD compute driver's
50
- * own. A shader's `BINDINGS` export is the reflected truth, and `pnpm
51
- * gen:shaders` now refuses a render shader whose table is not one the HALs bind.
50
+ * `kind` is spelled the way WebGPU spells it and `stages` names the entry
51
+ * points that read the binding, so a consumer builds a `createBindGroupLayout`
52
+ * entry from it directly, `visibility` included. The WebGPU HAL and the compute
53
+ * driver both do. `pnpm gen:shaders` refuses a render shader whose table is not
54
+ * one the HALs bind, and a `stages` that leaves out a stage the emitted WGSL
55
+ * reads the binding in.
52
56
  */
53
57
  export interface ShaderBinding {
54
58
  index: number;
55
59
  kind: 'uniform' | 'texture' | 'sampler' | 'storage' | 'read-only-storage';
56
60
  name: string;
61
+ stages: readonly ShaderStage[];
57
62
  }
63
+ /**
64
+ * What a pass's texture is filled from: RGBA bytes, or a canvas whose pixels
65
+ * are copied on the GPU — the circular view's ring samples a linear display's
66
+ * finished strip that way. A canvas source lands premultiplied, so a shader
67
+ * reading one returns its sample under `//! blend: premultiplied`.
68
+ */
69
+ export type TextureSource = Uint8Array | HTMLCanvasElement | OffscreenCanvas;
58
70
  export interface TextureBinding {
59
- textureBinding: number;
60
- samplerBinding: number;
71
+ name: string;
61
72
  glTextureUnit: number;
62
73
  glUniformName: string;
63
74
  filter: 'linear' | 'nearest';
64
75
  }
76
+ /**
77
+ * A shader's compiled text, one loader per target. `pnpm gen:shaders` emits it
78
+ * as a shader module's `SOURCE`, each loader an `import()` of a module holding
79
+ * nothing but that target's strings, so no realm evaluates shader text until a
80
+ * HAL is built with the pass: WebGPU loads the WGSL, WebGL2 the GLSL, Canvas2D
81
+ * neither, and the RPC worker never builds one.
82
+ */
83
+ export interface ShaderSource {
84
+ wgsl: () => Promise<{
85
+ WGSL_SOURCE: string;
86
+ }>;
87
+ glsl: () => Promise<{
88
+ GLSL_VERTEX: string;
89
+ GLSL_FRAGMENT: string;
90
+ }>;
91
+ }
65
92
  /**
66
93
  * A **pipeline state object (PSO)**: shaders, vertex input layout, blend state,
67
94
  * primitive topology and texture bindings, baked into one immutable
@@ -76,19 +103,22 @@ export interface TextureBinding {
76
103
  */
77
104
  export interface PipelineDescriptor {
78
105
  id: string;
79
- wgslSource: string;
80
- glslVertex: string;
81
- glslFragment: string;
106
+ source: ShaderSource;
82
107
  instanceStride: number;
108
+ /** Bytes of the uniform block the shader binds; the HAL's slot is the largest over its passes. */
109
+ uniformByteSize: number;
83
110
  verticesPerInstance: number;
84
111
  blend: boolean;
85
112
  blendState?: BlendState;
86
113
  vertexAttributes: readonly VertexAttributeLayout[];
87
114
  topology?: 'triangle-list' | 'triangle-strip' | 'line-list';
115
+ coverage?: 'analytic';
88
116
  textures?: readonly [TextureBinding, ...TextureBinding[]];
89
- bindings?: readonly ShaderBinding[];
117
+ bindings: readonly ShaderBinding[];
90
118
  }
91
119
  export interface GpuHal {
120
+ /** The uniform slot size, the largest block any registered pass binds. */
121
+ readonly uniformByteSize: number;
92
122
  /**
93
123
  * Size the canvas, and report the scale its backing store actually got.
94
124
  * Callers derive every device-px rect from THAT rather than from `getDpr()`:
@@ -97,15 +127,22 @@ export interface GpuHal {
97
127
  * track goes blank; WebGL2 clamps and paints at the wrong scale).
98
128
  */
99
129
  resize(width: number, height: number): CanvasScale;
130
+ /**
131
+ * Drop the canvas-sized render targets this HAL allocated, keeping the
132
+ * device, the context, the compiled pipelines and every uploaded buffer. The
133
+ * next `resize` rebuilds them, so a display whose canvas has scrolled out of
134
+ * the page can give the bytes back and come back at the cost of one frame
135
+ * rather than a context re-acquire and a shader recompile.
136
+ */
137
+ releaseRenderTargets(): void;
100
138
  uploadBuffer(regionKey: number, passId: string, data: ArrayBuffer | ArrayBufferView, count: number): void;
101
139
  getBufferCount(regionKey: number, passId: string): number;
102
140
  deleteBuffer(regionKey: number, passId: string): void;
103
141
  deleteRegion(regionKey: number): void;
104
- pruneRegions(active: Iterable<number>): void;
105
- uploadTexture(passId: string, data: Uint8Array, width: number, height: number): void;
142
+ uploadTexture(passId: string, data: TextureSource, width: number, height: number, sampler?: string): void;
106
143
  writeUniforms(data: ArrayBuffer): void;
107
144
  beginFrame(clearR: number, clearG: number, clearB: number, clearA?: number): void;
108
- drawPass(passId: string, regionKey: number, bufferPassId?: string): void;
145
+ drawPass(passId: string, regionKey: number, bufferPassId?: string, verticesPerInstance?: number): void;
109
146
  endFrame(): void;
110
147
  setScissor(x: number, y: number, w: number, h: number): void;
111
148
  clearScissor(): void;
@@ -1,5 +1,5 @@
1
1
  import { GpuHalBase } from './gpuHalBase.ts';
2
- import type { GpuHal, PipelineDescriptor, TextureBinding } from './types.ts';
2
+ import type { GpuHal, PipelineDescriptor, SampleCount, TextureBinding, TextureSource } from './types.ts';
3
3
  interface RegionPassBuffer {
4
4
  vbo: WebGLBuffer;
5
5
  count: number;
@@ -8,6 +8,9 @@ export declare class WebGL2Hal extends GpuHalBase<RegionPassBuffer> implements G
8
8
  private gl;
9
9
  private canvas;
10
10
  private passes;
11
+ private glsl;
12
+ private programs;
13
+ private passTextures;
11
14
  private ubo;
12
15
  private maxTextureDim;
13
16
  private debug;
@@ -17,7 +20,12 @@ export declare class WebGL2Hal extends GpuHalBase<RegionPassBuffer> implements G
17
20
  private contextLostListener;
18
21
  private contextRestoredListener;
19
22
  private checkGlError;
20
- constructor(canvas: HTMLCanvasElement, descriptors: PipelineDescriptor[], uniformByteSize: number);
23
+ /**
24
+ * Loads every pass's GLSL before the context is acquired, so a load that
25
+ * fails leaves the canvas free for Canvas2D.
26
+ */
27
+ static create(canvas: HTMLCanvasElement, descriptors: PipelineDescriptor[], sampleCount?: SampleCount): Promise<WebGL2Hal>;
28
+ private constructor();
21
29
  protected limits(): {
22
30
  maxBufferBytes: number;
23
31
  maxTextureDimensionPx: number;
@@ -27,21 +35,30 @@ export declare class WebGL2Hal extends GpuHalBase<RegionPassBuffer> implements G
27
35
  count: number;
28
36
  };
29
37
  protected destroyBuffer(buf: RegionPassBuffer): void;
30
- private compilePass;
38
+ private link;
31
39
  private getPass;
32
40
  resize(width: number, height: number): import("./types.ts").CanvasScale;
33
- protected createTexture(passId: string, binding: TextureBinding, data: Uint8Array, width: number, height: number): void;
41
+ /**
42
+ * Nothing to give back. WebGL2 multisamples in the drawing buffer the context
43
+ * owns (`antialias` above one sample), so this HAL holds no separate target —
44
+ * releasing its samples means dropping the context, which costs a re-acquire
45
+ * against a hard 16-context ceiling and a full shader recompile per display.
46
+ * `agent-docs/reference/GPU_CONTEXT_BUDGET.md` measured that trade and
47
+ * declined it; what makes the WebGPU side worth doing is that it pays
48
+ * neither.
49
+ */
50
+ releaseRenderTargets(): void;
51
+ protected createTexture(passId: string, binding: TextureBinding, data: TextureSource, width: number, height: number): void;
34
52
  writeUniforms(data: ArrayBuffer): void;
35
53
  beginFrame(clearR: number, clearG: number, clearB: number, clearA?: number): void;
36
54
  setScissor(x: number, y: number, w: number, h: number): void;
37
55
  clearScissor(): void;
38
56
  setViewport(x: number, y: number, w: number, h: number): void;
39
57
  clearViewport(): void;
40
- drawPass(passId: string, regionKey: number, bufferPassId?: string): void;
58
+ drawPass(passId: string, regionKey: number, bufferPassId?: string, verticesPerInstance?: number): void;
41
59
  endFrame(): void;
42
60
  protected releaseResources(): void;
43
61
  private applyBlendState;
44
- private bindTextures;
45
62
  private bindAttributes;
46
63
  }
47
64
  export {};