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

瀏覽器相容性

另見