经纬志
首页 / luma.gl / API 文档

ComputePipeline

先看结论

计算着色器编译后的可执行对象:只有着色器与入口,没有顶点输入与输出附件。

最后验证 2026-11-03 · luma.gl 9.4 · 更新 2026-10-29 · 引用本文
device.createComputePipeline({ shader, entryPoint }) → ComputePipeline

创建参数

参数说明
shader必填,stage 为 compute 的 Shader
shaderLayout绑定声明;GLSL 自我反射、WGSL 需要显式给出时使用
entryPointWGSL 入口函数名,默认 main
constantsWGSL 常量取值,不需要重编译着色器

constants 对应着色器里的 override 常量, 改值只影响管线,不触发源码重编译。这一点与 GLSL 的宏定义不同。

成员

成员说明
shaderLayout合并后的绑定声明
hash管线内容哈希,供工厂缓存复用
handle底层管线句柄
destroyed是否已释放
destroy()释放管线对象

编写与创建

const wgsl = `
@group(0) @binding(0) var<storage, read_write> values: array<f32>;

@compute @workgroup_size(64)
fn main(@builtin(global_invocation_id) id: vec3<u32>) {
  let i = id.x;
  if (i < arrayLength(&values)) {
    values[i] = values[i] * 2.0;
  }
}
`;

const cs = device.createShader({
  stage: 'compute',
  language: 'wgsl',
  source: wgsl
});

const pipeline = device.createComputePipeline({
  shader: cs,
  entryPoint: 'main'
});

WGSL 源码不需要自己写 @workgroup_size 之外的配置, 入口名与 entryPoint 一致即可。GLSL 计算着色器在 WebGL 后端不可用。

只能用于 WebGPU

WebGL 2 没有计算着色器,beginComputePass 在该后端会抛错。 使用计算能力前先确认设备类型:

if (device.type !== 'webgpu') {
  console.warn('当前后端不支持计算管线');
}

跨后端的产品要么在 WebGL 路径上退回 CPU 计算或片元着色器技巧, 要么只把计算功能开放给 WebGPU 用户。

管线与数据分离

管线只描述程序与常量,缓冲区、纹理这些数据通过绑定提供。 核心层的 ComputePass 只负责选择管线与派发, 绑定逻辑通常由 @luma.gl/gpgpu 或应用自己的绑定代码完成。

同一个着色器可以配多条管线。 不同的 constants 生成不同管线,hash 相同则复用同一条。 循环里反复创建不会重复编译,但每次仍会做哈希查找,能缓存引用就缓存。

引用本文

经纬志(2026)。《ComputePipeline》。https://www.jingweizhi.com/lumagl/api/compute-pipeline.html(访问日期 2026-11-03)。