首页 / luma.gl / API 文档
ComputePipeline
先看结论
计算着色器编译后的可执行对象:只有着色器与入口,没有顶点输入与输出附件。
device.createComputePipeline({ shader, entryPoint }) → ComputePipeline
创建参数
| 参数 | 说明 |
|---|---|
shader | 必填,stage 为 compute 的 Shader |
shaderLayout | 绑定声明;GLSL 自我反射、WGSL 需要显式给出时使用 |
entryPoint | WGSL 入口函数名,默认 main |
constants | WGSL 常量取值,不需要重编译着色器 |
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)。