PIX Release 2008.26 – Our biggest update to GPU captures since 2017
Over the past two years, the PIX on Windows team has heard from many of you who rely on PIX for your development work. We’ve heard you loud and clear – you want PIX to be faster when taking GPU captures. Today, we’re happy to announce a huge release in response to that feedback. This release includes performance improvements at capture time, along with a host of other improvements that were only made possible by completely re-writing the PIX capture layer. Download and try it here.
We have too much packed into this release to cover in one post, so the PIX development team is posting a series of blogs over the next two weeks that go in-depth on the changes to PIX. They’ll be linked here as they are posted!
- Austin Kinross goes in-depth with data and charts on how much faster games run under GPU capture in PIX 2008.26: Performance Improvements.
- Austin explains how we support placed and tiled resources in GPU Captures: How we support placed and reserved resources.
- Matt Amert details the many improvements to the way you take captures in Changes to the capture experience.
- Austin expounds on D3D video support in GPU Captures: Support for D3D Video.
- Jeff Noyle describes how you can debug D3D11 apps with PIX in Debugging D3D11 apps using D3Don12
- And finally, Damyan Pepper gives an explanation of how PIX now captures GPU Work instead of API Calls in Capturing GPU Work.
While we’ve been working on this release for a long time and have tested with dozens of games, it’s likely that there will be some issues at first. If you run into any bugs or irregularities with this new version, please let us know by hitting the send feedback button in the top right corner of PIX. You can always install a previous version here.
Now let’s get into some of the big changes:
The highlight of this release is the performance improvements. Capture-time framerates are much higher than in previous versions. During our benchmarking, we’ve seen framerate improvements between 3X to 57X at capture time. Capture replay performance is also greatly improved. A thorough exploration of these improvements can be found here.
Broader Application Compatability
This release enables GPU captures of some previously unsupported scenarios, including:
- Support for Hololens 2 applications that would deadlock with previous builds of PIX.
- Support for applications that would deadlock on hybrid devices with previous builds of PIX.
- Support for applications that use D3D12 video APIs.
- All known issues capturing D3D11 applications through D3D11on12 have been resolved.
- Improved support for placed/tiled resources.
- DRED is now fully supported in applications running under GPU Capture.
- We correctly capture/replay applications that use placed upload resources.
- We correctly serialize view instancing information in PSO streams.
- We correctly capture raytracing acceleration structures created in one capture and used in a later capture.
Improvements while taking captures
We’ve made improvements to the experience taking GPU Captures:
- You can open and analyze newly-taken GPU Captures without closing your game/application. This is now turned on by default, and all issues with the previous setting to enable this have been resolved.
- Each .wpix file now contains exactly 1 GPU Capture. This matches Xbox PIX, and removes some confusing user experiences.
You are now able to take captures of applications that use D3D12 video APIs. You can also capture D3D11 video work using the “Force D3D11on12” . Look out for a blog post next week that details this new ability.
Bundles are now fully supported in GPU Captures. In particular, all known bundle lifetime issues during capture have been resolved, and we now support ExecuteIndirect inside a bundle.
CPU Modifications in Resource History
Resource modifications made on the CPU timeline (for example, via Map() and Unmap() calls) are now visible in the Resource History view. This will make it much easier to tell when a resource had been modified on the CPU timeline.
- Tiled resources tier 1 is no longer supported.
- PIX on Windows now requires Windows 10 version 1809 (aka RS5) or newer. Previous versions of PIX can be used on older versions of Windows 10, check the Requirements page for more details.
- The usage of ‘programmatic-capture –until-exit’ has changed, in response to our change to only store one capture per .wpix file. Please see the documentation for more information.
- The CPU event list has been replaced with a combined “CPU Timeline” representing all relevant CPU work performed during replay.
- Captures from older versions of PIX will not open in this build.
- Captures from this version of PIX will not open in older versions of PIX.
- Since we now capture fewer CPU events than before, it is now easier to accidentally take an empty programmatic GPU Capture. This may happen, for example, if you call BeginCapture() and EndCapture() on the CPU timeline around an ExecuteCommandLists() call that is behind an unsatisfied wait on the GPU timeline. Please be careful to flush your GPU work before ending your capture.
- Add a filter bar to timing captures with regex support and exclusion option.
- We now assign a Global ID to Present() events, making them easier to find in the event list.
- Applications that create >4GB D3D12 buffers are now supported.
- Full support for ID3D12Device3::EnqueueMakeResident().
- Correct handling of resource promotion/decay at capture time.
- Improved CPU write tracking on WARP devices.
- Fixed all known issues with capture/replay of applications using CreateCommandList1.
- Better warning/errors if the application uses multiple D3D12 devices during a capture.
- Misc object lifetime and reference counting issues have been fixed.
- Calling SetEventOnCompletion() with a null HANDLE is now supported.
- Added Start Analysis Dropdown Menu to streamline the workflow of starting analysis without terminating the application.
- Move popup placement when mousing over elements in lanes, removing annoying flickering bug.
The following are known issues that we plan to fix in upcoming releases.
- Users may see an error preventing GPU capture analysis when using the ML library, or when using metacommands directly if their application uses metacommands initalized by resources that are destroyed before a GPU capture begins.
- Resources history can show the wrong resource state, particularly for buffers.
- If you are accessing PIX through Remote Desktop, disconnecting from Remote Desktop may cause the application to get stuck under GPU Capture.
- ID3D12CommandQueue::CopyTileMappings() is not currently supported.