D3D12 video in GPU Captures

PIX on Windows supports GPU Captures of applications that use Direct3D 12 video APIs. Use this support to capture regions of GPU work that involve video, such as title screens in games or videos playing in a web browser, and to inspect workloads that use video decode, video processing, video encode, motion estimation, or video resources.

D3D12 video work usually runs on command queues whose type is one of the video values in D3D12_COMMAND_LIST_TYPE:

  • D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE
  • D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS
  • D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE

PIX can also capture D3D11 video workloads through D3D11On12. When you launch the target application from PIX, use the Force D3D11On12 option if the workload uses D3D11 video APIs. For more information, see Capture D3D11 apps with D3D11On12. The workflow in PIX is the same whether the app uses D3D12 video APIs directly or D3D11 video APIs through D3D11On12.

Important

PIX doesn't support capturing applications that use video DRM. Turn off DRM in the application before you take a GPU Capture.

Capture modes

PIX has two paths for video work in GPU Captures.

Output capture

By default, PIX doesn't capture and replay most video queue work directly. Instead, PIX notices when decode or process video work modifies D3D12 resources at capture time, records the texture data that the video work produced, and makes the equivalent modifications to the resources during replay. These updates appear as UpdateResourceAfterVideoWork events on the CPU timeline of the capture.

This path is designed for captures where later non-video work consumes video outputs. For example, if a decoded or processed video texture is sampled by a draw, you can select the draw and inspect the texture through the same resource views you use for other GPU resources.

In this path, PIX captures these video outputs:

  • Decode output textures from DecodeFrame and DecodeFrame1.
  • Process output textures from ProcessFrames and ProcessFrames1.
  • Motion-vector textures produced by ResolveMotionVectorHeap.
  • Textures that video work later transitions back to COMMON.

This path doesn't preserve every video API call as replayed GPU work. It also doesn't round-trip video encode bitstream or metadata buffers through UpdateResourceAfterVideoWork. If you need to inspect the video commands themselves, use full video API capture.

Full video API capture

Note

Full video API capture is new in the October 2026 release of PIX and is currently experimental.

Full video API capture records and replays work on D3D12 video command queues. To turn it on, open Settings, go to GPU Capture and Analysis, and select Capture and replay full video workloads. The setting applies to applications that you launch after you change it. When you launch through automation, use PIX_APPLICATION_LAUNCH_FLAG_GPU_CAPTURE_FULL_VIDEO_APIS.

In this mode, the Events view can show separate queue rows named Video Decode Queue N, Video Process Queue N, and Video Encode Queue N. The rows contain video command-list calls such as:

Inspect video output in a capture

Use output capture to see how decoded or processed video frames reach the rest of your rendering.

  1. Take a GPU Capture that spans several frames of video playback. Set Frame Count to more than 1 so that the capture contains several video frames.
  2. Open the capture and start analysis.
  3. In the Events view, select the first Present call in the capture, and look at the render target to see the current video frame.
  4. Select a later event in the capture. The contents of the video change to match the video frame that was current at that point in the capture.
  5. Select the draw call that renders the video contents onto the back buffer. In the Pipeline view, inspect the video texture that the pixel shader samples. For a multi-plane format such as DXGI_FORMAT_NV12, you can view the individual planes of the texture.

Other GPU Capture features, such as shader debugging and pixel history, work on the graphics work that consumes the video output. For more information about inspecting resources, see Inspect pipeline state and resources.

Inspect resources used by video commands

When full video API capture is enabled, PIX tracks resources referenced by video command arguments and shows them as API-parameter resources for the selected event. The tracked resources include:

  • Decode output textures, conversion reference textures, histogram buffers, compressed bitstream buffers, and reference frames.
  • Process output textures, input textures, past reference frames, and future reference frames.
  • Encode input textures, reference frames, bitstream buffers, reconstructed pictures, metadata buffers, resolved metadata buffers, motion-estimation inputs, motion references, and motion-vector outputs.

You can open these resources in resource viewers when their format and resource type are supported by the corresponding viewer. Multi-plane video formats, such as DXGI_FORMAT_NV12, use the normal subresource and plane handling for D3D12 textures.

Inspect video API objects

The API Objects view includes D3D12 video objects captured in the file. PIX creates entries for:

  • D3D12 Video Decoder
  • D3D12 Video Decoder Heap
  • D3D12 Video Processor
  • D3D12 Video Encoder
  • D3D12 Video Encoder Heap

Select one of these objects to inspect the captured creation data. For example, decoder entries include the decode configuration, processor entries include output and input stream descriptions, and encoder entries include codec, profile, input format, codec configuration, and motion-estimation precision.

Timing data

Timing behavior depends on the capture mode:

  • In output capture, the video queue work isn't replayed as individual video commands. Collect Timing Data still works, but the timing data doesn't include performance data for the D3D12 video work.
  • In full video API capture, video command-list work appears as video events, and PIX can correlate timing for supported video commands when you collect timing data.

For later graphics work that consumes video outputs, use the normal GPU Capture analysis workflow, including shader debugging, pixel history, resource inspection, and timing for the graphics events.

Limitations

Use these limitations when deciding which capture path to use:

  • PIX doesn't support capturing applications that use video DRM.
  • Output capture is best for inspecting the textures that video work produced, not for debugging the video command stream itself.
  • Output capture can't replay encode bitstream and metadata buffer outputs through UpdateResourceAfterVideoWork.
  • PIX skips output resources that remain in video-only states or layouts until a later video queue execution can capture them after they transition to a readable state.
  • If a resource has some subresources in video states or layouts and other subresources in non-video states or layouts, PIX logs a warning that the video work might not be captured correctly.