<!--
{
  "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/MTLIOCommandQueueDescriptor",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Metal"
    ],
    "preciseIdentifier" : "c:objc(cs)MTLIOCommandQueueDescriptor"
  },
  "title" : "MTLIOCommandQueueDescriptor"
}
-->

# MTLIOCommandQueueDescriptor

A configuration template you use to create a new input/output command queue.

```
class MTLIOCommandQueueDescriptor
```

## Overview

Use this descriptor type to configure the settings of each input/output command queue that you create using [`makeIOCommandQueue(descriptor:)`](/documentation/Metal/MTLDevice/makeIOCommandQueue(descriptor:)). To create additional input/output command queues, you can reuse a descriptor instance and optionally reconfigure its properties.

> Note:
> Changing a descriptor’s properties doesn’t affect command queues you’ve already created with the descriptor.

Create each input/output queue to meet your apps needs by setting the descriptor’s properties.

- Select a queue’s relative level of importance with the [`priority`](/documentation/Metal/MTLIOCommandQueueDescriptor/priority) property.
- Create a queue that runs multiple input/output command buffers in parallel by setting the [`type`](/documentation/Metal/MTLIOCommandQueueDescriptor/type) property to [`MTLIOCommandQueueType.concurrent`](/documentation/Metal/MTLIOCommandQueueType/concurrent).
- Decide how many individual commands a queue can run simultaneously with the [`maxCommandsInFlight`](/documentation/Metal/MTLIOCommandQueueDescriptor/maxCommandsInFlight) property.
- Choose how many command buffers a queue can have waiting to run with [`maxCommandBufferCount`](/documentation/Metal/MTLIOCommandQueueDescriptor/maxCommandBufferCount) property.
- Take control of the queue’s scratch memory allocation by implementing [`MTLIOScratchBufferAllocator`](/documentation/Metal/MTLIOScratchBufferAllocator) and assign an instance of it to the [`scratchBufferAllocator`](/documentation/Metal/MTLIOCommandQueueDescriptor/scratchBufferAllocator) property.

## Topics

### Configuring the input/output command queue

[`priority`](/documentation/Metal/MTLIOCommandQueueDescriptor/priority)

Configures the priority for a new input/output command queue.

[`type`](/documentation/Metal/MTLIOCommandQueueDescriptor/type)

Configures the queue type for a new input/output command queue.

[`maxCommandsInFlight`](/documentation/Metal/MTLIOCommandQueueDescriptor/maxCommandsInFlight)

Sets the largest number of individual commands that an input/output command queue can run at a time.

[`maxCommandBufferCount`](/documentation/Metal/MTLIOCommandQueueDescriptor/maxCommandBufferCount)

Sets the largest number of outstanding input/output command buffers a queue can have at any point in time.

### Providing your own a scratch buffer

[`scratchBufferAllocator`](/documentation/Metal/MTLIOCommandQueueDescriptor/scratchBufferAllocator)

An optional memory allocator that you implement to manage the scratch memory that an input/output command queue requests.



---

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)