---
title: "copyAndCompact(sourceAccelerationStructure:destinationAccelerationStructure:)"
framework: metal
role: symbol
role_heading: Instance Method
path: "metal/mtlaccelerationstructurecommandencoder/copyandcompact(sourceaccelerationstructure:destinationaccelerationstructure:)"
---

# copyAndCompact(sourceAccelerationStructure:destinationAccelerationStructure:)

Encodes a command to compact an acceleration structure’s data and copy it into a different acceleration structure.

## Declaration

```swift
func copyAndCompact(sourceAccelerationStructure: any MTLAccelerationStructure, destinationAccelerationStructure: any MTLAccelerationStructure)
```

## Parameters

- `sourceAccelerationStructure`: The source acceleration structure.
- `destinationAccelerationStructure`: The destination acceleration structure.

## Discussion

Discussion The source and destination acceleration structures can’t overlap in memory. The destination acceleration structure needs to be at least as large as the compact size of the source acceleration structure, which you obtain by using the writeCompactedSize(accelerationStructure:buffer:offset:) method. If the source acceleration structure contains references to other acceleration structures, the copy of the acceleration structure refers to the same child structures.

## See Also

### 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)
