GPUDevice: createPipelineLayout() 方法
注意:此功能在 Web Workers 中可用。
GPUDevice 介面的 createPipelineLayout() 方法建立一個 GPUPipelineLayout,該方法定義了管線所使用的 GPUBindGroupLayout。在命令編碼過程中與管線一起使用的 GPUBindGroup 必須具有相容的 GPUBindGroupLayout。
語法
js
createPipelineLayout(descriptor)
引數
描述符(descriptor)-
包含以下屬性的物件:
bindGroupLayouts-
一個代表管線繫結組佈局的陣列。每個值可以是
- 一個
GPUBindGroupLayout物件,透過呼叫GPUDevice.createBindGroupLayout()建立。每個物件對應於相關管線中使用的GPUShaderModule所包含的著色器程式碼中的@group屬性。 null,表示一個空的繫結組佈局。在建立管線佈局時會忽略null值。
- 一個
label可選-
一個字串,提供可用於識別物件的標籤,例如在
GPUError訊息或控制檯警告中。
返回值
一個 GPUPipelineLayout 物件例項。
驗證
呼叫 createPipelineLayout() 時必須滿足以下條件,否則會生成 GPUValidationError 並返回一個無效的 GPUPipelineLayout 物件。
bindGroupLayouts中的GPUBindGroupLayout物件有效。bindGroupLayouts中的GPUBindGroupLayout物件數量少於GPUDevice的maxBindGroups限制。
示例
注意:WebGPU 示例 提供了更多示例。
多個繫結組佈局、繫結組和管線佈局
以下程式碼片段
- 建立一個
GPUBindGroupLayout,描述了對一個緩衝區、一個紋理和一個取樣器的繫結。 - 基於
GPUBindGroupLayout建立一個GPUPipelineLayout。
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 |
瀏覽器相容性
載入中…