---
title: Pipeline state creation
framework: metal
role: collectionGroup
role_heading: API Collection
path: metal/pipeline-state-creation
---

# Pipeline state creation

Create pipeline states for render and compute passes, samplers, depth and stencil states, and indirect command buffers.

## Overview

Overview Use these methods to create instances of various state types for a render or compute pass (see Render passes and Compute passes, respectively). You can create multiple MTLRenderPipelineState instances for a single render pass encoder (MTLRenderCommandEncoder) that each apply to different types of render commands. For example, a single render pass can render primitives with vertices, then meshes, and finish with a tile shader command, each with a different pipeline. To create these pipelines, configure instances of MTLRenderPipelineDescriptor, MTLMeshRenderPipelineDescriptor, and MTLTileRenderPipelineDescriptor. Then pass those descriptors to the makeRenderPipelineState(descriptor:completionHandler:), makeRenderPipelineState(descriptor:options:completionHandler:) and makeRenderPipelineState(tileDescriptor:options:completionHandler:) methods (or a counterpart method), respectively. important: Only create reflection (see MTLRenderPipelineReflection) instances if you need them, because each one can require a significant amount of memory.

## Topics

### Creating render pipeline states with vertex shaders

- [makeRenderPipelineState(descriptor:)](metal/mtldevice/makerenderpipelinestate(descriptor:).md)
- [makeRenderPipelineState(descriptor:completionHandler:)](metal/mtldevice/makerenderpipelinestate(descriptor:completionhandler:).md)
- [makeRenderPipelineState(descriptor:options:)](metal/mtldevice/makerenderpipelinestate(descriptor:options:)-89vxc.md)
- [makeRenderPipelineState(descriptor:options:reflection:)](metal/mtldevice/makerenderpipelinestate(descriptor:options:reflection:).md)
- [makeRenderPipelineState(descriptor:options:completionHandler:)](metal/mtldevice/makerenderpipelinestate(descriptor:options:completionhandler:)-5gdww.md)

### Creating render pipeline states with mesh shaders

- [makeRenderPipelineState(descriptor:options:)](metal/mtldevice/makerenderpipelinestate(descriptor:options:)-yrak.md)
- [makeRenderPipelineState(descriptor:options:completionHandler:)](metal/mtldevice/makerenderpipelinestate(descriptor:options:completionhandler:)-1wvya.md)

### Creating tile render pipeline states

- [makeRenderPipelineState(tileDescriptor:options:)](metal/mtldevice/makerenderpipelinestate(tiledescriptor:options:).md)
- [makeRenderPipelineState(tileDescriptor:options:reflection:)](metal/mtldevice/makerenderpipelinestate(tiledescriptor:options:reflection:).md)
- [makeRenderPipelineState(tileDescriptor:options:completionHandler:)](metal/mtldevice/makerenderpipelinestate(tiledescriptor:options:completionhandler:).md)

### Creating compute pipeline states

- [makeComputePipelineState(descriptor:options:reflection:)](metal/mtldevice/makecomputepipelinestate(descriptor:options:reflection:).md)
- [makeComputePipelineState(descriptor:options:completionHandler:)](metal/mtldevice/makecomputepipelinestate(descriptor:options:completionhandler:).md)
- [makeComputePipelineState(function:)](metal/mtldevice/makecomputepipelinestate(function:).md)
- [makeComputePipelineState(function:completionHandler:)](metal/mtldevice/makecomputepipelinestate(function:completionhandler:).md)
- [makeComputePipelineState(function:options:reflection:)](metal/mtldevice/makecomputepipelinestate(function:options:reflection:).md)
- [makeComputePipelineState(function:options:completionHandler:)](metal/mtldevice/makecomputepipelinestate(function:options:completionhandler:).md)

### Creating depth and stencil states

- [makeDepthStencilState(descriptor:)](metal/mtldevice/makedepthstencilstate(descriptor:).md)

### Supporting types

- [MTLNewRenderPipelineStateCompletionHandler](metal/mtlnewrenderpipelinestatecompletionhandler.md)
- [MTLNewRenderPipelineStateWithReflectionCompletionHandler](metal/mtlnewrenderpipelinestatewithreflectioncompletionhandler.md)
- [MTLNewComputePipelineStateCompletionHandler](metal/mtlnewcomputepipelinestatecompletionhandler.md)
- [MTLNewComputePipelineStateWithReflectionCompletionHandler](metal/mtlnewcomputepipelinestatewithreflectioncompletionhandler.md)

## See Also

### Working with GPU devices

- [Device inspection](metal/device-inspection.md)
- [Work submission](metal/work-submission.md)
- [Resource creation](metal/resource-creation.md)
- [Shader library and archive creation](metal/shader-library-and-archive-creation.md)
