PIX 2004.27 – Improved struct support in the Buffer Viewer, CPU Memory and File IO Data in Timing Captures

Morgan Grobin

Today we released PIX 2004.27 which can be downloaded here. This release contains improved support for structs in the Buffer Viewer, and support for CPU memory allocation data and file I/O data in Timing Captures. This version also includes an updated plugin for AMD GPUs, and supports a new pixtool flag to help automate grabbing an unknown number of captures.

Improved struct support in the Buffer Viewer

The format specification syntax used in the buffer viewer has been enhanced. It now supports true nesting of structures, as well as arrays. With these additions, the default format descriptions of constant buffers (for example) that contain arrays or nested structures are no longer “unrolled” into lengthy, repetitive descriptions.

To display such structures in the buffer viewer, the default display mode is now “tree” form. This mode is similar to the locals/watch windows in Visual Studio, where structures and arrays are shown as parent nodes, with their members/elements as children, and so on. Here’s an example:

Screenshot of the Buffer Viewer in PIX displaying a struct in tree form

Tree mode is required in order to display the arbitrarily complex structures that can be defined with the new syntax.  However, if the structure is simple and can be displayed in tabular form, that option is still available using the “Table/Tree” toggle button. Here’s the result:

Screenshot of the Buffer Viewer in PIX in table mode

Other enhancements to the syntax include:

  • A new syntax for specifying padding, which is simply ‘pad n;’ where n = number of bytes.
  • Bitfield specification, which allows extraction of bit-packed values.  For example, you might have a DWORD value that has a set of flags in the high bits and a count in the remaining bits.  You could describe this with the following format:
    int count:29;
    int flagA:1;
    int flagB:1;
    int flagC:1;

There is also a new “offset” value that you can specify as the start point for the buffer viewer to begin visualizing data. This is a byte-offset from the beginning of the actual buffer data selected in the pipeline view.

pixtool programmatic-capture --until-exit

New in pixtool this release is the --until-exit flag on programmatic-capture. Using this flag will cause pixtool to handle all the programmatic captures until the app exits. This may be useful to users who want to automate grabbing an unknown number of captures.

CPU Memory allocation data in Timing Captures

Timing Captures now include options to record information on the CPU memory allocations and frees made while the capture is running. This memory data is used to build an allocation stack tree focused on helping identify memory leaks.

Screenshot of CPU Memory Allocation in PIX

File IO data in Timing Captures

Timing Captures now include the option to collect data on file accesses made by your title using the Win32 APIs. PIX uses this data to display when each file i/o operation occurred, how long it took, how many bytes were read, and so on. Callstacks for each file access are displayed as well.

Screenshot of File IO Data in Timing Captures

Let us know your thoughts!

  • Send your feedback, bug reports or questions to askwinpix at microsoft.com
  • See the Support page for other ways to contact us

Other Changes

  • Updated to the latest AMD Plugin which enables the following:
    • Support for upcoming AMD APU’s
    • Support for the upcoming 20.10 AMD driver in support of the Windows 10 May 2020 Update
    • Occupancy fixes
  • Full support for Sampler Feedback, including:
    • Added support for Sampler Feedback maps in Pixel History.
    • MIN_MIP feedback maps are now displayed correctly when accessing only one mip level.
    • Fixed issues when replaying MIN_MIP Sampler Feedback maps that would either cause StartAnalysis to fail or the feedback map to be in the incorrect resource state.
    • Fixed issues resolving MIP_REGION_USED feedback maps that had a full mip chain.
  • New Timing Capture Improvements
    • Minor performance improvements when opening new timing captures.
    • Update support for real-time sessions to dynamically choose the best ETW configuration.
    • Fixed issue where the end timestamp would sporadically occur before the start timestamp.
    • Apps containing old-style PIX events from <pix.h> will now capture successfully, but the events themselves will not appear in PIX.
  • Fixed issue where breakpoints wouldn’t bind when shaders mixed “\” and “/” when specifying include paths.
  • Added support for Ctrl + Tab to switch between documents.
  • Middle-clicking on a tab will now close it.
  • Fixed timing data collection for DispatchRays inside ExecuteIndirect.
  • Improved performance of d3d state view when large numbers of descriptors are bound.
  • Fixed issue where the VSOutput table format could be incorrectly ordered and only displayed floats.
  • Updated all help links to point to devblogs.microsoft.com/pix instead of blogs.msdn.com/pix.


Discussion is closed.

Feedback usabilla icon