GPUDevice: createComputePipeline() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文(HTTPS)中可用,在某些或所有 支持的浏览器中可用。

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 对象

  • compute 属性中引用的 module 使用的工作组存储大小小于或等于 GPUDevicemaxComputeWorkgroupStorageSize 限制
  • module 使用的工作组每组的计算调用次数小于或等于 GPUDevicemaxComputeInvocationsPerWorkgroup 限制
  • module 的工作组大小小于或等于 GPUDevice 的相应 maxComputeWorkgroupSizeXmaxComputeWorkgroupSizeYmaxComputeWorkgroupSizeZ 限制

示例

注意: WebGPU 示例 包含更多示例。

基本示例

我们的 基本计算演示 演示了以下过程

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 表仅在浏览器中加载

另请参阅