PIX 2205.24: Unlocking Arm and Qualcomm development

Jacques van Rhyn

Today we released PIX-2205.24, which can be downloaded here. This release contains Arm64 support for PIX and a Qualcomm plugin, bringing first-class support to graphics devs who want their apps to run as well as possible on Arm-based Windows hardware.

PIX now runs natively on Arm64

With Arm-based Windows devices becoming more popular, we’ve heard from developers that they needed a better solution for debugging and profiling their apps on Arm64 machines.

We listened: with PIX being an essential part of game development, we built an Arm64 version of PIX. From this release onwards, PIX will ship an Arm64 version, letting developers run PIX on Windows run natively on Arm64 devices.

Qualcomm plugin rounds out Arm64 support

Native Arm64 support is one piece of today’s announcement: we’re also proud to announce that we’re shipping a Qualcomm plugin along with this release. This means that developers can now expect a similar debugging and profiling experience to what they’re used to on x64 machines.

Many thanks to our partners at Qualcomm for their work on this plugin!

The Qualcomm plugin supports many different Adreno GPUs in a variety of devices. This includes:

  • The Adreno 685 and 690 GPUs (found in devices such as the Surface Pro X)
  • The Adreno 8cx Gen 3 GPU (found in devices such as the Lenovo ThinkPad X13s)
  • The Adreno 630 GPU (found in devices such as the HoloLens 2)

Both the x64 and Arm64 PIX installers can optionally install the Qualcomm plugin. The Arm64 version of PIX will use the plugin if you are running on a Qualcomm GPU. The x64 version of PIX will only use the Qualcomm plugin if you remotely connect to an Arm64 device with a Qualcomm GPU, such as a HoloLens 2.

The Qualcomm plugin in this version of PIX supports Event List Counters. These are low-level Qualcomm-specific per-event counter values shown next to each GPU event in PIX’s event list:

Image qc event list counters

A future version of the Qualcomm plugin will add support for High Frequency Counters. These are graphs of Qualcomm-specific per-event counters plotted over time. Here is an example of what these High Frequency Counters will look like:

Image qc high frequency counters

The new PIX plugin from Qualcomm complements PIX plugins available from AMD, Intel and NVIDIA for their GPUs. This means that Event List Counters are available in PIX on every modern GPU released by these 4 hardware vendors. It also means that High Frequency Counters will be available on all 4 vendors in the near future. Thanks to our hardware partners for making this possible.

Timing Analysis Event List Counters High Frequency Counters Wave Distribution
AMD
Intel
NVIDIA
Qualcomm Coming Soon

 

x64 on Arm64

Since Windows 11 supports running x64 applications on Arm64 devices, it is possible to run both the x64 and Arm64 versions of PIX on an Arm64 device. Both versions of PIX come with the binaries necessary to take GPU Captures of the other architecture. However, in general we recommend using the Arm64 version of PIX on Arm64 devices, since it will be faster than the x64 version and it supports the Qualcomm plugin.

Known issues

This version of PIX, like all previous versions of PIX, calls SetStablePowerState() before collecting timing information. This means that PIX generates consistent timing information, but on some GPUs (especially mobile GPUs like Qualcomm) the stable power state may have significantly lower performance characteristics than your application might experience outside PIX. This may result in PIX showing slower performance information. We are working with Qualcomm and other IHVs to fully address this issue in a future version of PIX.

Feedback

As always, please let us know if you have feedback about this or any other release: We look at and respond to every message we get on discord.gg/directx. And every email from when you hit the Send Feedback button goes straight to the entire PIX on Windows team.

Other smaller changes

  • Fix crash when using Shader Model 6.6 on AMD GPUs
  • Update to D3D12 Agility SDK version 1.602.0
  • Fix document tab flow + potential waste of screen real estate
  • Fix accidental truncation of some D3D12 flags when using Export to C++
  • Fix incorrect BlendOpAlpha values in the D3D State view