{"id":5976,"date":"2023-03-02T13:00:14","date_gmt":"2023-03-02T21:00:14","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/pix\/?p=5976"},"modified":"2023-03-02T13:01:36","modified_gmt":"2023-03-02T21:01:36","slug":"pix-2303-02","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/pix\/pix-2303-02\/","title":{"rendered":"PIX 2303.02: You asked, we listened! A bumper PIX release"},"content":{"rendered":"<p>Today we released PIX on Windows version 2303.02, which can be downloaded <a href=\"https:\/\/devblogs.microsoft.com\/pix\/download\/\">here<\/a>. We have also released a new version of WinPixEventRuntime, which can be downloaded <a href=\"https:\/\/www.nuget.org\/packages\/WinPixEventRuntime\">here<\/a>.<\/p>\n<p>This release has many new features and bug fixes in direct response to requests and feedback we&#8217;ve received from PIX users. Thank you for all of your feedback and suggestions so far, and please keep &#8217;em coming! Ways to contact us include the DirectX Discord server (<a href=\"http:\/\/discord.gg\/directx\">discord.gg\/directx<\/a>) and the feedback button in PIX.<\/p>\n<p>This release includes:<\/p>\n<p><strong>GPU Captures<\/strong><\/p>\n<ul>\n<li><a href=\"#raygen-shader-debugging\">RayGen shader debugging<\/a><\/li>\n<li><a href=\"#dxr-pipeline-view-improvements\">DXR pipeline view improvements<\/a>: see HLSL\/DXIL and see resource accesses<\/li>\n<li><a href=\"#plugin-support-for-new-gpus\">Plugins from AMD, NVIDIA, and Qualcomm<\/a> supporting new features and new GPUs<\/li>\n<li><a href=\"#capture-replay-support-for-new-d3d-features\">Capture\/replay support for new D3D features<\/a>\n<ul>\n<li>Enhanced Barriers<\/li>\n<li>Independent Devices<\/li>\n<li>Many other smaller features<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#new-in-application-apis\">Misc new in-application PIX APIs (pix3.h)<\/a><\/li>\n<li><a href=\"#new-image-visualizers-in-the-texture-viewer\">New image visualizers in the Texture Viewer<\/a><\/li>\n<li><a href=\"#revamped-child-process-debugging\">Revamped child process debugging<\/a><\/li>\n<li><a href=\"#event-coloring-for-gpu-captures\">PIX event coloring in GPU Captures<\/a><\/li>\n<li><a href=\"#event-list-diffing-gpu-captures\">Event List and counter diff\u2019ing between captures<\/a><\/li>\n<\/ul>\n<p><strong>Timing Captures<\/strong><\/p>\n<ul>\n<li><a href=\"#resource-residency-events-in-timing-captures\">D3D12 resource\/heap residency events<\/a><\/li>\n<li><a href=\"#programmatic-timing-captures\">Support for taking Timing Captures programmatically via pix3.h<\/a><\/li>\n<li><a href=\"#new-summary-layout-in-timing-captures\">New Summary Layout page<\/a><\/li>\n<li><a href=\"#metrics-view-enhancements\">Metrics View Enhancements<\/a>\n<ul>\n<li>Display units can now be customized<\/li>\n<li>New histogram control<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#c-source-code-analysis-for-memory-allocations\">C++ source code analysis for memory allocations<\/a><\/li>\n<li><a href=\"#data-type-analysis-in-timing-captures\">Data type analysis in Timing Captures<\/a><\/li>\n<li><a href=\"#tracking-custom-memory-allocators-using-the-pixrecordmemoryallocationevent-api\">Tracking custom memory allocators using the PIXRecordMemoryAllocationEvent API<\/a><\/li>\n<\/ul>\n<p><strong>Other<\/strong><\/p>\n<ul>\n<li><a href=\"#new-presentmon-counters-in-system-monitor\">New PresentMon counters in System Monitor<\/a><\/li>\n<li><a href=\"#other-improvements-and-bug-fixes\">And many other smaller improvements.<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>RayGen shader debugging<\/h2>\n<p>This release includes full support for debugging ray generation (DXR 1.0) shaders in PIX\u2019s shader debugger. This builds on the <a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2212-22-preview\/\">preview<\/a> build of PIX that we released in December, fixing the issues that many of you reported to us. Thank you again for your feedback, and please contact us again if you have any other issues or suggestions.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2022\/12\/raygenDebugging.png\"><img decoding=\"async\" class=\"size-full wp-image-5948 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2022\/12\/raygenDebugging.png\" alt=\"Image raygenDebugging\" width=\"948\" height=\"564\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2022\/12\/raygenDebugging.png 948w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2022\/12\/raygenDebugging-300x178.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2022\/12\/raygenDebugging-768x457.png 768w\" sizes=\"(max-width: 948px) 100vw, 948px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>DXR pipeline view improvements<\/h2>\n<p>This release includes full support for \u201cshader access tracking\u201d, where PIX\u2019s pipeline view tells you exactly which resources were <em>accessed<\/em> by each shader entry in your raytracing shader tables. This also builds on the <a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2212-22-preview\/\">preview<\/a> build of PIX that we released in December, fixing the issues that many of you reported to us. Thank you again.<\/p>\n<p>This release also includes the ability to see the HLSL and DXIL for your raygen and miss shaders.<\/p>\n<p>&nbsp;<\/p>\n<h2>Plugin support for new GPUs<\/h2>\n<p>This release includes new plugins from AMD, NVIDIA and Qualcomm, complementing the plugin from Intel that was updated in <a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2208-10001\/\">the last PIX release<\/a>. Many thanks to our hardware partners for their ongoing support and collaboration!<\/p>\n<p>The new AMD plugin adds support for the AMD Radeon RX 7900 XTX and AMD Radeon RX 7900 XT GPUs. The new NVIDIA plugin adds support for the NVIDIA 4000-series GPUs. The new plugins support all the latest PIX plugin features, including low-level hardware counters in the event list and hardware counter graphs in the PIX timeline.<\/p>\n<p>The new Qualcomm plugin adds support for the <a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2208-10001\/#gpu-power-state-selection\">GPU Power State Selection<\/a> feature on Qualcomm Snapdragon 8cx Gen3 devices such as the Surface Pro 9 or the Windows Dev Kit 2023 Desktop PC.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/qualcommpowerstates.png\"><img decoding=\"async\" class=\"size-full wp-image-5987 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/qualcommpowerstates.png\" alt=\"Image qualcommpowerstates\" width=\"442\" height=\"95\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/qualcommpowerstates.png 442w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/qualcommpowerstates-300x64.png 300w\" sizes=\"(max-width: 442px) 100vw, 442px\" \/><\/a><\/p>\n<p>The new NVIDIA plugin comes with some additional terms and restrictions. To view these, please read the EULA that you must accept when you install PIX.<\/p>\n<p>&nbsp;<\/p>\n<h2>Capture\/replay support for new D3D features<\/h2>\n<p>In October <a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2210-10-preview\/\">we released a preview version<\/a> of PIX with support for Enhanced Barriers and misc other D3D12 features. We\u2019re pleased to say that today\u2019s PIX release includes full support for Enhanced Barriers, those D3D12 features, and several newer D3D12 features too.<\/p>\n<p>Here\u2019s the full list of newly supported D3D12 features:<\/p>\n<ul>\n<li><a href=\"https:\/\/microsoft.github.io\/DirectX-Specs\/d3d\/D3D12EnhancedBarriers.html\">Enhanced Barriers<\/a> (ID3D12GraphicsCommandList7 and ID3D12Device8)<\/li>\n<li><a href=\"https:\/\/microsoft.github.io\/DirectX-Specs\/d3d\/IndependentDevices.html\">Independent Devices<\/a> (ID3D12DeviceFactory, ID3D12SDKConfiguration1, etc)<\/li>\n<li>ID3D12GraphicsCommandList8 and ID3D12GraphicsCommandList9<\/li>\n<li>ID3D12Device11 (CreateSampler2)<\/li>\n<li>D3D12_UAV_DIMENSION_TEXTURE2DMS[ARRAY]<\/li>\n<li>D3D12_RASTERIZER_DESC1<\/li>\n<li>D3D12_DEPTH_STENCIL_DESC2<\/li>\n<li>Triangle fans<\/li>\n<li>Software command queues (D3D12_COMMAND_LIST_TYPE_NONE)<\/li>\n<li>D3D12_COMPARISON_FUNC_NONE<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>New In-Application APIs<\/h2>\n<p>This release also adds the following APIs that you can use in your game while taking programmatic GPU captures:<\/p>\n<ul>\n<li>PIXIsAttachedForGpuCapture(): this function returns true if the PIX UI (or pixtool) is running and is attached to the current process, and otherwise it returns false.<\/li>\n<li>PIXOpenCaptureInUI(): this function opens the inputted filename (either a GPU Capture or a Timing Capture) in the PIX UI.<\/li>\n<\/ul>\n<p>This release also fixes some bugs in other PIX APIs. For example, it fixes a bug causing the HUD to be displayed on all windows even if SHOW_ON_TARGET_WINDOW is set.<\/p>\n<p>&nbsp;<\/p>\n<h2>New image visualizers in the Texture Viewer<\/h2>\n<p>This release adds two new highly requested visualizers to the texture viewer. They are designed to make it easier to find your draw: \u201cHighlight current draw\u201d and \u201cClear before draw\u201d.<\/p>\n<p>We plan to add more image visualizers like this to PIX later in 2023. If you have specific visualizations that you would like us to add then please contact us!<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz1.png\"><img decoding=\"async\" class=\"size-full wp-image-5992 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz1.png\" alt=\"Image viz1\" width=\"967\" height=\"459\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz1.png 967w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz1-300x142.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz1-768x365.png 768w\" sizes=\"(max-width: 967px) 100vw, 967px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz2.png\"><img decoding=\"async\" class=\"size-full wp-image-5993 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz2.png\" alt=\"Image viz2\" width=\"920\" height=\"421\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz2.png 920w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz2-300x137.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/viz2-768x351.png 768w\" sizes=\"(max-width: 920px) 100vw, 920px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Revamped child process debugging<\/h2>\n<p>If you launch an application for GPU Capture via PIX, then PIX will inject itself into any child processes that your application launches. This PIX release fixes some long-standing bugs in this area, and it improves the user experience by letting you select which child process you want to capture:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/gpucaptureselect.png\"><img decoding=\"async\" class=\"size-full wp-image-5994 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/gpucaptureselect.png\" alt=\"Image gpucaptureselect\" width=\"602\" height=\"156\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/gpucaptureselect.png 602w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/gpucaptureselect-300x78.png 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/a><\/p>\n<p>The paintbrush icon next to a process means that it\u2019s created a D3D12 device and is potentially capturable.<\/p>\n<p>This functionality will be particularly helpful for multi-process scenarios, such as games with launchers or applications such as Microsoft Edge<\/p>\n<p>&nbsp;<\/p>\n<h2>Event Coloring for GPU Captures<\/h2>\n<p>The PIXBeginEvent() and PIXSetMarker() APIs include a UINT64 color parameter. PIX\u2019s GPU Captures will now display the color next to each event.<\/p>\n<p>This feature is turned off by default for now. To turn on the feature, click on Home-&gt;Settings and check this box:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/useeventscoloring.png\"><img decoding=\"async\" class=\"size-full wp-image-5997 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/useeventscoloring.png\" alt=\"Image useeventscoloring\" width=\"167\" height=\"55\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistwithcolors.png\"><img decoding=\"async\" class=\"size-full wp-image-5998 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistwithcolors.png\" alt=\"Image eventlistwithcolors\" width=\"950\" height=\"529\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistwithcolors.png 950w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistwithcolors-300x167.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistwithcolors-768x428.png 768w\" sizes=\"(max-width: 950px) 100vw, 950px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Event List Diffing (GPU Captures)<\/h2>\n<p>We\u2019ve added a new diff tool to help compare the timing data between two similar GPU Captures. To use the tool, you\u2019ll want to:<\/p>\n<ol>\n<li>Open the first capture in PIX, start analysis, then collect timing data.<\/li>\n<li>Right click the first capture\u2019s event list, go to \u201cCompare\u201d, and set it as the left side for comparison\n<ul>\n<li>On AMD hardware: you must close the first capture at this point. This requirement will be removed in a future version of PIX.<\/li>\n<\/ul>\n<\/li>\n<li>Open the second capture in PIX, start analysis, then collect timing data.<\/li>\n<li>Right click on the other capture\u2019s event list, go to \u201cCompare\u201d and click \u201cCompare to\u2026\u201d<\/li>\n<\/ol>\n<p>The captures don\u2019t need to contain the exact same events in the same order, since the diff tool will try to line up equivalent events between captures. However, the diff tool will work best if you try to minimize the differences between the captures.<\/p>\n<p>We plan to expand this feature in future releases. Please get in touch with your thoughts, feedback, and feature requests!<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/leftsidecompare.png\"><img decoding=\"async\" class=\"size-full wp-image-5999 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/leftsidecompare.png\" alt=\"Image leftsidecompare\" width=\"849\" height=\"152\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/leftsidecompare.png 849w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/leftsidecompare-300x54.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/leftsidecompare-768x137.png 768w\" sizes=\"(max-width: 849px) 100vw, 849px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistcompare.png\"><img decoding=\"async\" class=\"size-full wp-image-6000 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistcompare.png\" alt=\"Image eventlistcompare\" width=\"876\" height=\"462\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistcompare.png 876w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistcompare-300x158.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/eventlistcompare-768x405.png 768w\" sizes=\"(max-width: 876px) 100vw, 876px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Resource Residency Events<\/h2>\n<p>In a previous release we added support for viewing information about D3D12 resource and heap objects to Timing Captures. In this release we&#8217;ve added support to view residency events related to those allocations. Specifically, the D3D12 MakeResident and Evict calls are displayed as well as PageIn and PageOut events, which indicate when memory is paged between GPU and system memory.<\/p>\n<p>To gather this information, you must enable GPU Resources in Timing Capture options. Then, in the Timing Capture Range Details View you&#8217;ll see a new Residence Operations option in the Items to Show dropdown. You will also see a new Residence Operations lane in the timeline that shows the residency events.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/03\/GpuResourcesCheckbox.png\"><img decoding=\"async\" class=\"size-full wp-image-6043 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/03\/GpuResourcesCheckbox.png\" alt=\"Image GpuResourcesCheckbox\" width=\"401\" height=\"261\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/03\/GpuResourcesCheckbox.png 401w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/03\/GpuResourcesCheckbox-300x195.png 300w\" sizes=\"(max-width: 401px) 100vw, 401px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/ResidenceOperations.png\"><img decoding=\"async\" class=\"size-full wp-image-6042 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/ResidenceOperations.png\" alt=\"Image ResidenceOperations\" width=\"1193\" height=\"493\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/ResidenceOperations.png 1193w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/ResidenceOperations-300x124.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/ResidenceOperations-1024x423.png 1024w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/ResidenceOperations-768x317.png 768w\" sizes=\"(max-width: 1193px) 100vw, 1193px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Programmatic Timing Captures<\/h2>\n<p>This release adds support for taking Timing Captures programmatically via the PIXBeginCapture\/PIXEndCapture APIs. This complements PIX\u2019s existing support for taking GPU Captures programmatically via the same APIs.<\/p>\n<p>To take a programmatic Timing Capture, you must do the following:<\/p>\n<ul>\n<li>Run your application as an administrator (also known as \u201celevated\u201d).<\/li>\n<li>Load WinPixTimingCapturer.dll out of the PIX installation directory\n<ul>\n<li>We have added the PIXLoadLatestWinPixTimingCapturerLibrary () API to pix3.h to simplify this. The API will find your newest installation of PIX and load WinPixTimingCapturer.dll out of it<\/li>\n<\/ul>\n<\/li>\n<li>Call PIXBeginCapture(PIX_CAPTURE_TIMING, params) to begin your capture. The params parameter is used to specify the file name and to specify features you want to capture.<\/li>\n<li>Call PIXEndCapture(PIX_CAPTURE_TIMING) to end your capture.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>New Summary Layout in Timing Captures<\/h2>\n<p>Timing Captures include a new Summary layout which provides a set of capture statistics and highlights aspects of performance that are likely candidates for additional investigation, such as the longest PIX events.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturesummary.png\"><img decoding=\"async\" class=\"size-full wp-image-6027 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturesummary.png\" alt=\"Image timingcapturesummary\" width=\"740\" height=\"643\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturesummary.png 740w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturesummary-300x261.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Metrics View Enhancements<\/h2>\n<h2><strong><span style=\"font-size: 12pt;\">Display units can now be customized<\/span><\/strong><\/h2>\n<p>The display units for PIX events and for all memory-related metrics can be customized. For example, the duration, execution and stalled time for PIX events can now be graphed in milliseconds instead of the default nanoseconds.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customizeddisplayunits.png\"><img decoding=\"async\" class=\"size-full wp-image-6011 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customizeddisplayunits.png\" alt=\"Image customizeddisplayunits\" width=\"339\" height=\"545\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customizeddisplayunits.png 339w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customizeddisplayunits-187x300.png 187w\" sizes=\"(max-width: 339px) 100vw, 339px\" \/><\/a><\/p>\n<h2><strong><span style=\"font-size: 12pt;\">New histogram control<\/span><\/strong><\/h2>\n<p>When a metric is graphed in the Timing Capture Metrics View, a histogram is now created that shows the distribution of the values of the metric over the duration of the capture. Users can navigate from the histogram to the Timeline view for deeper analysis of the metrics for each histogram bucket.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturehistogram.png\"><img decoding=\"async\" class=\"size-full wp-image-6012 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturehistogram.png\" alt=\"Image timingcapturehistogram\" width=\"810\" height=\"392\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturehistogram.png 810w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturehistogram-300x145.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/timingcapturehistogram-768x372.png 768w\" sizes=\"(max-width: 810px) 100vw, 810px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>C++ source code analysis for memory allocations<\/h2>\n<p>The memory profiling features in PIX Timing Captures now include a source analysis tab that displays a source code listing that shows which lines within a selected function allocated memory.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Data type analysis in Timing Captures<\/h2>\n<p>The memory profiling features in PIX Timing Captures now include an analysis of all memory allocations by data type. The analysis of allocations per data type can be used to see the amount of memory allocated per data type. Additionally, the amount of padding present in each type is displayed, along with the overall amount of memory taken up by the padding. Knowledge of the amount of padding can be used to find opportunities to eliminate unnecessary padding, thereby shrinking the size of the data type and reducing the amount of memory used.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Tracking custom memory allocators using the PIXRecordMemoryAllocationEvent API<\/h2>\n<p>The new PIXRecordMemoryAllocationEvent and PIXRecordMemoryFreeEvent APIs provide the data that PIX needs to display information about all memory allocations made from within your title\u2019s custom memory allocators in timing captures. By providing this data, PIX shows all the same data for your custom allocators that it does for calls to XMemVirtualAlloc\/VirtualFree and HeapAlloc\/HeapFree.\u00a0 These new APIs are part of the latest version of the WinPIXEventRuntime.<\/p>\n<p>The following code snippet provides an example of using the new APIs to instrument your custom allocator.<\/p>\n<pre class=\"prettyprint language-cpp\"><code class=\"language-cpp\"> \u00a0 #include \"pix3.h\"\r\n\r\n\u00a0\u00a0 void* TitleAllocate(size_t size, UINT64 metadata)\r\n\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 void *pAddress = layer_allocate(size);\r\n\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0if (pAddress == NULL)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return NULL;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PIXRecordMemoryAllocationEvent(TITLE_ALLOCATOR, pAddress, size, metadata);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return pAddress;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 void TitleFree(void* baseAddress, size_t size, UINT64 metadata)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 layer_free(baseAddress, 0);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PIXRecordMemoryFreeEvent(TITLE_ALLOCATOR, baseAddress, size, metadata);\r\n\u00a0\u00a0\u00a0 }<\/code><\/pre>\n<p>To see memory events corresponding to your calls to PIXRecordMemoryAllocationEvent and PIXRecordMemoryFreeEvent, select the Custom Allocator events check box before starting a timing capture as shown in the following figure.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customallocatorevents.png\"><img decoding=\"async\" class=\"size-full wp-image-6019 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customallocatorevents.png\" alt=\"Image customallocatorevents\" width=\"405\" height=\"453\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customallocatorevents.png 405w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/customallocatorevents-268x300.png 268w\" sizes=\"(max-width: 405px) 100vw, 405px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>New PresentMon counters in System Monitor<\/h2>\n<p>This version of PIX includes the latest version of <a href=\"https:\/\/github.com\/GameTechDev\/PresentMon\">PresentMon<\/a>. This enables PIX to display far more PresentMon information in PIX\u2019s System Monitor view: for example, you can now see which presentation mode was used by the target application and see graphs of important presentation statistics. Many thanks to the folks who maintain PresentMon on GitHub!<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/sysmon.png\"><img decoding=\"async\" class=\"size-full wp-image-6020 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/sysmon.png\" alt=\"Image sysmon\" width=\"1114\" height=\"660\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/sysmon.png 1114w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/sysmon-300x178.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/sysmon-1024x607.png 1024w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2023\/02\/sysmon-768x455.png 768w\" sizes=\"(max-width: 1114px) 100vw, 1114px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Other improvements and bug fixes<\/h2>\n<ul>\n<li>GPU Captures:\n<ul>\n<li>Show surrounding PIX Event Name in Resouce History entries<\/li>\n<li>Show PSO, RTPSO, Root Signature, Local Root Signature in the Pipeline view<\/li>\n<li>Add more \u201cPlay\u201d buttons to make it easier to start shader debugging<\/li>\n<li>Fix misc issues capture\/replaying &gt;4GB buffers<\/li>\n<li>Improve capture-time performance for multi-frame captures<\/li>\n<li>Improve stability while repeatedly taking programmatic GPU Captures<\/li>\n<li>Fix bug resulting in PIX sometimes not showing all valid vertex slot bindings<\/li>\n<li>Misc fixes to the Texture Viewer when using &#8220;Flip&#8221; checkboxes to flip the texture<\/li>\n<li>Avoid crash during SetStateObject() by avoiding modifying the app&#8217;s state object desc<\/li>\n<li>Improve timing data accuracy around command list boundaries<\/li>\n<li>Improve performance when copying data out of buffer viewer<\/li>\n<li>Mesh Viewer: Recenter the arcball camera in when the window size changes<\/li>\n<li>Mesh Viewer: Support Azerty keyboard layouts in camera controls<\/li>\n<li>Fix capture\/replay of video apps that leave resources in video-specific states<\/li>\n<li>WriteToSubresource(): fix capture-time box issue for mips &gt; 0<\/li>\n<li>WriteToSubresource(): fix capture-time block-compressed issues<\/li>\n<li>Reduce change of ETW hang while collecting Timing Data<\/li>\n<li>Fix the UV Atlas panel<\/li>\n<li>Fix WinPixGpuCapturer.dll mismatch error when attaching to a process in some arm64 scenarios<\/li>\n<li>Fix attach to processes for GPU Capture in some arm64 scenarios<\/li>\n<li>Support ID3D12DeviceRemovedExtendedData2<\/li>\n<\/ul>\n<\/li>\n<li>Export to C++\n<ul>\n<li>Fix null terminator issue when enumerating playback adapters<\/li>\n<li>Fix issue with acceleration structure input geometry<\/li>\n<li>Support for compute-only devices<\/li>\n<li>Fix some 11On12 scenarios by convert to flip model compatible DXGI_FORMAT<\/li>\n<\/ul>\n<\/li>\n<li>Timing Captures:\n<ul>\n<li>Hash PIX events when there&#8217;s no correlated GPU execution<\/li>\n<\/ul>\n<\/li>\n<li>pixtool\n<ul>\n<li>Add &#8211;disable-gpu-plugins option to pixtool<\/li>\n<li>Fix misc relative path issues when launching\/taking captures<\/li>\n<\/ul>\n<\/li>\n<li>WinPixEventRuntime\n<ul>\n<li>Add debug name for internal threads<\/li>\n<li>Perf fix by using the correct template specialization for simple PIX events and markers<\/li>\n<li>Fix misc compilation errors (e.g. with clang 15.0.1 or with GDK projects)<\/li>\n<\/ul>\n<\/li>\n<li>Misc fixes\/improvements\n<ul>\n<li>Enabled Drag &amp; Drop captures into PIX<\/li>\n<li>Fix misleading error when Developer Mode isn&#8217;t enabled<\/li>\n<li>Fix UI hyperlinks (e.g. to websites) on ARM64 (.net6) builds<\/li>\n<li>Remove commercial use clause from EULA<\/li>\n<li>Log far more capture time errors to the PIX output window<\/li>\n<li>Fix misc HoloLens-specific issues<\/li>\n<li>Update to D3D12 Agility SDK 1.608.2<\/li>\n<li>Update PIX to .NET6<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Today we released PIX on Windows version 2303.02, which can be downloaded here. We have also released a new version of WinPixEventRuntime, which can be downloaded here. This release has many new features and bug fixes in direct response to requests and feedback we&#8217;ve received from PIX users. Thank you for all of your feedback [&hellip;]<\/p>\n","protected":false},"author":1899,"featured_media":4769,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[4],"class_list":["post-5976","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pix","tag-release"],"acf":[],"blog_post_summary":"<p>Today we released PIX on Windows version 2303.02, which can be downloaded here. We have also released a new version of WinPixEventRuntime, which can be downloaded here. This release has many new features and bug fixes in direct response to requests and feedback we&#8217;ve received from PIX users. Thank you for all of your feedback [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts\/5976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/users\/1899"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/comments?post=5976"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts\/5976\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/media\/4769"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/media?parent=5976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/categories?post=5976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/tags?post=5976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}