PIX 1909.23 – New timing capture features, performance improvements and bug fixes
Today we released PIX 1909.23* which can be downloaded here. This release contains new timing capture features, support for programmatic captures in pixtool, performance improvements and many bug fixes.
* 1909.23 is the new name for 1909.13. Sorry for any confusion.
New Timing Captures
This release of PIX includes several enhancements to New Timing Captures aimed at helping you diagnose when your title’s threads have stalled and why. Visual adorners are now drawn on the timeline to make it easier to see what caused a thread to be switched out and switched back in again.
You can also now select a region of unscheduled time directly. When doing so, the Element Details view is populated with information about the context switches that border the stall. Hyperlinks in Element Details allow you to quickly navigate to the threads, cores and context switches involved in the stall.
When looking at Core lanes, it’s now much easier to spot periods of time when your title isn’t running, and to see which process is running instead. In the following picture, we can see periods of time when Outlook.exe is running on the Core than runs my title’s main simulation loop.
Optimized Shader Access Tracking
The first time that PIX attempts to populate the Pipeline view it performs “Shader Access Tracking” for the entire capture. This process involves patching every shader to record which resources were actually accessed by that shader. In this release we’ve optimized this process – in one case we measured a 100 times speedup.
Programmatic Captures from pixtool
pixtool now supports waiting for a GPU Programmatic Capture using the new programmatic-capture command. Similar to the existing take-capture command, you can immediately open programmatic captures with the –open flag, or use save-capture to write the file to disk.
pixtool launch "D3D12HelloProgrammaticCapture.exe" programmatic-capture --open list-counters save-capture "PixtoolProgrammaticCapture.wpix"
Changes to 12on7 Support in PIX
D3D12onWin7 (12on7) is a version of D3D12 that allows game developers to use D3D12 on Windows 7.
If you are porting your application to 12on7 then please follow the development guidance here (https://microsoft.github.io/DirectX-Specs/d3d/D3D12onWin7.html). If you follow these instructions then PIX will continue to work as normal when you run your application on Windows 10. In particular, note that you must place the 12on7 binaries in a subdirectory alongside your application and not in the same directory as your application. This was supported in previous versions of PIX but it won’t be supported going forward.
New Timing Captures
- Add ability to collapse/expand in fragment lanes
- Various bug fixes & visual improvements
- Add ready thread core to ContextSwitchDetails
- Add ready thread lines
- Add “bold context switches” display option
- Fix double-click on aggregate fragment in core lane
- Replace down-arrow with gear icon for lane settings, and fix mouse hover in side bar
- Fix calculation of “First Reliable” timestamp
- Selectable Thread Runs and Stalls
- Adjusted ETW buffer settings to avoid lost events
- Improve loading performacne & display progress bar
- Allow single event selection to select multiple fragments (OTC)
- Optimized Shader-Access-Tracking (in some cases it is now 100 times faster)
- Fix issue with EnqueueMakeResident support that was causing a hang when capturing 9on12 and 11on12 applications
- Basic support for capturing applications that use protected sessions
- Keep current item visible when filter changes in GPU capture event list
- Fixed crash in shader debugging for DXBC when source is missing
- Fixed GPU capture support for MetaCommands to correctly call InitializeMetaCommand in recreation step
- Various other bug fixes around inspecting / debugging / editing shaders
- Don’t try to persist the order/state of per-context lanes in the GPU capture timeline as this can change between captures and interfere with other lanes
- Add support for ReflectSharedProperties and recreation for “GDI-style” shared resources allow capture of 9on12 applications
- Fixed handling of ESC key in the missing PDB dialog
- Fixed debug layer warning: don’t emit zero-sized resource barriers during renderpass emulation
- Updated Intel GPU Plugin – includes a fix to an issue where timing data differed before / after collecting GPU counters
- Fixed crash when playing back certain CheckFeatureSupport calls (by no longer playing back CheckFeatureSupport since it has no affect at playback time)
- Fixed issue with shader access tracking when dealing with heaps that contain invalid descriptors
- Added MetaCommand parameter reflection info to Event Details for ID3DCaptureRecreationHelper::InitializeMetaCommand.
- Turn off checkerboarding in texture viewer by default
- Fixed TDR on Intel when MetaCommands are used
- Add “Copy Value” to shader debugger’s watch view
- Fix background color of checkboxes
- Fix some strange PIX event EoP-EoP durations on NVIDIA
- Fixed UI playback adapter selection for compute-only devices
- Fixed debug layer warning while capturing title that uses tiled resources
- Don’t use SSE4 intrinsics (they’re not supported on older CPUs)
- Add support for programmatic GPU capture in pixtool
- Comma-separated format for Queue ID column
- Fix for PIX doesn’t choose correct adapter if app passed NULL to D3D12CreateDevice
- Connection view now remembers the users’s API combobox selection.
- Add aggregation mode for sysmon counters