<!--
{
  "availability" : [
    "iOS: 16.0.0 -",
    "iPadOS: 16.0.0 -",
    "macCatalyst: 16.0.0 -",
    "macOS: 13.0.0 -",
    "tvOS: 16.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Metal",
  "identifier" : "/documentation/Metal/MTLIOCommandQueue",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Metal"
    ],
    "preciseIdentifier" : "c:objc(pl)MTLIOCommandQueue"
  },
  "title" : "MTLIOCommandQueue"
}
-->

# MTLIOCommandQueue

A command queue that schedules input/output commands for reading files in the file system, and writing to GPU resources and memory.

```
protocol MTLIOCommandQueue : NSObjectProtocol, Sendable
```

## Overview

Use an input/output command queue to submit commands, in command buffers, that load assets from the file system directly into GPU resources. Your app can then use those resources with other commands it submits to an [`MTLCommandQueue`](/documentation/Metal/MTLCommandQueue) that comes from the same [`MTLDevice`](/documentation/Metal/MTLDevice).

You make input/output command queues by creating and configuring an [`MTLIOCommandQueueDescriptor`](/documentation/Metal/MTLIOCommandQueueDescriptor) instance and calling an [`MTLDevice`](/documentation/Metal/MTLDevice) instance’s [`makeIOCommandQueue(descriptor:)`](/documentation/Metal/MTLDevice/makeIOCommandQueue(descriptor:)) method.

## Topics

### Creating a input/output command buffer

[`makeCommandBuffer()`](/documentation/Metal/MTLIOCommandQueue/makeCommandBuffer())

Creates an input/output command buffer for the command queue.

[`makeCommandBufferWithUnretainedReferences()`](/documentation/Metal/MTLIOCommandQueue/makeCommandBufferWithUnretainedReferences())

Creates an input/output command buffer for the command queue that doesn’t retain the instances you pass to its methods.

### Adding a barrier to the queue

[`enqueueBarrier()`](/documentation/Metal/MTLIOCommandQueue/enqueueBarrier())

Appends a barrier that tells the input/output command queue to finish running all in-flight command buffers before running any new command buffers.

### Naming the queue

[`label`](/documentation/Metal/MTLIOCommandQueue/label)

An optional name for the input/output command queue.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)