DirectX 12 Async Compute Hardware Queue Requirements

Asynchronous compute in DirectX 12 enables modern GPUs to maximize hardware utilization by executing graphics, compute, and memory transfer operations concurrently rather than in sequence. To achieve true simultaneous execution rather than time-sliced context switching, a GPU must possess dedicated, independent hardware command engines capable of processing distinct queue types concurrently. This article outlines the specific hardware queue types required to deliver true asynchronous compute performance under DirectX 12.

1. Direct (3D) Queue

In DirectX 12, this is represented by D3D12_COMMAND_LIST_TYPE_DIRECT. At the hardware level, this queue maps to the primary 3D graphics pipeline. It handles the complete rasterization pipeline, including draw calls, depth/stencil operations, geometry processing, pixel shading, and dispatching compute shaders. To support asynchronous compute, the hardware must treat this queue as an independent path that does not block or wait on compute-only pipelines unless explicitly synchronized via fence primitives.

2. Compute Queue

Represented by D3D12_COMMAND_LIST_TYPE_COMPUTE, this queue bypasses the graphics, geometry, and rasterization hardware entirely. To achieve true asynchronous compute, the GPU must have dedicated hardware compute engines—such as AMD's Asynchronous Compute Engines (ACE) or NVIDIA's independent hardware compute schedulers—running alongside the 3D engine. These hardware units must be able to schedule compute dispatches to vacant execution units (ALUs/SIMDs) while the Direct queue is simultaneously running rasterization or rendering passes.

3. Copy (Transfer) Queue

Represented by D3D12_COMMAND_LIST_TYPE_COPY, this queue maps directly to the GPU's dedicated DMA (Direct Memory Access) engines. While asynchronous compute primarily revolves around the simultaneous operation of the Direct and Compute queues, a dedicated hardware Copy engine is critical to prevent memory transfers (such as uploading textures or streaming geometry) from stalling the compute or graphics engines.

Requirements for True Simultaneous Execution

For a GPU to execute these operations simultaneously rather than serially:

  • Independent Hardware Scheduling: The GPU silicon must feature physically discrete command processors or microcode-driven hardware schedulers for both the 3D engine and one or more compute engines.
  • Concurrent Dispatch Support: The driver and hardware architecture must support multi-engine execution, allowing waves or warps from both a Direct command list and a Compute command list to occupy the execution units simultaneously. If a GPU relies on a single hardware command processor, it will merely interleave workloads via software context switching, which introduces latency rather than achieving true asynchronous compute.