---
title: MTLAccelerationStructure
framework: metal
role: symbol
role_heading: Protocol
path: metal/mtlaccelerationstructure
---

# MTLAccelerationStructure

A collection of model data for GPU-accelerated intersection of rays with the model.

## Declaration

```swift
protocol MTLAccelerationStructure : MTLResource
```

## Mentioned in

Improving CPU performance by using argument buffers

## Overview

Overview To accelerate ray tracing, the device instance needs to reorganize your model data into an optimized data structure for intersection testing on that GPU. Create  MTLAccelerationStructure instances to contain your model data and reference them in compute and render  commands that execute ray-tracing operations. You don’t define classes that implement this protocol. To create an acceleration structure, you create a descriptor instance and configure its properties with your model data. Then call the makeAccelerationStructure(descriptor:) method on the Metal device instance to create the instance and reserve memory for the structure. To populate the structure with the data, use an MTLAccelerationStructureCommandEncoder to encode GPU commands. Metal provides multiple descriptor classes, each describing a different type of model data. Choose the appropriate descriptor for each acceleration structure you want to make. Most often, you create an acceleration structure for each list of triangles or bounding boxes. Then collect related geometry structures into a primitive acceleration structure. Create instance acceleration structures when you need to reference instances of primitive acceleration structures at different locations within a scene. The table below summarizes the descriptor classes:  |   |   |   |   |

## Topics

### Reading the structure’s size

- [size](metal/mtlaccelerationstructure/size.md)

### Instance Properties

- [gpuResourceID](metal/mtlaccelerationstructure/gpuresourceid.md)

## Relationships

### Inherits From

- [MTLAllocation](metal/mtlallocation.md)
- [MTLResource](metal/mtlresource.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)

## See Also

### Acceleration structures

- [Improving ray-tracing data access using per-primitive data](metal/improving-ray-tracing-data-access-using-per-primitive-data.md)
- [MTL4AccelerationStructureDescriptor](metal/mtl4accelerationstructuredescriptor.md)
- [MTLAccelerationStructureDescriptor](metal/mtlaccelerationstructuredescriptor.md)
- [MTL4PrimitiveAccelerationStructureDescriptor](metal/mtl4primitiveaccelerationstructuredescriptor.md)
- [MTLPrimitiveAccelerationStructureDescriptor](metal/mtlprimitiveaccelerationstructuredescriptor.md)
- [MTL4InstanceAccelerationStructureDescriptor](metal/mtl4instanceaccelerationstructuredescriptor.md)
- [MTLInstanceAccelerationStructureDescriptor](metal/mtlinstanceaccelerationstructuredescriptor.md)
- [MTLAccelerationStructureCommandEncoder](metal/mtlaccelerationstructurecommandencoder.md)
- [MTLAccelerationStructureUsage](metal/mtlaccelerationstructureusage.md)
- [MTLAccelerationStructureRefitOptions](metal/mtlaccelerationstructurerefitoptions.md)
