GPUDevice: createPipelineLayout() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

GPUDevice 接口的 createPipelineLayout() 方法创建一个 GPUPipelineLayout,该方法定义了管线所使用的 GPUBindGroupLayout。在命令编码过程中与管线一起使用的 GPUBindGroup 必须具有兼容的 GPUBindGroupLayout

语法

js
createPipelineLayout(descriptor)

参数

描述符(descriptor)

包含以下属性的对象:

bindGroupLayouts

一个代表管线绑定组布局的数组。每个值可以是

label 可选

一个字符串,提供可用于识别对象的标签,例如在 GPUError 消息或控制台警告中。

返回值

一个 GPUPipelineLayout 对象实例。

验证

调用 createPipelineLayout() 时必须满足以下条件,否则会生成 GPUValidationError 并返回一个无效的 GPUPipelineLayout 对象。

示例

注意:WebGPU 示例 提供了更多示例。

多个绑定组布局、绑定组和管线布局

以下代码片段

js
// …

const bindGroupLayout = device.createBindGroupLayout({
  entries: [
    {
      binding: 0,
      visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
      buffer: {},
    },
    {
      binding: 1,
      visibility: GPUShaderStage.FRAGMENT,
      texture: {},
    },
    {
      binding: 2,
      visibility: GPUShaderStage.FRAGMENT,
      sampler: {},
    },
  ],
});

const pipelineLayout = device.createPipelineLayout({
  bindGroupLayouts: [bindGroupLayout],
});

// …

指定一个空的绑定组布局

在此代码片段中,我们创建了三个绑定组布局,其中绑定组布局 1 代表片段数据,绑定组布局 2 代表顶点数据。如果我们想创建一个只使用绑定组布局 0 和 2 的管线,我们可以为绑定组布局 1 传递 null,然后渲染而无需片段着色器。

js
const bgl0 = device.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = device.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = device.createBindGroupLayout({ entries: myVertexEntries });

// pipeline layout can be used to render without a fragment shader
const pipelineLayout = device.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

规范

规范
WebGPU
# dom-gpudevice-createpipelinelayout

浏览器兼容性

另见