---
title: "copy(from:sourceSlice:sourceLevel:sourceOrigin:sourceSize:to:destinationSlice:destinationLevel:destinationOrigin:)"
framework: metal
role: symbol
role_heading: Instance Method
path: "metal/mtlblitcommandencoder/copy(from:sourceslice:sourcelevel:sourceorigin:sourcesize:to:destinationslice:destinationlevel:destinationorigin:)"
---

# copy(from:sourceSlice:sourceLevel:sourceOrigin:sourceSize:to:destinationSlice:destinationLevel:destinationOrigin:)

Encodes a command that copies image data from a texture’s slice into another slice.

## Declaration

```swift
func copy(from sourceTexture: any MTLTexture, sourceSlice: Int, sourceLevel: Int, sourceOrigin: MTLOrigin, sourceSize: MTLSize, to destinationTexture: any MTLTexture, destinationSlice: Int, destinationLevel: Int, destinationOrigin: MTLOrigin)
```

## Parameters

- `sourceTexture`: A texture with an doc://com.apple.metal/documentation/Metal/MTLTexture/isFramebufferOnly property value of doc://com.apple.documentation/documentation/Swift/false that the command copies data from. For a texture that uses a compressed pixel format, align the copy region (sourceOrigin and sourceSize) to the pixel format’s block size.
- `sourceSlice`: A slice within sourceTexture.
- `sourceLevel`: A mipmap level within sourceTexture.
- `sourceOrigin`: A location within sourceTexture that the command begins copying data from. Assign 0 to each dimension that’s not relevant to sourceTexture. For example: If the source texture is a 2D texture, set the origin’s doc://com.apple.metal/documentation/Metal/MTLOrigin/z property to 0. If the source texture is a 1D texture, set the origin’s doc://com.apple.metal/documentation/Metal/MTLOrigin/y and doc://com.apple.metal/documentation/Metal/MTLOrigin/z properties to 0.
- `sourceSize`: An doc://com.apple.metal/documentation/Metal/MTLSize instance, which can represent a 3D region, that instructs the command how many pixels to copy from sourceTexture, starting at sourceOrigin. Assign 1 to each dimension that’s not relevant to sourceTexture. For example: If the source texture is a 2D texture, set the size’s doc://com.apple.metal/documentation/Metal/MTLSize/depth property to 1. If the source texture is a 1D texture, set the size’s doc://com.apple.metal/documentation/Metal/MTLSize/height and doc://com.apple.metal/documentation/Metal/MTLSize/depth properties to 1. If sourceTexture uses a compressed pixel format, set sourceSize to a multiple of the pixel format’s block size. If the block extends outside the bounds of the texture, clamp sourceSize to the edge of the texture.
- `destinationTexture`: A texture the command copies data to that has the following configuration: The doc://com.apple.metal/documentation/Metal/MTLTexture/isFramebufferOnly property value is doc://com.apple.documentation/documentation/Swift/false. The pixel format is the same as sourceTexture. The sample count is the same as sourceTexture. For a texture that uses a compressed pixel format, align the copy region (destinationOrigin) to the pixel format’s block size.
- `destinationSlice`: A slice within destinationTexture.
- `destinationLevel`: A mipmap level within destinationTexture.
- `destinationOrigin`: A location within destinationTexture that the command begins copying data to. Assign 0 to each dimension that’s not relevant to destinationTexture. For example: If the destination texture is a 2D texture, set the origin’s doc://com.apple.metal/documentation/Metal/MTLOrigin/z property to 0. If the destination texture is a 1D texture, set the origin’s doc://com.apple.metal/documentation/Metal/MTLOrigin/y and doc://com.apple.metal/documentation/Metal/MTLOrigin/z properties to 0.

## Mentioned in

Copying data to a private resource

## Discussion

Discussion For textures that use a PVRTC pixel format, you can use this method to copy the entire texture, but not a subregion of the texture. important: Copying data to overlapping regions within the same texture may result in unexpected behavior.

## See Also

### Copying texture data to another texture

- [copy(from:to:)](metal/mtlblitcommandencoder/copy(from:to:).md)
- [copy(from:sourceSlice:sourceLevel:to:destinationSlice:destinationLevel:sliceCount:levelCount:)](metal/mtlblitcommandencoder/copy(from:sourceslice:sourcelevel:to:destinationslice:destinationlevel:slicecount:levelcount:).md)
- [copy(from:sourceOrigin:sourceDimensions:to:destinationOrigin:destinationDimensions:)](metal/mtlblitcommandencoder/copy(from:sourceorigin:sourcedimensions:to:destinationorigin:destinationdimensions:).md)
