@jbrowse/render-core 5.0.0-beta.1 → 5.0.0-beta.11
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.
- package/esm/RenderCanvas.d.ts +3 -3
- package/esm/RenderCanvas.js +1 -1
- package/esm/RenderLifecycleMixin.d.ts +52 -20
- package/esm/RenderLifecycleMixin.js +89 -23
- package/esm/canvas2dUtils.d.ts +90 -23
- package/esm/canvas2dUtils.js +120 -37
- package/esm/colorRampLut.d.ts +5 -5
- package/esm/colorRampLut.js +6 -6
- package/esm/computePipeline.d.ts +14 -0
- package/esm/computePipeline.js +62 -0
- package/esm/contractReports.d.ts +54 -0
- package/esm/contractReports.js +112 -0
- package/esm/coverageBand.d.ts +13 -8
- package/esm/coverageBand.js +15 -5
- package/esm/coverageBandBuffers.d.ts +2 -9
- package/esm/coverageBandBuffers.js +1 -13
- package/esm/createRenderingBackend.d.ts +16 -20
- package/esm/createRenderingBackend.js +6 -4
- package/esm/displayPhase.d.ts +83 -104
- package/esm/displayPhase.js +42 -82
- package/esm/encodeMemo.d.ts +14 -0
- package/esm/encodeMemo.js +48 -0
- package/esm/gpuContextLostError.d.ts +30 -0
- package/esm/gpuContextLostError.js +40 -0
- package/esm/gpuDevice.d.ts +29 -10
- package/esm/gpuDevice.js +35 -16
- package/esm/graphicsCapabilities.d.ts +27 -19
- package/esm/graphicsCapabilities.js +41 -19
- package/esm/hal/createHal.d.ts +4 -5
- package/esm/hal/createHal.js +15 -5
- package/esm/hal/deviceGpuCache.d.ts +25 -30
- package/esm/hal/deviceGpuCache.js +85 -97
- package/esm/hal/gpuHalBase.d.ts +5 -4
- package/esm/hal/gpuHalBase.js +25 -14
- package/esm/hal/index.d.ts +2 -2
- package/esm/hal/index.js +1 -1
- package/esm/hal/mockHal.d.ts +15 -10
- package/esm/hal/mockHal.js +31 -18
- package/esm/hal/oomReporter.d.ts +7 -0
- package/esm/hal/oomReporter.js +10 -0
- package/esm/hal/passIds.d.ts +8 -7
- package/esm/hal/passIds.js +11 -10
- package/esm/hal/regionRegistry.d.ts +0 -1
- package/esm/hal/regionRegistry.js +3 -15
- package/esm/hal/types.d.ts +53 -18
- package/esm/hal/webgl2Hal.d.ts +23 -6
- package/esm/hal/webgl2Hal.js +158 -155
- package/esm/hal/webgpuHal.d.ts +29 -13
- package/esm/hal/webgpuHal.js +220 -153
- package/esm/installUpload.d.ts +16 -3
- package/esm/installUpload.js +13 -41
- package/esm/instanceCache.d.ts +10 -7
- package/esm/instanceCache.js +14 -15
- package/esm/instancePass.d.ts +2 -1
- package/esm/mapUploadSync.d.ts +2 -10
- package/esm/mapUploadSync.js +2 -3
- package/esm/marks/barMark.d.ts +30 -0
- package/esm/marks/barMark.js +149 -0
- package/esm/marks/colorFill.d.ts +17 -0
- package/esm/marks/colorFill.js +26 -0
- package/esm/marks/drawAgainstHit.d.ts +113 -0
- package/esm/marks/drawAgainstHit.js +407 -0
- package/esm/marks/ellipseDistance.d.ts +10 -0
- package/esm/marks/ellipseDistance.js +136 -0
- package/esm/marks/glyphPaint.d.ts +36 -0
- package/esm/marks/glyphPaint.js +77 -0
- package/esm/marks/index.d.ts +33 -0
- package/esm/marks/index.js +20 -0
- package/esm/marks/lineMark.d.ts +37 -0
- package/esm/marks/lineMark.js +416 -0
- package/esm/marks/linkMark.d.ts +76 -0
- package/esm/marks/linkMark.js +585 -0
- package/esm/marks/markBackend.d.ts +118 -0
- package/esm/marks/markBackend.js +196 -0
- package/esm/marks/markHit.d.ts +32 -0
- package/esm/marks/markHit.js +61 -0
- package/esm/marks/markInk.d.ts +18 -0
- package/esm/marks/markInk.js +71 -0
- package/esm/marks/markPaint.d.ts +14 -0
- package/esm/marks/markPaint.js +32 -0
- package/esm/marks/markPlan.d.ts +25 -0
- package/esm/marks/markPlan.js +20 -0
- package/esm/marks/markRamp.d.ts +74 -0
- package/esm/marks/markRamp.js +205 -0
- package/esm/marks/nearestMarkHit.d.ts +55 -0
- package/esm/marks/nearestMarkHit.js +158 -0
- package/esm/marks/pathRecorder.d.ts +14 -0
- package/esm/marks/pathRecorder.js +80 -0
- package/esm/marks/pointMark.d.ts +42 -0
- package/esm/marks/pointMark.js +125 -0
- package/esm/marks/rowLane.d.ts +39 -0
- package/esm/marks/rowLane.js +41 -0
- package/esm/marks/rowSpanIndex.d.ts +30 -0
- package/esm/marks/rowSpanIndex.js +151 -0
- package/esm/marks/rowTable.d.ts +41 -0
- package/esm/marks/rowTable.js +75 -0
- package/esm/marks/ruleMark.d.ts +21 -0
- package/esm/marks/ruleMark.js +91 -0
- package/esm/marks/spanMark.d.ts +42 -0
- package/esm/marks/spanMark.js +81 -0
- package/esm/marks/types.d.ts +261 -0
- package/esm/marks/types.js +175 -0
- package/esm/marks/valueScale.d.ts +23 -0
- package/esm/marks/valueScale.js +11 -0
- package/esm/namedReactions.d.ts +3 -4
- package/esm/namedReactions.js +3 -4
- package/esm/perRegionRenderingBackend.d.ts +21 -3
- package/esm/perRegionRenderingBackend.js +37 -3
- package/esm/regionDataMap.d.ts +2 -2
- package/esm/regionDataMap.js +25 -23
- package/esm/renderBlock.d.ts +14 -0
- package/esm/renderBlock.js +25 -0
- package/esm/renderingBackendBase.d.ts +20 -14
- package/esm/renderingBackendBase.js +12 -7
- package/esm/scoreScale.d.ts +27 -0
- package/esm/scoreScale.js +88 -0
- package/esm/shaders/barMark.generated.d.ts +3 -0
- package/esm/shaders/barMark.generated.js +7 -0
- package/esm/shaders/barMark.glsl.generated.d.ts +2 -0
- package/esm/shaders/barMark.glsl.generated.js +4 -0
- package/esm/shaders/barMark.iface.generated.d.ts +90 -0
- package/esm/shaders/barMark.iface.generated.js +205 -0
- package/esm/shaders/barMark.wgsl.generated.d.ts +1 -0
- package/esm/shaders/barMark.wgsl.generated.js +3 -0
- package/esm/shaders/capsule.js.generated.d.ts +1 -0
- package/esm/shaders/capsule.js.generated.js +11 -0
- package/esm/shaders/clipStrip.generated.d.ts +2 -0
- package/esm/shaders/clipStrip.generated.js +4 -0
- package/esm/shaders/clipStrip.js.generated.d.ts +1 -0
- package/esm/shaders/clipStrip.js.generated.js +21 -0
- package/esm/shaders/colorRampLut.js.generated.d.ts +1 -0
- package/esm/shaders/colorRampLut.js.generated.js +17 -0
- package/esm/shaders/coverageBar.generated.d.ts +2 -3
- package/esm/shaders/coverageBar.generated.js +4 -3
- package/esm/shaders/coverageBar.glsl.generated.d.ts +2 -0
- package/esm/shaders/coverageBar.glsl.generated.js +4 -0
- package/esm/shaders/coverageBar.iface.generated.js +1 -1
- package/esm/shaders/coverageBar.wgsl.generated.d.ts +1 -0
- package/esm/shaders/coverageBar.wgsl.generated.js +3 -0
- package/esm/shaders/coverageClip.generated.d.ts +3 -0
- package/esm/shaders/coverageClip.generated.js +7 -0
- package/esm/shaders/coverageClip.glsl.generated.d.ts +2 -0
- package/esm/shaders/coverageClip.glsl.generated.js +4 -0
- package/esm/shaders/coverageClip.iface.generated.d.ts +85 -0
- package/esm/shaders/coverageClip.iface.generated.js +114 -0
- package/esm/shaders/coverageClip.wgsl.generated.d.ts +1 -0
- package/esm/shaders/coverageClip.wgsl.generated.js +3 -0
- package/esm/shaders/coverageIndicator.generated.d.ts +2 -3
- package/esm/shaders/coverageIndicator.generated.js +4 -3
- package/esm/shaders/coverageIndicator.glsl.generated.d.ts +2 -0
- package/esm/shaders/coverageIndicator.glsl.generated.js +4 -0
- package/esm/shaders/coverageIndicator.iface.generated.js +1 -1
- package/esm/shaders/coverageIndicator.wgsl.generated.d.ts +1 -0
- package/esm/shaders/coverageIndicator.wgsl.generated.js +3 -0
- package/esm/shaders/coverageInterbase.generated.d.ts +2 -3
- package/esm/shaders/coverageInterbase.generated.js +4 -3
- package/esm/shaders/coverageInterbase.glsl.generated.d.ts +2 -0
- package/esm/shaders/coverageInterbase.glsl.generated.js +4 -0
- package/esm/shaders/coverageInterbase.iface.generated.js +1 -1
- package/esm/shaders/coverageInterbase.wgsl.generated.d.ts +1 -0
- package/esm/shaders/coverageInterbase.wgsl.generated.js +3 -0
- package/esm/shaders/coverageMod.generated.d.ts +2 -3
- package/esm/shaders/coverageMod.generated.js +4 -3
- package/esm/shaders/coverageMod.glsl.generated.d.ts +2 -0
- package/esm/shaders/coverageMod.glsl.generated.js +4 -0
- package/esm/shaders/coverageMod.iface.generated.js +1 -1
- package/esm/shaders/coverageMod.wgsl.generated.d.ts +1 -0
- package/esm/shaders/coverageMod.wgsl.generated.js +3 -0
- package/esm/shaders/coverageSnp.generated.d.ts +2 -3
- package/esm/shaders/coverageSnp.generated.js +4 -3
- package/esm/shaders/coverageSnp.glsl.generated.d.ts +2 -0
- package/esm/shaders/coverageSnp.glsl.generated.js +4 -0
- package/esm/shaders/coverageSnp.iface.generated.js +1 -1
- package/esm/shaders/coverageSnp.wgsl.generated.d.ts +1 -0
- package/esm/shaders/coverageSnp.wgsl.generated.js +3 -0
- package/esm/shaders/curveDistance.js.generated.d.ts +5 -0
- package/esm/shaders/curveDistance.js.generated.js +87 -0
- package/esm/shaders/hpmath.js.generated.d.ts +2 -1
- package/esm/shaders/hpmath.js.generated.js +5 -2
- package/esm/shaders/lineCenterMark.generated.d.ts +3 -0
- package/esm/shaders/lineCenterMark.generated.js +7 -0
- package/esm/shaders/lineCenterMark.glsl.generated.d.ts +2 -0
- package/esm/shaders/lineCenterMark.glsl.generated.js +4 -0
- package/esm/shaders/lineCenterMark.iface.generated.d.ts +104 -0
- package/esm/shaders/lineCenterMark.iface.generated.js +237 -0
- package/esm/shaders/lineCenterMark.wgsl.generated.d.ts +1 -0
- package/esm/shaders/lineCenterMark.wgsl.generated.js +3 -0
- package/esm/shaders/lineCommon.generated.d.ts +2 -0
- package/esm/shaders/lineCommon.generated.js +4 -0
- package/esm/shaders/lineStepMark.generated.d.ts +3 -0
- package/esm/shaders/lineStepMark.generated.js +7 -0
- package/esm/shaders/lineStepMark.glsl.generated.d.ts +2 -0
- package/esm/shaders/lineStepMark.glsl.generated.js +4 -0
- package/esm/shaders/lineStepMark.iface.generated.d.ts +98 -0
- package/esm/shaders/lineStepMark.iface.generated.js +225 -0
- package/esm/shaders/lineStepMark.wgsl.generated.d.ts +1 -0
- package/esm/shaders/lineStepMark.wgsl.generated.js +3 -0
- package/esm/shaders/linkMark.consts.generated.d.ts +14 -0
- package/esm/shaders/linkMark.consts.generated.js +16 -0
- package/esm/shaders/linkMark.generated.d.ts +4 -0
- package/esm/shaders/linkMark.generated.js +8 -0
- package/esm/shaders/linkMark.glsl.generated.d.ts +2 -0
- package/esm/shaders/linkMark.glsl.generated.js +4 -0
- package/esm/shaders/linkMark.iface.generated.d.ts +142 -0
- package/esm/shaders/linkMark.iface.generated.js +1829 -0
- package/esm/shaders/linkMark.js.generated.d.ts +7 -0
- package/esm/shaders/linkMark.js.generated.js +159 -0
- package/esm/shaders/linkMark.wgsl.generated.d.ts +1 -0
- package/esm/shaders/linkMark.wgsl.generated.js +3 -0
- package/esm/shaders/markColor.generated.d.ts +9 -0
- package/esm/shaders/markColor.generated.js +11 -0
- package/esm/shaders/pointGlyph.js.generated.d.ts +2 -0
- package/esm/shaders/pointGlyph.js.generated.js +15 -0
- package/esm/shaders/pointMark.consts.generated.d.ts +7 -0
- package/esm/shaders/pointMark.consts.generated.js +9 -0
- package/esm/shaders/pointMark.generated.d.ts +4 -0
- package/esm/shaders/pointMark.generated.js +8 -0
- package/esm/shaders/pointMark.glsl.generated.d.ts +2 -0
- package/esm/shaders/pointMark.glsl.generated.js +4 -0
- package/esm/shaders/pointMark.iface.generated.d.ts +98 -0
- package/esm/shaders/pointMark.iface.generated.js +219 -0
- package/esm/shaders/pointMark.js.generated.d.ts +3 -0
- package/esm/shaders/pointMark.js.generated.js +93 -0
- package/esm/shaders/pointMark.wgsl.generated.d.ts +1 -0
- package/esm/shaders/pointMark.wgsl.generated.js +3 -0
- package/esm/shaders/rowRect.generated.d.ts +0 -1
- package/esm/shaders/rowRect.generated.js +0 -1
- package/esm/shaders/rowTable.generated.d.ts +1 -0
- package/esm/shaders/rowTable.generated.js +3 -0
- package/esm/shaders/rowTable.js.generated.d.ts +5 -0
- package/esm/shaders/rowTable.js.generated.js +29 -0
- package/esm/shaders/scoreScale.generated.d.ts +2 -0
- package/esm/shaders/scoreScale.generated.js +4 -0
- package/esm/shaders/scoreScale.js.generated.d.ts +1 -0
- package/esm/shaders/scoreScale.js.generated.js +50 -23
- package/esm/shaders/spanMark.generated.d.ts +3 -0
- package/esm/shaders/spanMark.generated.js +7 -0
- package/esm/shaders/spanMark.glsl.generated.d.ts +2 -0
- package/esm/shaders/spanMark.glsl.generated.js +4 -0
- package/esm/shaders/spanMark.iface.generated.d.ts +81 -0
- package/esm/shaders/spanMark.iface.generated.js +215 -0
- package/esm/shaders/spanMark.wgsl.generated.d.ts +1 -0
- package/esm/shaders/spanMark.wgsl.generated.js +3 -0
- package/esm/sharedBackendKey.d.ts +18 -0
- package/esm/{keyedRenderingBackend.js → sharedBackendKey.js} +5 -0
- package/esm/slangPass.d.ts +17 -11
- package/esm/slangPass.js +12 -4
- package/esm/useGraphicsCapabilities.d.ts +1 -1
- package/esm/useGraphicsCapabilities.js +1 -1
- package/esm/useRenderingBackend.d.ts +13 -13
- package/esm/useRenderingBackend.js +58 -20
- package/esm/webgpuUtils.d.ts +3 -11
- package/esm/webgpuUtils.js +12 -33
- package/package.json +32 -7
- package/src/shaders/antialias.slang +46 -0
- package/src/shaders/arcHull.test.ts +267 -0
- package/src/shaders/barMark.generated.ts +11 -0
- package/src/shaders/barMark.glsl.generated.ts +6 -0
- package/src/shaders/barMark.iface.generated.ts +285 -0
- package/src/shaders/barMark.slang +167 -0
- package/src/shaders/barMark.wgsl.generated.ts +4 -0
- package/src/shaders/capsule.js.generated.ts +14 -0
- package/src/shaders/capsule.slang +13 -5
- package/src/shaders/clipStrip.generated.ts +6 -0
- package/src/shaders/clipStrip.js.generated.ts +22 -0
- package/src/shaders/clipStrip.slang +34 -0
- package/src/shaders/clipStrip.test.ts +39 -0
- package/src/shaders/colorPack.slang +5 -1
- package/src/shaders/colorRampLut.js.generated.ts +22 -0
- package/src/shaders/colorRampLut.slang +15 -1
- package/src/shaders/coverageBand.slang +64 -32
- package/src/shaders/coverageBar.generated.ts +6 -5
- package/src/shaders/coverageBar.glsl.generated.ts +6 -0
- package/src/shaders/coverageBar.iface.generated.ts +1 -1
- package/src/shaders/coverageBar.slang +10 -10
- package/src/shaders/coverageBar.wgsl.generated.ts +4 -0
- package/src/shaders/coverageClip.generated.ts +11 -0
- package/src/shaders/coverageClip.glsl.generated.ts +6 -0
- package/src/shaders/coverageClip.iface.generated.ts +172 -0
- package/src/shaders/coverageClip.slang +38 -0
- package/src/shaders/coverageClip.wgsl.generated.ts +4 -0
- package/src/shaders/coverageIndicator.generated.ts +6 -5
- package/src/shaders/coverageIndicator.glsl.generated.ts +6 -0
- package/src/shaders/coverageIndicator.iface.generated.ts +1 -1
- package/src/shaders/coverageIndicator.wgsl.generated.ts +4 -0
- package/src/shaders/coverageInterbase.generated.ts +6 -5
- package/src/shaders/coverageInterbase.glsl.generated.ts +6 -0
- package/src/shaders/coverageInterbase.iface.generated.ts +1 -1
- package/src/shaders/coverageInterbase.wgsl.generated.ts +4 -0
- package/src/shaders/coverageMod.generated.ts +6 -5
- package/src/shaders/coverageMod.glsl.generated.ts +6 -0
- package/src/shaders/coverageMod.iface.generated.ts +1 -1
- package/src/shaders/coverageMod.wgsl.generated.ts +4 -0
- package/src/shaders/coverageSnp.generated.ts +6 -5
- package/src/shaders/coverageSnp.glsl.generated.ts +6 -0
- package/src/shaders/coverageSnp.iface.generated.ts +1 -1
- package/src/shaders/coverageSnp.wgsl.generated.ts +4 -0
- package/src/shaders/curveDistance.js.generated.ts +91 -0
- package/src/shaders/curveDistance.slang +265 -0
- package/src/shaders/hpClampFloor.test.ts +87 -0
- package/src/shaders/hpmath.js.generated.ts +6 -2
- package/src/shaders/hpmath.slang +100 -48
- package/src/shaders/insetValueScale.test.ts +67 -0
- package/src/shaders/lineCenterMark.generated.ts +11 -0
- package/src/shaders/lineCenterMark.glsl.generated.ts +6 -0
- package/src/shaders/lineCenterMark.iface.generated.ts +328 -0
- package/src/shaders/lineCenterMark.slang +127 -0
- package/src/shaders/lineCenterMark.wgsl.generated.ts +4 -0
- package/src/shaders/lineCommon.generated.ts +6 -0
- package/src/shaders/lineCommon.slang +102 -0
- package/src/shaders/lineStepMark.generated.ts +11 -0
- package/src/shaders/lineStepMark.glsl.generated.ts +6 -0
- package/src/shaders/lineStepMark.iface.generated.ts +311 -0
- package/src/shaders/lineStepMark.slang +125 -0
- package/src/shaders/lineStepMark.wgsl.generated.ts +4 -0
- package/src/shaders/linkMark.consts.generated.ts +30 -0
- package/src/shaders/linkMark.generated.ts +12 -0
- package/src/shaders/linkMark.glsl.generated.ts +6 -0
- package/src/shaders/linkMark.iface.generated.ts +1954 -0
- package/src/shaders/linkMark.js.generated.ts +167 -0
- package/src/shaders/linkMark.slang +439 -0
- package/src/shaders/linkMark.wgsl.generated.ts +4 -0
- package/src/shaders/markColor.generated.ts +20 -0
- package/src/shaders/markColor.slang +128 -0
- package/src/shaders/pointGlyph.js.generated.ts +20 -0
- package/src/shaders/pointGlyph.slang +23 -7
- package/src/shaders/pointGlyphPad.test.ts +242 -0
- package/src/shaders/pointMark.consts.generated.ts +16 -0
- package/src/shaders/pointMark.generated.ts +12 -0
- package/src/shaders/pointMark.glsl.generated.ts +6 -0
- package/src/shaders/pointMark.iface.generated.ts +304 -0
- package/src/shaders/pointMark.js.generated.ts +99 -0
- package/src/shaders/pointMark.slang +227 -0
- package/src/shaders/pointMark.wgsl.generated.ts +4 -0
- package/src/shaders/rowRect.generated.ts +0 -2
- package/src/shaders/rowRect.slang +39 -58
- package/src/shaders/rowTable.generated.ts +4 -0
- package/src/shaders/rowTable.js.generated.ts +37 -0
- package/src/shaders/rowTable.slang +98 -0
- package/src/shaders/scoreScale.generated.ts +6 -0
- package/src/shaders/scoreScale.js.generated.ts +48 -23
- package/src/shaders/scoreScale.slang +49 -55
- package/src/shaders/sdEllipse.test.ts +211 -0
- package/src/shaders/spanMark.generated.ts +11 -0
- package/src/shaders/spanMark.glsl.generated.ts +6 -0
- package/src/shaders/spanMark.iface.generated.ts +289 -0
- package/src/shaders/spanMark.slang +77 -0
- package/src/shaders/spanMark.wgsl.generated.ts +4 -0
- package/src/shaders/valueScale.slang +26 -0
- package/src/shaders/wideCircleLeg.test.ts +85 -0
- package/esm/globalRenderingBackend.d.ts +0 -90
- package/esm/globalRenderingBackend.js +0 -53
- package/esm/keyedRenderingBackend.d.ts +0 -41
package/esm/hal/types.d.ts
CHANGED
|
@@ -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
|
|
31
|
-
*
|
|
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,55 @@ export type BlendState = {
|
|
|
39
38
|
dstFactor: BlendFactor;
|
|
40
39
|
} | {
|
|
41
40
|
op: 'max';
|
|
41
|
+
} | {
|
|
42
|
+
op: 'behind';
|
|
42
43
|
};
|
|
44
|
+
export type ShaderStage = 'vertex' | 'fragment' | 'compute';
|
|
43
45
|
/**
|
|
44
46
|
* One entry of a shader's GPU binding table, as the Slang codegen reflects it.
|
|
45
47
|
*
|
|
46
|
-
* `kind` is spelled the way WebGPU spells it
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
48
|
+
* `kind` is spelled the way WebGPU spells it and `stages` names the entry
|
|
49
|
+
* points that read the binding, so a consumer builds a `createBindGroupLayout`
|
|
50
|
+
* entry from it directly, `visibility` included. The WebGPU HAL and the compute
|
|
51
|
+
* driver both do. `pnpm gen:shaders` refuses a render shader whose table is not
|
|
52
|
+
* one the HALs bind, and a `stages` that leaves out a stage the emitted WGSL
|
|
53
|
+
* reads the binding in.
|
|
52
54
|
*/
|
|
53
55
|
export interface ShaderBinding {
|
|
54
56
|
index: number;
|
|
55
57
|
kind: 'uniform' | 'texture' | 'sampler' | 'storage' | 'read-only-storage';
|
|
56
58
|
name: string;
|
|
59
|
+
stages: readonly ShaderStage[];
|
|
57
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* What a pass's texture is filled from: RGBA bytes, or a canvas whose pixels
|
|
63
|
+
* are copied on the GPU — the circular view's ring samples a linear display's
|
|
64
|
+
* finished strip that way. A canvas source lands premultiplied, so a shader
|
|
65
|
+
* reading one returns its sample under `//! blend: premultiplied`.
|
|
66
|
+
*/
|
|
67
|
+
export type TextureSource = Uint8Array | HTMLCanvasElement | OffscreenCanvas;
|
|
58
68
|
export interface TextureBinding {
|
|
59
|
-
|
|
60
|
-
samplerBinding: number;
|
|
69
|
+
name: string;
|
|
61
70
|
glTextureUnit: number;
|
|
62
71
|
glUniformName: string;
|
|
63
72
|
filter: 'linear' | 'nearest';
|
|
64
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* A shader's compiled text, one loader per target. `pnpm gen:shaders` emits it
|
|
76
|
+
* as a shader module's `SOURCE`, each loader an `import()` of a module holding
|
|
77
|
+
* nothing but that target's strings, so no realm evaluates shader text until a
|
|
78
|
+
* HAL is built with the pass: WebGPU loads the WGSL, WebGL2 the GLSL, Canvas2D
|
|
79
|
+
* neither, and the RPC worker never builds one.
|
|
80
|
+
*/
|
|
81
|
+
export interface ShaderSource {
|
|
82
|
+
wgsl: () => Promise<{
|
|
83
|
+
WGSL_SOURCE: string;
|
|
84
|
+
}>;
|
|
85
|
+
glsl: () => Promise<{
|
|
86
|
+
GLSL_VERTEX: string;
|
|
87
|
+
GLSL_FRAGMENT: string;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
65
90
|
/**
|
|
66
91
|
* A **pipeline state object (PSO)**: shaders, vertex input layout, blend state,
|
|
67
92
|
* primitive topology and texture bindings, baked into one immutable
|
|
@@ -76,19 +101,22 @@ export interface TextureBinding {
|
|
|
76
101
|
*/
|
|
77
102
|
export interface PipelineDescriptor {
|
|
78
103
|
id: string;
|
|
79
|
-
|
|
80
|
-
glslVertex: string;
|
|
81
|
-
glslFragment: string;
|
|
104
|
+
source: ShaderSource;
|
|
82
105
|
instanceStride: number;
|
|
106
|
+
/** Bytes of the uniform block the shader binds; the HAL's slot is the largest over its passes. */
|
|
107
|
+
uniformByteSize: number;
|
|
83
108
|
verticesPerInstance: number;
|
|
84
109
|
blend: boolean;
|
|
85
110
|
blendState?: BlendState;
|
|
86
111
|
vertexAttributes: readonly VertexAttributeLayout[];
|
|
87
112
|
topology?: 'triangle-list' | 'triangle-strip' | 'line-list';
|
|
113
|
+
coverage?: 'analytic';
|
|
88
114
|
textures?: readonly [TextureBinding, ...TextureBinding[]];
|
|
89
|
-
bindings
|
|
115
|
+
bindings: readonly ShaderBinding[];
|
|
90
116
|
}
|
|
91
117
|
export interface GpuHal {
|
|
118
|
+
/** The uniform slot size, the largest block any registered pass binds. */
|
|
119
|
+
readonly uniformByteSize: number;
|
|
92
120
|
/**
|
|
93
121
|
* Size the canvas, and report the scale its backing store actually got.
|
|
94
122
|
* Callers derive every device-px rect from THAT rather than from `getDpr()`:
|
|
@@ -97,15 +125,22 @@ export interface GpuHal {
|
|
|
97
125
|
* track goes blank; WebGL2 clamps and paints at the wrong scale).
|
|
98
126
|
*/
|
|
99
127
|
resize(width: number, height: number): CanvasScale;
|
|
128
|
+
/**
|
|
129
|
+
* Drop the canvas-sized render targets this HAL allocated, keeping the
|
|
130
|
+
* device, the context, the compiled pipelines and every uploaded buffer. The
|
|
131
|
+
* next `resize` rebuilds them, so a display whose canvas has scrolled out of
|
|
132
|
+
* the page can give the bytes back and come back at the cost of one frame
|
|
133
|
+
* rather than a context re-acquire and a shader recompile.
|
|
134
|
+
*/
|
|
135
|
+
releaseRenderTargets(): void;
|
|
100
136
|
uploadBuffer(regionKey: number, passId: string, data: ArrayBuffer | ArrayBufferView, count: number): void;
|
|
101
137
|
getBufferCount(regionKey: number, passId: string): number;
|
|
102
138
|
deleteBuffer(regionKey: number, passId: string): void;
|
|
103
139
|
deleteRegion(regionKey: number): void;
|
|
104
|
-
|
|
105
|
-
uploadTexture(passId: string, data: Uint8Array, width: number, height: number): void;
|
|
140
|
+
uploadTexture(passId: string, data: TextureSource, width: number, height: number, sampler?: string): void;
|
|
106
141
|
writeUniforms(data: ArrayBuffer): void;
|
|
107
142
|
beginFrame(clearR: number, clearG: number, clearB: number, clearA?: number): void;
|
|
108
|
-
drawPass(passId: string, regionKey: number, bufferPassId?: string): void;
|
|
143
|
+
drawPass(passId: string, regionKey: number, bufferPassId?: string, verticesPerInstance?: number): void;
|
|
109
144
|
endFrame(): void;
|
|
110
145
|
setScissor(x: number, y: number, w: number, h: number): void;
|
|
111
146
|
clearScissor(): void;
|
package/esm/hal/webgl2Hal.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
38
|
+
private link;
|
|
31
39
|
private getPass;
|
|
32
40
|
resize(width: number, height: number): import("./types.ts").CanvasScale;
|
|
33
|
-
|
|
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_PORTABILITY.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 {};
|