用途:帮助理解 WebGPU 中管道(pipeline)如何与着色器模块、管道布局配合工作,并在自动布局与显式布局之间做出选择。基线为 WebGPU 1.0-stable(Chrome 113+、Safari 26+、Firefox 141+)。
主要能力:管道是不可变、预编译对象,固定一次 GPU pass 的全部着色器代码与固定功能状态,分 GPURenderPipeline(光栅化图形,写入颜色与深度/模板附件)和 GPUComputePipeline(调度网格上的通用并行工作,写入存储缓冲区与存储纹理)。涉及的创建接口包括 device.createShaderModule、device.createPipelineLayout、device.createRenderPipeline(Async)、device.createComputePipeline(Async)。管道描述符的 layout 字段只能是 GPUPipelineLayout 对象或字符串 "auto"。
使用方式:跨多个管道共享绑定组时构建显式 GPUPipelineLayout——先为每个共享组调用 device.createBindGroupLayout,再 device.createPipelineLayout({ bindGroupLayouts: [...] }),并把该布局传给所有共享该组的管道。仅由一个管道独占资源(如单个全屏 pass)时可用 "auto",再用 pipeline.getBindGroupLayout(index) 读回绑定组布局。在用户正在观看的帧内创建管道,或编译复杂着色器时,应使用 createRenderPipelineAsync / createComputePipelineAsync 并 await,让编译在主线程外进行。
适用场景:初始化或资源加载阶段一次性创建并复用管道;实时帧内异步创建管道;为画布配置与片段目标格式一致的格式。
限制与注意:管道不可变且创建昂贵,不应在每帧渲染循环中调用 createRenderPipeline 或 createComputePipeline;由某管道 getBindGroupLayout 得到的绑定组只与该管道兼容,不能用于其他管道,自动布局绑定组不可跨管道复用;fragment.targets 的格式必须与对应颜色附件格式一致,画布两者都须为 navigator.gpu.getPreferredCanvasFormat();WGSL 语法错误不会从 createShaderModule 抛出,需检查 getCompilationInfo() 返回的 GPUCompilationInfo.messages(含 message、type、lineNum、linePos),错误会在管道创建时再次出现。资料还列出 references/methods.md、examples.md、anti-patterns.md 及相关技能(webgpu-syntax-render-pipeline、webgpu-syntax-compute-pipeline、webgpu-syntax-bind-groups、webgpu-impl-performance)。其余细节暂未提供。