Skip to main content

RenderPipeline

A RenderPipeline combines a vertex shader, a fragment shader, a ShaderLayout, and fixed render state into a reusable, immutable pipeline descriptor. Select it on a RenderPass before drawing.

Deprecated pipeline-owned bindings​

RenderPipelineProps.bindings, RenderPipelineProps.bindGroups, pipeline.setBindings(), and pipeline.draw() remain available for compatibility, but are deprecated and will be removed in the next major release. New code sets bindings and issues draws on RenderPass.

bindings is a flat Record<string, Binding>; bindGroups is grouped by bind-group index. Flat bindings are partitioned using shaderLayout.bindings[].group.

Usage​

const pipeline = device.createRenderPipeline({
id: 'my-pipeline',
vs,
fs,
shaderLayout: {
attributes: [{name: 'positions', location: 0, type: 'vec3<f32>'}],
bindings: [
{name: 'frameUniforms', type: 'uniform', group: 0, location: 0},
{name: 'lightingUniforms', type: 'uniform', group: 2, location: 0},
{name: 'materialUniforms', type: 'uniform', group: 3, location: 0}
]
}
});

Draw through the render pass:

renderPass.setPipeline(pipeline);
renderPass.setBindings({
0: {frameUniforms},
2: {lightingUniforms},
3: {materialUniforms}
});
renderPass.setVertexArray(vertexArray);
renderPass.draw({vertexCount});

Flat bindings are also accepted:

renderPass.setBindings({
frameUniforms,
lightingUniforms,
materialUniforms
});

Use one form or the other per draw call.

RenderPipelineProps​

Important properties:

  • vs?: Shader | null
  • fs?: Shader | null
  • shaderLayout?: ShaderLayout | null
  • bufferLayout?: BufferLayout[]
  • topology?: PrimitiveTopology
  • parameters?: RenderPipelineParameters
  • bindings?: Bindings (deprecated)
  • bindGroups?: BindingsByGroup (deprecated)
  • varyings?: string[]
  • bufferMode?: number

bindings​

Deprecated default flat bindings stored on the pipeline for compatibility paths.

bindGroups​

Deprecated default grouped bindings stored on the pipeline.

draw() (deprecated)​

This compatibility adapter forwards to the supplied render pass. Prefer renderPass.setPipeline(), setBindings(), setVertexArray(), and draw(). It accepts:

  • renderPass
  • vertexArray
  • vertexCount
  • indexCount
  • instanceCount
  • bindings?: Bindings
  • bindGroups?: BindingsByGroup
  • parameters?: RenderPipelineParameters
  • topology?: PrimitiveTopology

WebGPU vs WebGL​

WebGPU maps pass bindings to native bind groups. WebGL emulates the same pass-owned state using uniform-buffer and texture-unit bindings at draw time.