GPUDevice: createComputePipeline() 方法
createComputePipeline()
方法属于 GPUDevice
接口,用于创建一个 GPUComputePipeline
,它可以控制计算着色器阶段,并可在 GPUComputePassEncoder
中使用。
语法
js
createComputePipeline(descriptor)
参数
descriptor
-
包含以下属性的对象
compute
-
描述管道计算着色器入口点的对象。此对象可以包含以下属性
constants
可选-
一系列记录类型,结构为
(id, value)
,表示 可在管道中覆盖的 WGSL 常量 的覆盖值。这些表现得像 有序映射。在每种情况下,id
都是用于标识或选择记录的键,而constant
则是表示 WGSL 的枚举值。根据要覆盖的常量,
id
可能会采用常量的数字 ID 的形式(如果指定了该 ID),否则为常量的标识符名称。提供多个可覆盖常量的覆盖值的代码片段可能如下所示
js{ // ... constants: { 0: false, 1200: 3.0, 1300: 2.0, width: 20, depth: -1, height: 15, } }
entryPoint
-
module
中将使用此阶段执行其工作的函数的名称。相应的着色器函数必须具有@compute
属性才能被识别为该入口点。有关更多信息,请参见 入口点声明。 module
-
包含此可编程阶段将执行的 WGSL 代码的
GPUShaderModule
对象。
label
可选-
提供用于标识对象的标签的字符串,例如在
GPUError
消息或控制台警告中。 layout
-
定义在管道执行期间使用的所有 GPU 资源(缓冲区、纹理等)的布局(结构、目的和类型)。可能的值是
- 使用
GPUDevice.createPipelineLayout()
创建的GPUPipelineLayout
对象,它允许 GPU 在提前规划时找出如何最有效地运行管道。 - 字符串
"auto"
,这会导致管道根据着色器代码中定义的任何绑定生成隐式绑定组布局。如果使用"auto"
,则生成的绑定组布局只能与当前管道一起使用。
- 使用
返回值
GPUComputePipeline
对象实例。
验证
调用 createComputePipeline()
时必须满足以下条件,否则将生成 GPUValidationError
并返回无效的 GPUComputePipeline
对象
示例
注意: WebGPU 示例 包含更多示例。
基本示例
我们的 基本计算演示 演示了以下过程
- 使用
GPUDevice.createBindGroupLayout()
创建绑定组布局。 - 将
bindGroupLayout
传递给GPUDevice.createPipelineLayout()
,以创建一个GPUPipelineLayout
。 - 在
createComputePipeline()
调用中立即使用该值,以创建一个GPUComputePipeline
。
js
// ...
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
buffer: {
type: "storage",
},
},
],
});
const computePipeline = device.createComputePipeline({
layout: device.createPipelineLayout({
bindGroupLayouts: [bindGroupLayout],
}),
compute: {
module: shaderModule,
entryPoint: "main",
},
});
// ...
规范
规范 |
---|
WebGPU # dom-gpudevice-createcomputepipeline |
浏览器兼容性
BCD 表仅在浏览器中加载