---
title: MTLRenderPipelineState
framework: metal
role: symbol
role_heading: Protocol
path: metal/mtlrenderpipelinestate
---

# MTLRenderPipelineState

An interface that represents a graphics pipeline configuration for a render pass, which the pass applies to the draw commands you encode.

## Declaration

```swift
protocol MTLRenderPipelineState : MTLAllocation, Sendable
```

## Mentioned in

Improving CPU performance by using argument buffers Improving rendering performance with vertex amplification

## Overview

Overview The MTLRenderPipelineState protocol is an interface that represents a specific configuration for the graphics-rendering pipeline, including which shaders it uses. Use a pipeline state to configure a render pass by calling the setRenderPipelineState(_:) method of an MTLRenderCommandEncoder instance. To create a pipeline state, call the appropriate MTLDevice method (see Pipeline state creation). You typically make pipeline states at a noncritical time, like when the app first launches. This is because graphics drivers may need time to evaluate and build each pipeline state. However, you can quickly use and reuse each pipeline state throughout your app’s lifetime.

## Topics

### Identifying a pipeline state

- [device](metal/mtlrenderpipelinestate/device.md)
- [label](metal/mtlrenderpipelinestate/label.md)
- [gpuResourceID](metal/mtlrenderpipelinestate/gpuresourceid.md)

### Checking object shader memory requirements

- [maxTotalThreadsPerObjectThreadgroup](metal/mtlrenderpipelinestate/maxtotalthreadsperobjectthreadgroup.md)
- [objectThreadExecutionWidth](metal/mtlrenderpipelinestate/objectthreadexecutionwidth.md)

### Checking mesh shader memory requirements

- [maxTotalThreadsPerMeshThreadgroup](metal/mtlrenderpipelinestate/maxtotalthreadspermeshthreadgroup.md)
- [maxTotalThreadgroupsPerMeshGrid](metal/mtlrenderpipelinestate/maxtotalthreadgroupspermeshgrid.md)
- [meshThreadExecutionWidth](metal/mtlrenderpipelinestate/meshthreadexecutionwidth.md)

### Checking tile shader memory requirements

- [maxTotalThreadsPerThreadgroup](metal/mtlrenderpipelinestate/maxtotalthreadsperthreadgroup.md)
- [threadgroupSizeMatchesTileSize](metal/mtlrenderpipelinestate/threadgroupsizematchestilesize.md)
- [imageblockSampleLength](metal/mtlrenderpipelinestate/imageblocksamplelength.md)
- [imageblockMemoryLength(forDimensions:)](metal/mtlrenderpipelinestate/imageblockmemorylength(fordimensions:).md)

### Checking feature support

- [supportIndirectCommandBuffers](metal/mtlrenderpipelinestate/supportindirectcommandbuffers.md)

### Checking shader validation

- [shaderValidation](metal/mtlrenderpipelinestate/shadervalidation.md)

### Creating function handles and tables

- [functionHandle(function:stage:)](metal/mtlrenderpipelinestate/functionhandle(function:stage:)-7uvul.md)
- [makeVisibleFunctionTable(descriptor:stage:)](metal/mtlrenderpipelinestate/makevisiblefunctiontable(descriptor:stage:).md)
- [makeIntersectionFunctionTable(descriptor:stage:)](metal/mtlrenderpipelinestate/makeintersectionfunctiontable(descriptor:stage:).md)

### Creating modified clones of the render pipeline

- [makeRenderPipelineState(additionalBinaryFunctions:)](metal/mtlrenderpipelinestate/makerenderpipelinestate(additionalbinaryfunctions:)-84te1.md)

### Instance Properties

- [reflection](metal/mtlrenderpipelinestate/reflection.md)
- [requiredThreadsPerMeshThreadgroup](metal/mtlrenderpipelinestate/requiredthreadspermeshthreadgroup.md)
- [requiredThreadsPerObjectThreadgroup](metal/mtlrenderpipelinestate/requiredthreadsperobjectthreadgroup.md)
- [requiredThreadsPerTileThreadgroup](metal/mtlrenderpipelinestate/requiredthreadspertilethreadgroup.md)

### Instance Methods

- [functionHandle(function:stage:)](metal/mtlrenderpipelinestate/functionhandle(function:stage:)-1pgxo.md)
- [functionHandle(withName:stage:)](metal/mtlrenderpipelinestate/functionhandle(withname:stage:).md)
- [makeRenderPipelineDescriptorForSpecialization()](metal/mtlrenderpipelinestate/makerenderpipelinedescriptorforspecialization().md)
- [makeRenderPipelineState(additionalBinaryFunctions:)](metal/mtlrenderpipelinestate/makerenderpipelinestate(additionalbinaryfunctions:)-49r1w.md)

## Relationships

### Inherits From

- [MTLAllocation](metal/mtlallocation.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

## See Also

### Render pipeline states

- [MTL4RenderPipelineDescriptor](metal/mtl4renderpipelinedescriptor.md)
- [MTLRenderPipelineDescriptor](metal/mtlrenderpipelinedescriptor.md)
- [MTLRenderPipelineFunctionsDescriptor](metal/mtlrenderpipelinefunctionsdescriptor.md)
- [MTL4MeshRenderPipelineDescriptor](metal/mtl4meshrenderpipelinedescriptor.md)
- [MTLMeshRenderPipelineDescriptor](metal/mtlmeshrenderpipelinedescriptor.md)
- [MTLPipelineBufferDescriptor](metal/mtlpipelinebufferdescriptor.md)
- [MTLPipelineBufferDescriptorArray](metal/mtlpipelinebufferdescriptorarray.md)
- [MTL4RenderPipelineColorAttachmentDescriptor](metal/mtl4renderpipelinecolorattachmentdescriptor.md)
- [MTLRenderPipelineColorAttachmentDescriptor](metal/mtlrenderpipelinecolorattachmentdescriptor.md)
- [MTLRenderPipelineColorAttachmentDescriptorArray](metal/mtlrenderpipelinecolorattachmentdescriptorarray.md)
- [MTL4TileRenderPipelineDescriptor](metal/mtl4tilerenderpipelinedescriptor.md)
- [MTLTileRenderPipelineDescriptor](metal/mtltilerenderpipelinedescriptor.md)
- [MTLTileRenderPipelineColorAttachmentDescriptor](metal/mtltilerenderpipelinecolorattachmentdescriptor.md)
- [MTLPipelineOption](metal/mtlpipelineoption.md)
- [MTL4RenderPipelineBinaryFunctionsDescriptor](metal/mtl4renderpipelinebinaryfunctionsdescriptor.md)
