---
title: MTLAccelerationStructureCommandEncoder
framework: metal
role: symbol
role_heading: Protocol
path: metal/mtlaccelerationstructurecommandencoder
---

# MTLAccelerationStructureCommandEncoder

Encodes commands that build and refit acceleration structures for a single pass.

## Declaration

```swift
protocol MTLAccelerationStructureCommandEncoder : MTLCommandEncoder
```

## Mentioned in

Understanding the Metal 4 core API Sampling GPU data into counter sample buffers

## Overview

Overview Create an acceleration structure encoder by calling one of the factory methods on an MTLCommandBuffer instance, such as makeAccelerationStructureCommandEncoder(). Command stages Most commands apply to one stage within a pass. The following table shows which stage applies to each command:  |   |   |   |   |   |   |   |   |  For more information about stages and synchronization, see MTLStages and Resource synchronization.

## Topics

### Building an acceleration structure

- [build(accelerationStructure:descriptor:scratchBuffer:scratchBufferOffset:)](metal/mtlaccelerationstructurecommandencoder/build(accelerationstructure:descriptor:scratchbuffer:scratchbufferoffset:).md)

### Copying an acceleration structure

- [copy(sourceAccelerationStructure:destinationAccelerationStructure:)](metal/mtlaccelerationstructurecommandencoder/copy(sourceaccelerationstructure:destinationaccelerationstructure:).md)
- [writeCompactedSize(accelerationStructure:buffer:offset:)](metal/mtlaccelerationstructurecommandencoder/writecompactedsize(accelerationstructure:buffer:offset:).md)
- [writeCompactedSize(accelerationStructure:buffer:offset:sizeDataType:)](metal/mtlaccelerationstructurecommandencoder/writecompactedsize(accelerationstructure:buffer:offset:sizedatatype:).md)
- [copyAndCompact(sourceAccelerationStructure:destinationAccelerationStructure:)](metal/mtlaccelerationstructurecommandencoder/copyandcompact(sourceaccelerationstructure:destinationaccelerationstructure:).md)

### Refitting an acceleration structure

- [refit(sourceAccelerationStructure:descriptor:destinationAccelerationStructure:scratchBuffer:scratchBufferOffset:)](metal/mtlaccelerationstructurecommandencoder/refit(sourceaccelerationstructure:descriptor:destinationaccelerationstructure:scratchbuffer:scratchbufferoffset:).md)
- [refit(sourceAccelerationStructure:descriptor:destinationAccelerationStructure:scratchBuffer:scratchBufferOffset:options:)](metal/mtlaccelerationstructurecommandencoder/refit(sourceaccelerationstructure:descriptor:destinationaccelerationstructure:scratchbuffer:scratchbufferoffset:options:).md)

### Preventing resource access conflicts

- [updateFence(_:)](metal/mtlaccelerationstructurecommandencoder/updatefence(_:).md)
- [waitForFence(_:)](metal/mtlaccelerationstructurecommandencoder/waitforfence(_:).md)

### Making indirect resources resident

- [useHeap(_:)](metal/mtlaccelerationstructurecommandencoder/useheap(_:).md)
- [useHeaps(_:)](metal/mtlaccelerationstructurecommandencoder/useheaps(_:).md)
- [useResource(_:usage:)](metal/mtlaccelerationstructurecommandencoder/useresource(_:usage:).md)
- [useResources(_:usage:)](metal/mtlaccelerationstructurecommandencoder/useresources(_:usage:).md)
- [MTLResourceUsage](metal/mtlresourceusage.md)

### Sampling counters

- [sampleCounters(sampleBuffer:sampleIndex:barrier:)](metal/mtlaccelerationstructurecommandencoder/samplecounters(samplebuffer:sampleindex:barrier:).md)

## Relationships

### Inherits From

- [MTLCommandEncoder](metal/mtlcommandencoder.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)
- [MTLAccelerationStructure](metal/mtlaccelerationstructure.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)
- [MTLAccelerationStructureUsage](metal/mtlaccelerationstructureusage.md)
- [MTLAccelerationStructureRefitOptions](metal/mtlaccelerationstructurerefitoptions.md)
