Create and manipulate structured GPU resources.


Working with Textures

Create formatted image data.

Creating and Sampling Textures

Load image data into a texture and apply it to a quadrangle.

Understanding Color-Renderable Pixel Format Sizes

Know the size limits of pixel formats used by color render targets in iOS and tvOS GPUs.

Optimizing Texture Data

Optimize a texture’s data to improve GPU or CPU access.

Improving Filtering Quality and Sampling Performance

Provide multiple levels of detail for your textures by using mipmaps.

Managing Texture Memory

Take direct control of memory allocation for texture data by using sparse textures.


A resource that holds formatted image data.


An object that you use to configure new Metal texture objects.


An object that decodes common image formats into Metal textures for use in your app.


A texture handle that can be shared across process address space boundaries.


The data formats that describe the organization and characteristics of individual pixels in a texture.

Sampling Texture Data

Define how your shader samples texture data.


An object that defines how a texture should be sampled.


An object that you use to configure a texture sampler.

See Also


Setting Resource Storage Modes

Set a storage mode that defines the memory location and access permissions of a resource.

Copying Data to a Private Resource

Use a blit command encoder to copy buffer or texture data to a private resource.

Synchronizing a Managed Resource

Synchronize the contents of a managed resource for the CPU or GPU.

Transferring Data Between Connected GPUs

Use high-speed connections between GPUs to transfer data quickly.

Reducing the Memory Footprint of Metal Apps

Learn best practices for using memory efficiently in iOS and tvOS.


An allocation of memory that is accessible to a GPU.


An encoder that encodes memory copying, filtering, and fill commands.


An encoder that encodes commands that modify resource configurations.


Create and manipulate unstructured GPU resources.

Indirect Command Buffers

Recoup encoding time by reusing commands, or create a GPU-driven rendering pipeline by generating commands on the GPU.


Create a single allocation of memory from which you can suballocate resources.


Manage access to resources in your app to avoid data hazards.