---
title: Render passes
framework: metal
role: collectionGroup
role_heading: API Collection
path: metal/render-passes
---

# Render passes

Encode a render pass to draw graphics into an image.

## Overview

Overview A render pass processes and rasterizes geometry to one or more output attachments using a render pipeline. Render passes consist of: A set of input resources, such as buffers and textures A render pipeline that configures the GPU that does work with the input resources Draw commands Vertex shaders, the GPU core functions that process and transform a scene’s geometry An optional tessellation stage that adds fine details to a scene’s geometry Fragment shaders, the GPU core functions that produce the final color values for each pixel Optional outputs that can include color, depth, and stencil attachments, and their load and store operations See the Customizing render pass setup sample for implementation details.

## Topics

### Encoding a render pass

- [MTL4RenderCommandEncoder](metal/mtl4rendercommandencoder.md)
- [MTLRenderCommandEncoder](metal/mtlrendercommandencoder.md)
- [MTL4RenderEncoderOptions](metal/mtl4renderencoderoptions.md)
- [MTLTriangleFillMode](metal/mtltrianglefillmode.md)
- [MTLWinding](metal/mtlwinding.md)
- [MTLCullMode](metal/mtlcullmode.md)
- [MTLPrimitiveType](metal/mtlprimitivetype.md)
- [MTLIndexType](metal/mtlindextype.md)
- [MTLDepthClipMode](metal/mtldepthclipmode.md)
- [MTLVisibilityResultMode](metal/mtlvisibilityresultmode.md)
- [MTLVisibilityResultType](metal/mtlvisibilityresulttype.md)

### Encoding a render pass in parallel

- [MTLParallelRenderCommandEncoder](metal/mtlparallelrendercommandencoder.md)
- [MTLLoadAction](metal/mtlloadaction.md)
- [MTLStoreAction](metal/mtlstoreaction.md)
- [MTLStoreActionOptions](metal/mtlstoreactionoptions.md)

### Configuring a render command encoder

- [MTL4RenderPassDescriptor](metal/mtl4renderpassdescriptor.md)
- [MTLRenderPassDescriptor](metal/mtlrenderpassdescriptor.md)
- [MTLRenderPassAttachmentDescriptor](metal/mtlrenderpassattachmentdescriptor.md)
- [MTLRenderPassColorAttachmentDescriptorArray](metal/mtlrenderpasscolorattachmentdescriptorarray.md)
- [MTLRenderPassColorAttachmentDescriptor](metal/mtlrenderpasscolorattachmentdescriptor.md)
- [MTLClearColor](metal/mtlclearcolor.md)
- [MTLRenderPassDepthAttachmentDescriptor](metal/mtlrenderpassdepthattachmentdescriptor.md)
- [MTLMultisampleDepthResolveFilter](metal/mtlmultisampledepthresolvefilter.md)
- [MTL4RenderPipelineColorAttachmentDescriptorArray](metal/mtl4renderpipelinecolorattachmentdescriptorarray.md)
- [MTLTileRenderPipelineColorAttachmentDescriptorArray](metal/mtltilerenderpipelinecolorattachmentdescriptorarray.md)
- [MTLRenderPassStencilAttachmentDescriptor](metal/mtlrenderpassstencilattachmentdescriptor.md)
- [MTLMultisampleStencilResolveFilter](metal/mtlmultisamplestencilresolvefilter.md)
- [MTLRenderPassSampleBufferAttachmentDescriptorArray](metal/mtlrenderpasssamplebufferattachmentdescriptorarray.md)
- [MTLRenderPassSampleBufferAttachmentDescriptor](metal/mtlrenderpasssamplebufferattachmentdescriptor.md)
- [MTLLogicalToPhysicalColorAttachmentMap](metal/mtllogicaltophysicalcolorattachmentmap.md)
- [MTLDispatchThreadsIndirectArguments](metal/mtldispatchthreadsindirectarguments.md)

### Render pipeline states

- [MTLRenderPipelineState](metal/mtlrenderpipelinestate.md)
- [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)
- [MTL4RenderPipelineDynamicLinkingDescriptor](metal/mtl4renderpipelinedynamiclinkingdescriptor.md)

### Dynamic render pipeline states

- [MTLViewport](metal/mtlviewport.md)
- [MTLScissorRect](metal/mtlscissorrect.md)
- [MTLVertexAmplificationViewMapping](metal/mtlvertexamplificationviewmapping.md)
- [MTLQuadTessellationFactorsHalf](metal/mtlquadtessellationfactorshalf.md)
- [MTLTriangleTessellationFactorsHalf](metal/mtltriangletessellationfactorshalf.md)

### Render pass inputs

- [MTLVertexDescriptor](metal/mtlvertexdescriptor.md)
- [MTLVertexAttributeDescriptor](metal/mtlvertexattributedescriptor.md)
- [MTLVertexAttributeDescriptorArray](metal/mtlvertexattributedescriptorarray.md)
- [MTLVertexBufferLayoutDescriptor](metal/mtlvertexbufferlayoutdescriptor.md)
- [MTLVertexBufferLayoutDescriptorArray](metal/mtlvertexbufferlayoutdescriptorarray.md)
- [MTLBufferLayoutStrideDynamic](metal/mtlbufferlayoutstridedynamic.md)

### Render pass outputs

- [MTLDrawable](metal/mtldrawable.md)
- [MTLDrawablePresentedHandler](metal/mtldrawablepresentedhandler.md)

### Depth testing

- [Calculating primitive visibility using depth testing](metal/calculating-primitive-visibility-using-depth-testing.md)
- [MTLDepthStencilState](metal/mtldepthstencilstate.md)
- [MTLDepthStencilDescriptor](metal/mtldepthstencildescriptor.md)
- [MTLStencilDescriptor](metal/mtlstencildescriptor.md)

### Rasterization settings

- [Rendering at different rasterization rates](metal/rendering-at-different-rasterization-rates.md)
- [Creating a rasterization rate map](metal/creating-a-rasterization-rate-map.md)
- [Rendering with a rasterization rate map](metal/rendering-with-a-rasterization-rate-map.md)
- [Scaling variable rasterization rate content](metal/scaling-variable-rasterization-rate-content.md)
- [MTLRasterizationRateMapDescriptor](metal/mtlrasterizationratemapdescriptor.md)
- [MTLRasterizationRateMap](metal/mtlrasterizationratemap.md)
- [MTLCoordinate2D](metal/mtlcoordinate2d.md)
- [MTLCoordinate2DMake(_:_:)](metal/mtlcoordinate2dmake(_:_:).md)

### Optimizing techniques

- [Specifying drawing and dispatch arguments indirectly](metal/specifying-drawing-and-dispatch-arguments-indirectly.md)
- [Rendering to multiple viewports in a draw command](metal/rendering-to-multiple-viewports-in-a-draw-command.md)
- [Rendering to multiple texture slices in a draw command](metal/rendering-to-multiple-texture-slices-in-a-draw-command.md)

### Advanced multisampling

- [Positioning samples programmatically](metal/positioning-samples-programmatically.md)
- [Storing data a pass makes with custom sample positions for a subsequent pass](metal/storing-data-a-pass-makes-with-custom-sample-positions-for-a-subsequent-pass.md)

### Applying rendering techniques

- [Drawing a triangle with Metal 4](metal/drawing-a-triangle-with-metal-4.md)
- [Customizing render pass setup](metal/customizing-render-pass-setup.md)
- [Setting load and store actions](metal/setting-load-and-store-actions.md)
- [Improving rendering performance with vertex amplification](metal/improving-rendering-performance-with-vertex-amplification.md)

## See Also

### Command encoders

- [Compute passes](metal/compute-passes.md)
- [Machine learning passes](metal/machine-learning-passes.md)
- [Blit passes](metal/blit-passes.md)
- [Indirect command encoding](metal/indirect-command-encoding.md)
- [Ray tracing with acceleration structures](metal/ray-tracing-with-acceleration-structures.md)
