May 9th, 2025

PIX 2505.09 – Revamped UX, Improved Usability, and Many New Features

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

Since our preview announcement at GDC, we have been working hard to deliver the changes we promised and more. Today’s release includes many new improvements to PIX, including big overall changes and changes specific to GPU Captures and Timing Captures. Other improvements, such as information about the PIX API preview, will be available in the coming weeks – stay tuned!

As usual, if you have any feedback or suggestions for PIX then please get in touch! The best ways are via the DirectX Discord (#pix) or via the Help->Send Feedback button in PIX.

Improvements in this release include:

PIX Overall:

GPU Captures:

Timing Captures:

The release also includes many Misc Bug Fixes and Improvements.

PIX Overall

Revamped UX

This PIX release includes big changes to the look and feel of PIX. Our primary focus has been to improve the discoverability and intuitiveness of PIX features, and improve the overall consistency of the PIX experience. In future releases we will make smaller changes to specific areas of PIX to improve their UX too, so stay tuned for updates!

We expect to refine this new UX over time. If you have any feedback or suggestions then please don’t hesitate to get in touch.

2505 08 connection page image

2505 08 capture dark image

New Layout Editor

Today’s PIX release enables users to tailor their PIX workspaces more than ever before. For each capture type you can move parts of PIX around, dock them in place via drag-and-drop, scale them, and more. It will feel familiar to anyone who has used a layout system like Visual Studio’s before.

Custom Layout Templates – Create and switch between personalized layouts for different capture types, starting from a blank or default template.

Reset Layout – Easily revert to your base default template or undo accidental changes.

Manage Layouts – Apply, rename, duplicate, or delete custom layouts for streamlined workspace management.

2505 08 snap image

2505 08 snap2 image

DirectX Control Panel Settings in PIX

D3DConfig and DirectX Control Panel (DxCpl) are tools to configure Direct3D debug settings. D3DConfig is the modern command-line tool that has superseded the DirectX Control Panel.

PIX now has built-in ways to view and modify the Direct3D debug settings available in D3DConfig and DxCpl directly in Connection Settings on the connection page. Current setting values will automatically be populated when the settings panel is opened, otherwise users can also manually refresh to get the latest changes. Any changes made will automatically be applied.

Screenshot 2025 05 06 090704 image

Like D3DConfig and DxCpl, only registered apps are affected by the settings so affected apps or directories should be added under Scope/Executables List.

To help identify when non-default settings are applied, PIX will show a notification on the connection page that lists any non-default settings.

Screenshot 2025 05 06 090713 image

Any changes made via this PIX UI will be reflected in the DirectX Control Panel and D3DConfig.

We plan to expand this PIX UI with other DirectX-related settings in the future. Stay tuned for more updates!

GPU Captures

Custom Visualizer Improvements

Last year we announced Custom Mesh/Texture visualizers in PIX, a powerful way to write your own HLSL code to interpret buffers/textures in your own way – including by reading from any resource bound to the currently-selected event!

We have been making improvements to this feature over the past few releases, and this release is no different.

New for this release is “buffer as buffer” visualization. This lets you write a custom shader that will make your indirect data jump for you. For example, if you have a root constant that includes a descriptor heap index and a buffer offset which your game’s shader will dynamically dereference, then you can now teach PIX how to do that for you via a custom buffer visualizer. This allows you to easily view the buffer data read by your shader, without you having to perform manual steps each time.

We have also added:

  • Root constants bind-by-name support.
  • CBV & UAV bind-by-name support.
  • PIX_CUSTOM_VISUALIZER and PIX_CUSTOM_VISUALIZER_WINDOWS macros now defined for PIX HLSL API, to help you tell whether your shader is being used in Xbox PIX or PIX on Windows.

Screenshot 2025 05 06 090721 image

For details on those new additions, see MS Learn documentation.

New Built-in Image Visualizers

We have added two new built-in image visualizers to PIX too. The first is a VRS (Variable Rate Shading) visualizer, which lets you see the shading rate for any given pixel in the selected event.

Screenshot 2025 05 06 090730 image

The second is a Quad Utilization visualizer, that lets you see the helper lanes created by the selected event:

Screenshot 2025 05 06 090739 image

New Plugins

Today’s release includes updated plugins from AMD, NVIDIA and Qualcomm. These complement the plugin from Intel that was updated recently too. Many thanks to our hardware partners for their support and work here!

AMD

  • Adds support for AMD Radeon™ RX 9070 and AMD Radeon™ RX 9070 XT GPUs
  • Adds support for AMD Radeon™ 8000S Graphics APUs (aka: “Strix Halo”)
  • Adds support for AMD Radeon™ 800M Graphics APUs (aka: “Krackan”)
  • Removes support for some GCN-based devices, as they are no longer supported by the regular driver releases:
    • AMD Radeon™ RX 400 series GPUs
    • AMD Radeon™ RX 500 series GPUs
    • AMD Radeon Vega series
    • AMD Radeon VII GPUs

NVIDIA

This plugin adds support for NVIDIA Blackwell GPUs, such as the RTX 5090. It also adds support for the Power State selection feature in PIX on NVIDIA Ampere (3000-series) GPUs and newer:

Screenshot 2025 05 06 090749 image

Qualcomm

This plugin adds support for Qualcomm Snapdragon X Elite and Snapdragon X Plus hardware, such as those found in Surface Pro 10.

View Work Graph Resources in Pipeline View

This release adds the ability to view the resources bound to node shaders inside your Work Graph. After navigating to your DispatchGraph() event, you can select different node shaders and view its resource list. After starting analysis, you can select resources and view their contents.

Screenshot 2025 05 06 091359 image

“Node” combo box lists all nodes in the graph. Selecting an entry in it will show all node resources, namely the shader, local root signature, GPU resources, and node info.

Selecting “!E” option allows you to filter out all non-entrypoint nodes from the list.

Selecting “Node Info” in Resources List shows you useful details about the node:

Screenshot 2025 05 06 091421 image

“Gather Accessed Resources” doesn’t currently support Work Graphs, so you won’t be able to see dynamically accessed resources in the PIX UI yet. This functionality will be added in a future PIX release.

Buffer Viewer Improvements

We have made several improvements to PIX’s buffer viewer and Buffer Formatter, including:

  • Add the ability to define types using the #define macro
  • Add support for templated matrices syntax
  • Fix layout for NxM matrices to make it more intuitive to read values
  • Improve support for float16_t values – they are now automatically populated from the shader
  • Add support for int8t_4_packed types
  • Fix misc offset tag bugs
  • Add support for the “matrix” keyword, equivalent to float4x4
  • Reset the start offset after selecting different buffers
  • Fix some explicit offset format bugs

Screenshot 2025 05 06 091556 image Screenshot 2025 05 06 091604 image Screenshot 2025 05 06 091615 image

NURI (NonUniformResourceIndexing) Misuse Detection

We have added a new Dr. PIX experiment titled NonUniformResourceIndex (NURI). If a shader attempts to access a resource declared as an array using a dynamic index, the index needs to be constant within a wave. If the index varies within a wave, then the NonUniformResourceIndex qualifier needs to be used on the index, or the results are undefined. More details can be found here.

To try the new experiment, first navigate to or add the Dr. PIX view. Next, select NonUniformResourceIndex from the drop-down list of experiments. Make sure analysis has already started. Finally, select Run Experiment and wait for the results.

Screenshot 2025 05 06 091639 image

This experiment instruments shaders that use dynamic indexing to access resources. If the index does not use the NonUniformResourceIndex qualifier and is found to vary within a wave, then PIX will output the details of this shader.

Screenshot 2025 05 06 091647 image

Known Caveats

  • Shader Model 6.0 or higher is required.
  • Some shaders might fail instrumentation with the message: “Instrumentation failed for this shader stage”. This will be fixed in a future release.

 

Timing Captures

Support for Capturing Video Frames

Timing Captures now include an option to record video frames along with the timing data.  If the option to collect video frames is selected before a capture is taken, PIX will add a lane named Video Frames to the Timeline view.

Screenshot 2025 05 06 091712 image

A New Set of Metrics to Help Optimize Titles on Battery Powered Devices

A new set of metrics have been added to help you optimize your title on battery powered devices such as tablets and Windows handheld gaming devices.  These metrics are available in System Monitor, and in the Metrics, Comparison, and Budgets layouts in Timing Captures.  Both system power metrics and per-processor metrics are provided.

Screenshot 2025 05 06 091729 image

PIX GPU Events that can start/end on separate CPU threads

Prior to this release of PIX on Windows, the PIXBeginEvent() and PIXEndEvent() calls for a PIX GPU event (i.e. an event that include a D3D12 command queue or command list) were also required to be recorded on the same CPU thread. Without this, the GPU PIX event hierarchy would look correct but the CPU PIX event hierarchy would be garbled. This was starting to become increasingly common in titles that heavily multithread their GPU recording work.

Starting with this release, GPU PIX events can now have their PIXBeginEvent and PIXEndEvent calls happen on different CPU threads. With this change, the starting and ending times for the corresponding CPU work will be rendered differently on the CPU threads in the timeline.  Rather than denoting the start and ends times of the CPU work with a PIX event, the start and end times are now shown as PIX CPU markers.  Arrows showing the relationship between the start and end times are drawn between the PIX CPU markers and the corresponding PIX GPU event.

You don’t have to update your copy of WinPixEventRuntime to make use of this new functionality. However you will have to take fresh captures with this PIX release (or later) to get it.

Screenshot 2025 05 06 091757 image

A New Layout for Defining and Managing Budget Profiles

This release introduces the concept of Budget Profiles in Timing captures.  A Budget Profile is a grouping of budgets defined on their respective metrics.  A common use of Budget Profiles is to define the performance targets, or profiles, for different hardware specifications.  For example, your studio likely has different performance targets for min-spec, mid-range and high-end PCs.  Budget Profiles are defined and managed using a new Budgets layout.

Screenshot 2025 05 06 092346 image

Additional Memory Analysis Tooling

Several new memory profiling features have been added in this release, including:

  • A set of metrics that track working set size, page fault count and page file usage
  • A new lane in the Timeline that displays the working set size, and the amount of memory allocated by the various allocators throughout the capture
  • A new UI layout focused on memory analysis. This layout enables developers to analyze the memory allocations and accesses made during the capture. Developers can filter the data in various ways and find cases where memory is allocated, but then never accessed. Links to the timeline view are provided for all memory accesses.

Screenshot 2025 05 06 092404 image

New Sublanes in the Timeline that Show CPU Usage

A sub lane is now present on thread and core lanes that show CPU usage.

Screenshot 2025 05 06 092427 image

Misc Bug Fixes and Improvements

  • Capture reliability:
    • Improve memory usage while capturing ExecuteIndirect() at capture time, to fix reliability issues with titles that have lots of EI calls whose arg buffers live in one giant ID3D12Resource*
    • Fix replay error if application uses GPU Upload Heaps on a machine that only supports GPU Upload Heaps if Developer Mode is enabled (i.e. older Windows OSes)
    • Fix potential crash at capture time if app reads data out of PSO struct on one thread while another thread is compiling that PSO
    • Fix potential race condition with very multithreaded root sig creation
    • Fix View Instancing being disabled when flag isn’t set
    • Fix capture issue caused by use of [WaveSize(n)] in Node shaders
    • Fix misc issues with Generic Program capture/replay
    • Fix WorkGraphs’ Local Root Arguments Table parser to handle stride == 0
  • General replay improvements:
    • Retrieve buffer format from external PDBs if reflection data has been stripped from the shader
    • Don’t crash when starting analysis if draw is performed without a root sig
    • Improve logging if PIX crashes during start analysis resource creation
    • Acceleration Structure Viewer: fix FOV range clamping bug
    • Event List: Fix tree/flat goggle
    • Buffer Panel: fix column spacing bug
    • DXR Invocations: fix sticky error when trying to view zero invocations in AS viewer
    • Gather Accessed Resources: recompile and retry with PIX’s own HLSL compiler as necessary
      • Fixes issues with some titles that use custom DXCompiler forks
    • Gather Accessed Resources: make button more visible
    • Shader Sources view: only load after starting analysis, since data isn’t available before then
    • Shader Debugging: misc shader debugging icon improvements
    • Shader Debugging: robustify shader debugging against a null global root sig
    • Shader Edit ‘n’ Continue: Don’t auto-refresh counters after applying edit
    • Texture Viewer: Fix issue with Depth dropdown menu not populating correctly in texture viewer
    • Timing Data: Fix collection when ExecuteIndirect()’s MaxCommandCount is 0
    • VS Output: Fix when null is passed to SetGraphicsRootSignature
    • VS Output: Fix issue with if IA was changed on event immediately after the selected event
    • Make sure generate full PDB option is disabled if analysis hasn’t been run
    • Invert the “Enable GPU Plugins” option to be “Disable GPU Plugins”
  • Other GPU Capture improvements:
    • Misc Export to C++ fixes + minor improvements
  • Other:
    • Fix sporadic issue when taking a Timing Capture due to non-zero-inited ETW config struct
    • Fix some remote capture issues with local username contains domain suffix
    • Fix extra newlines being added when copying text, e.g. from the event list
    • Add “copy document name” to right-click menu on document tab
    • Misc perf improvements in the UI, particularly in the timeline
    • Make Recent Folders open File Explorer
Category
PIX
Topics
release

Author

Norman Chen
Technical Program Manager

Developer on the PIX on Windows team at Microsoft.

0 comments