demo · v136
Intermediate buffer pipeline
The chromestatus motivation: video effects pipelines pass frames through several intermediate steps. Stage 1 (video frame) used to need a GPUExternalTexture binding; stages 2..N (post-process textures) need GPUTextureView. Two bind-group layouts, two shaders. v136 lets you bind a regular GPUTextureView at the externalTexture slot — one bind-group layout, one shader, every stage.
Probing WebGPU pipeline support…
pre-136 (two shaders)
@binding(0) var src: texture_external;
@binding(1) var dst: texture_storage_2d<...>;
@compute fn pass0(...) {
// stage 0: read from texture_external (video frame)
}
// separate WGSL for stage 1+...
@binding(0) var src: texture_2d<f32>;
@binding(1) var dst: texture_storage_2d<...>;
136+ (one shader)
@binding(0) var src: texture_external;
@binding(1) var dst: texture_storage_2d<...>;
@compute fn pass(...) {
// works for stage 0 (video frame) and
// stages 1+ (regular GPUTextureView)
// because both fit the "externalTexture" slot now.
}
bind group creation—
layout reuse—
why this angle
The sibling concept describes the new permitted binding. This concept frames the use case: a multi-stage video effects pipeline. Stage 0 takes a real video frame (external texture); stages 1+ recycle the same WGSL because the binding accepts a plain texture view too. One less compile, half the bind-group layouts.
see also
- GPUTextureView for externalTexture — feature index
- API concept
- ChromeStatus entry
- WebGPU spec