---
title: Buffers
framework: metal
role: collectionGroup
role_heading: API Collection
path: metal/buffers
---

# Buffers

Create and manage untyped data your app uses to exchange information with its shader functions.

## Overview

Overview Each MTLBuffer instance represents a general purpose, typeless memory allocation that your app uses to send and retrieve data from a shader. Your app decides how to use and interpret the buffer’s underlying bytes. You create buffers from either an MTLDevice or MTLHeap instance. Buffers inherently support the MTLResource protocol’s properties and methods, including storageMode, which controls how the GPU handles its memory (see Resource fundamentals).

## Topics

### General purpose buffers

- [MTLBuffer](metal/mtlbuffer.md)

### Argument buffers

- [Improving CPU performance by using argument buffers](metal/improving-cpu-performance-by-using-argument-buffers.md)
- [Managing groups of resources with argument buffers](metal/managing-groups-of-resources-with-argument-buffers.md)
- [Tracking the resource residency of argument buffers](metal/tracking-the-resource-residency-of-argument-buffers.md)
- [Indexing argument buffers](metal/indexing-argument-buffers.md)
- [Rendering terrain dynamically with argument buffers](metal/rendering-terrain-dynamically-with-argument-buffers.md)
- [Encoding argument buffers on the GPU](metal/encoding-argument-buffers-on-the-gpu.md)
- [Using argument buffers with resource heaps](metal/using-argument-buffers-with-resource-heaps.md)
- [MTLArgumentDescriptor](metal/mtlargumentdescriptor.md)
- [MTLArgumentEncoder](metal/mtlargumentencoder.md)
- [MTLAttributeStrideStatic](metal/mtlattributestridestatic.md)

### Model I/O interoperability

- [MTKMesh](metalkit/mtkmesh.md)
- [MTKMeshBuffer](metalkit/mtkmeshbuffer.md)
- [MTKMeshBufferAllocator](metalkit/mtkmeshbufferallocator.md)
- [MTKSubmesh](metalkit/mtksubmesh.md)
- [MTKModelError](metalkit/mtkmodelerror.md)
- [MTKMetalVertexFormatFromModelIO(_:)](metalkit/mtkmetalvertexformatfrommodelio(_:).md)
- [MTKModelIOVertexFormatFromMetal(_:)](metalkit/mtkmodeliovertexformatfrommetal(_:).md)
- [MTKMetalVertexDescriptorFromModelIO(_:)](metalkit/mtkmetalvertexdescriptorfrommodelio(_:).md)
- [MTKModelIOVertexDescriptorFromMetal(_:)](metalkit/mtkmodeliovertexdescriptorfrommetal(_:).md)

## See Also

### Resources

- [Resource fundamentals](metal/resource-fundamentals.md)
- [Textures](metal/textures.md)
- [Memory heaps](metal/memory-heaps.md)
- [Resource loading](metal/resource-loading.md)
- [Resource synchronization](metal/resource-synchronization.md)
