GPUDevice: createComputePipelineAsync() 方法
GPUDevice
接口的 createComputePipelineAsync()
方法返回一个 Promise
,该方法在管道可以使用且不会出现任何停滞时,会实现一个 GPUComputePipeline
,该管道可以控制计算着色器阶段并用于 GPUComputePassEncoder
。
注意: 通常情况下,只要有可能,就应该使用此方法而不是 GPUDevice.createComputePipeline()
,因为它可以防止在管道编译时阻塞 GPU 操作执行。
语法
js
createComputePipeline(descriptor)
参数
descriptor
-
请参阅
GPUDevice.createComputePipeline()
方法的描述符定义。
返回值
一个 Promise
,当创建的管道准备好在没有额外延迟的情况下使用时,它会实现一个 GPUComputePipeline
对象实例。
验证
如果管道创建失败,并且由此导致生成的管道无效,则返回的 promise 将会拒绝一个 GPUPipelineError
- 如果这是由于内部错误导致的,则
GPUPipelineError
的reason
将为"internal"
。 - 如果这是由于验证错误导致的,则
GPUPipelineError
的reason
将为"validation"
。
如果以下任何一项为假,则会发生验证错误
示例
注意: WebGPU 示例 提供了更多示例。
基本示例
以下示例展示了以下过程:
- 使用
GPUDevice.createBindGroupLayout()
创建绑定组布局。 - 将
bindGroupLayout
传递给GPUDevice.createPipelineLayout()
以创建GPUPipelineLayout
。 - 在
createComputePipelineAsync()
调用中立即使用该值来创建GPUComputePipeline
。
js
async function init() {
// ...
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
buffer: {
type: "storage",
},
},
],
});
const computePipeline = await device.createComputePipelineAsync({
layout: device.createPipelineLayout({
bindGroupLayouts: [bindGroupLayout],
}),
compute: {
module: shaderModule,
entryPoint: "main",
},
});
// ...
}
规范
规范 |
---|
WebGPU # dom-gpudevice-createcomputepipelineasync |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。