PIX 2403.08 – New D3D12 features + misc PIX improvements

Austin Kinross

Today we released PIX on Windows version 2403.08, which can be downloaded here.

This release coincides with today’s Agility SDK release, which includes support for new features including the final Work Graphs API, GPU Upload Heaps, and more. Please visit this post on the DirectX blog for more information about the Agility SDK release.

New features and improvements in this PIX release include:

GPU Captures

Timing Captures

plus some bug fixes and other improvements.


GPU Captures

Support for new D3D12 Features

Work Graphs

This release includes PIX support for the final D3D12 Work Graphs API that was released today. PIX has full capture/replay support for the API, and it allows you to view event details, your local root arguments table (LRAT) layout, your node inputs, a detailed breakdown of your state objects, and hardware counter data/graphs for your DispatchGraph() calls.

These features were previously available in a preview version of PIX alongside the preview Work Graphs API. Please see this blog post for more information about the PIX features.

Image WorkGraphs


GPU Upload Heaps

GPU Upload Heaps are out of preview and can now be used in any D3D12 application that’s running on a supported GPU/driver with Windows 11 Insider Preview Build 26080 or later.

PIX has full support for GPU Upload Heaps. And good news: the OS performance issues that impacted PIX + GPU Upload Heaps in last year’s preview release have been resolved! This means that there is no need for an application to use PIX’s ID3D12ManualWriteTrackingResource APIs to avoid performance issues, although developers are still welcome to use these APIs if desired.


Generic Programs in State Objects, Shader Model 6.8, Incrementing Constants

PIX includes support for all these additional D3D12 features released today. Support for Generic Programs is minimal though – PIX shouldn’t crash during capture/replay, but most a lot of features available when using traditional Pipeline State Objects will be unavailable when using generic programs. These features will become available in future versions of PIX.


Shader debugging speed and reliability improvements

This release includes some significant performance improvements to shader debugging start times for some applications. For example, the time to start shader debugging on a famous sample from a famous DXR engine has reduced from over 5mins to 30secs. Other applications see more modest improvements.

We have also fixed a wide range of shader debugging bugs reported by our users. Please continue to contact us with issues you hit!


New texture visualizers

We have added several new texture visualizers to this release, including:

  • Depth test visualizer: shows pixels that passed the depth test in green, and failed in red
  • Stencil test visualizer: shows pixels that passed the stencil test in green, and failed in red
  • Culling test visualizer: shows pixels that passed the culling test in green, and failed in red
  • Viewport visualizer: shows pixels outside the current viewport (viewport 0) in magenta
  • Scissor rect visualizer: shows pixels outside the current scissor rect (0) in magenta

The existing diff visualizers have been updated to support MSAA textures too. We plan to continue adding more visualizers in the future: next up is a NaN visualizer! If you have other ideas or suggestions for visualizers then please let us know.

Image ViewportVisualizer


Misc UI performance improvements

We have made many different performance improvements to the PIX UI in the past couple of months, including updating from .NET 6 to .NET 8. We hope that this will make the PIX UI feel snappier + more user friendly. More improvements will come during the rest of 2024!

The move to .NET 8 has also fixed some common .NET 6 bugs that our users hit, including this crash involving Logitech mice.


Support for gathering shader reflection data from PDBs

In this release, PIX can gather shader reflection data from PDBs and use it to populate key information in the UI such as the Pipeline tab. This means that you can now compile your shaders with /Qstrip_reflect and still see reflection data in the Pipeline tab, assuming you have the external PDBs available.

Image StrippedPDBs


Timing Captures

Demoted Allocations and Allocation Migrations for GPU Resources

In this release we’ve added tracking of demoted allocations and allocation migrations for GPU resources when the “GPU resources” timing capture option is enabled.

Demoted allocations occur when a GPU allocation is requested in VRAM but is instead placed in system RAM (often due to memory pressure and fragmentation) and show up as markers in the Residence Operations lane.

Image Demoted1

Allocation Migrations are an attempt to move a demoted allocation into VRAM. These migrations are scheduled by the kernel and are not guaranteed to succeed (see the bottom sublane in the image below. The red segments are failed migration attempts and the green is the successful one). Note that these migrations require suspending the GPU, so they have a large performance impact.

Image Demoted2


Thread and core usage data in the Timing Capture summary view

The summary view in PIX Timing Captures now includes a table that shows the CPU utilization for all cores and for all threads in the game. Image ThreadAndCoreUsage


GPU consolidated events in the Metrics View

The consolidated events feature in the Timing Capture metrics view now includes support for GPU PIX events in addition to CPU PIX events.


Additional metric statistics in the Metrics View

The metrics details tab has also been enhanced to display an expanded set of statistics, including statistics for event trees.

Image AdditionalMetricStatistics



Bug fixes and other improvements

  • Added support for depth pixel history
  • Added ability to filter processes in the process “Attach” tab
  • Updated AMD plugin, with some updated counter descriptions + support for new GPU variants
  • Better handling of small panel sizes in the UI
  • More resilient handling of descriptor descs with implicit values (e.g. using -1 to specify all mips)
  • Add built-in “Copy” and “Copy Cell” to misc parts of the UI
  • Various dark mode fixes + improvements
  • Fix “no shader records” error when raygen doesn’t call TraceRay at all
  • API Objects view: show more information about some objects (e.g. command lists, metacommands)
  • Fix PixMarkers with default color being invisible
  • Misc acceleration structure camera improvements
  • Better error message when E_UNEXPECTED is thrown internally in PIX (not just “Catastrophic Error”!)


Discussion is closed.

Feedback usabilla icon