PIX 2203.30: Export to C++, UI changes and more!
Today we released PIX version 2203.30, which can be downloaded here.
This release has a lot of new features, including:
- Export to C++
- Adds the ability to export a GPU Capture file into a series of C++ files that perform the captured D3D12 work
- UI changes and perf improvements
- We’ve made significant changes to the UI to improve performance, primarily when switching between captures. Along with that comes an entirely new way to customize the layout, including the ability to create multiple named layouts to quickly switch between, and a few other goodies.
- New Intel and AMD plugins
- Intel: Adds support for Intel® Arc™ A-series graphics devices
- AMD: Improves performance while collecting High Frequency Counters. Also adds new counters, such as TagConflict.
- Shader Debugger support for Tessellation Shaders
- PDB Management Improvements: PDBs may now be placed inside .zip archives
- CPU capture improvements
- Graphing of Execution and Stalled time in the Metrics View
- Consolidated events are now grouped by threadBug fixes and other smaller
- Bugfixes and other smaller improvements
Export to C++
This release adds the ability to export a GPU Capture file into a series of C++ files that perform the captured D3D12 work. Potential use cases for this include:
- Isolate a repro for a bug. For example, if you see rendering corruption in a frame that you suspect is caused by another component (e.g. a driver bug) then you can take a GPU Capture of the frame, export it to C++, and then manually simplify the C++ code into a minimal repro.
- Perform experiments on a capture. For example, you could modify part of the C++ code and see if/how performance changes.
- And more!
The exported code includes a CMakeLists.txt file. You can then use CMake to generate build files for a variety of build systems. Alternatively, you can load the folder in Visual Studio and let Visual Studio autogenerate build files for you (CMake projects in Visual Studio | Microsoft Docs).
As with regular .wpix capture files, we can’t guarantee that the exported C++ code will run correctly on a different GPU/driver compared to the one originally used to take the capture. It will work for some applications, and it won’t work for others.
We have thoroughly tested this feature with a wide range of applications and games. However, if you experience problems, please contact us via the feedback button in PIX or via the DirectX Discord and we will be very happy to help.
UI changes and perf improvements
The user interface has been updated to vastly improve the performance of changing from one tab to another, especially when changing between captures.
As part of these updates, the process of customizing layouts is an all new, menu-driven experience. The general structure of how views are arranged into “layouts” has been simplified, with certain restrictions from the previous version being removed. For instance, views are no longer required to be in a tab, which can reduce wasted screen real estate. The basic model for arranging views in “layout space” is effectively three options:
- Place a view into that space
- “Split” that space into 2 or more spaces (with adjustable splitters between them)
- Put a tab group in that space, and add tab(s) each with their own space
These options can be recursively applied to create virtually any arrangement of views, and allows for new capabilities such as putting multiple views in a single tab, etc. You can also create and name as many different layouts as you like, and switch between them at any time.
There is also a new “minimize” feature, where views (or tab groups) can be collapsed to allow more space for other views. For a simple example, if you want to give more space to the event list view here:
…you can just click on the minimize icon in the upper right of the tab group containing the Screen Shot view, and it’ll get out of your way:
New Intel and AMD plugins
Many thanks to our IHV partners for their support of PIX with continuous updates to their plugins!
Today we’re pleased to announce the availability of two new plugins accompanying today’s release
The new Intel plugin adds support for Intel® Arc™ A-series graphics devices.
And the new AMD plugin improves performance while collecting High Frequency Counters. This plugin also adds new counters, such as TagConflict.
Shader Debugger support for Tessellation Shaders
The shader debugger now supports hull and domain shaders.
PDB Management Improvements
PDBs may now be placed inside .zip archives. PIX will search for .zip files in the PDB path, which you can modify via the settings menu.
CPU Capture Improvements
Graphing of Execution and Stalled time in the Metrics View
A PIX event’s execution time and stalled time can now be graphed in addition to its duration in the Metrics View. These new metrics allow you to analyze the time spent directly in a PIX event while omitting the time the event was stalled.
Consolidated events are now grouped by thread
The algorithm used by PIX to consolidate events for display in the Timing Capture Metrics View now accounts for the thread the events are running on.
For example, if you have a consolidated event named RenderProcess* that runs on two threads, Render1 and Render2, the Metrics View will now contain 2 consolidated events, RenderProcess* (Render1) and RenderProcess* (Render2).
Bugfixes and other smaller improvements
Other GPU Capture improvements:
- Capture Time: fix dangling MetaCommand references that can cause crashes
- Descriptor Heap View: Fix GpuId Descriptor Heap views
- Misc: Improved shader PDB caching in WinPIX
- Pipeline View: Provide UI feedback for out-of-bounds SM6.6 dynamic resource access (i.e. direct from descriptor heap)
- Pixel/Resource History: Add MeshShader events
- pixtool: fix capture/playback of app using non-default adapter
- Texture Viewer: Improving resource and view properties display
- Texture Viewer Horizontal/vertical image flip
- Texture Viewer: Fix calculation of subresources for tiled array resources
- Texture Viewer: Don’t reset the pixel details fields while the cursor is moving
- Texture Viewer: Fix TDR when visualizing a multiplanar _TYPELESS MSAA depth/stencil buffer that has denied SRV creation
- Timeline: Fix dark mode for Execution Duration
- Timeline: Fix misc issues around Wait and Signal timings
- Replayer: Call SetDescriptorHeaps() if necessary when re-initializing MetaCommands
- Replayer: Better error message for D3D12EnableExperimentalFeatures failure
- Shader Debugger: Make “save trace” button do something useful
Other Timing Capture improvements
- A new option named “Detailed symbol processing debug output” has been added. Enabling this setting turns on verbose symbol loading logging to help diagnose issues with PIX finding the correct PDBs.
- WinPixEventRuntime: Add command queue versions of ABI
- Connection Page: Fix Connection Details “OS” version on Win11