Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
The createPipelineLayout() method of the GPUDevice interface creates a GPUPipelineLayout that defines the GPUBindGroupLayouts used by a pipeline. GPUBindGroups used with the pipeline during command encoding must have compatible GPUBindGroupLayouts.
createPipelineLayout(descriptor)descriptorAn object containing the following properties:
bindGroupLayoutsAn array of values representing the bind group layouts for a pipeline. Each value can be:
GPUBindGroupLayout object, created via a call to GPUDevice.createBindGroupLayout(). Each object corresponds to a @group attribute in the shader code contained in the GPUShaderModule used in a related pipeline.null, which represents an empty bind group layout. null values are ignored when creating a pipeline layout.label OptionalA string providing a label that can be used to identify the object, for example in GPUError messages or console warnings.
A GPUPipelineLayout object instance.
The following criteria must be met when calling createPipelineLayout(), otherwise a GPUValidationError is generated and an invalid GPUPipelineLayout object is returned:
GPUBindGroupLayout objects in bindGroupLayouts are valid.GPUBindGroupLayout objects in bindGroupLayouts is less than the GPUDevice's maxBindGroups limit.Note: The WebGPU samples feature many more examples.
The following snippet:
GPUBindGroupLayout that describes a binding with a buffer, a texture, and a sampler.GPUPipelineLayout based on the GPUBindGroupLayout.// …
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],
});
// …In this snippet, we create three bind group layouts, with bind group layout 1 representing fragment data and bind group layout 2 representing vertex data. If we want to create a pipeline that uses only bind group layouts 0 and 2, we can pass null for bind group layout 1 and then render without a fragment shader.
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],
});