{"id":5430,"date":"2021-04-20T10:43:44","date_gmt":"2021-04-20T17:43:44","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/pix\/?p=5430"},"modified":"2021-04-22T13:36:24","modified_gmt":"2021-04-22T20:36:24","slug":"pix-2104","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/pix\/pix-2104\/","title":{"rendered":"PIX 2104.20: DirectX 12 Agility SDK Support, New Occupancy Graphs, Timing Capture Improvements"},"content":{"rendered":"<p>Today we released PIX version 2104.20\u00a0which can be downloaded <a href=\"https:\/\/aka.ms\/downloadpix\">here<\/a>. This release coincides with the announcement of the DirectX 12 Agility SDK &#8211; read more about that announcement <a href=\"https:\/\/devblogs.microsoft.com\/directx\/announcing-dx12agility\/\">here<\/a>.<\/p>\n<p>We&#8217;ve added support for all new features in the Agility SDK, including Shader Model 6.6. We&#8217;ve added new occupancy graphs based on high frequency counter data for supported GPUs, and added support for Slim PDBs. We&#8217;ve also added an experimental new feature that allows you to attach PIX on Windows to an existing live process and take a GPU capture, and made improvements to the buffer formatter. Numerous improvements to <a href=\"https:\/\/devblogs.microsoft.com\/pix\/timing-captures-new\/\">Timing Captures<\/a> are also provided, including enhancements to the Metrics View and the Sampling Profiler.\u00a0 Read on to learn more, and remember, as always, you can send us your feedback using the button in the top right corner of PIX!<\/p>\n<h2>Capture\/Replay with the Agility SDK<\/h2>\n<p>Today at Game Stack Live, Microsoft announced the new <a href=\"https:\/\/devblogs.microsoft.com\/directx\/announcing-dx12agility\/\">DirectX 12 Agility SDK<\/a>. With the Agility SDK, gamers and game developers have access to the latest and greatest DirectX features even sooner. This PIX release fully supports the Agility SDK and its features on all versions of Windows 10 that support the Agility SDK. That means you can take a GPU capture of any application that uses the Agility SDK and play it back in PIX.<\/p>\n<h2>HLSL Shader Model 6.6<\/h2>\n<p>Today&#8217;s Agility SDK release introduces <a href=\"https:\/\/devblogs.microsoft.com\/directx\/hlsl-shader-model-6-6\/\">HLSL Shader Model 6.6<\/a>. Shader Model 6.6 introduces the ability to directly index into descriptor heaps from shaders without a root descriptor table, which PIX fully supports. PIX can even tell you which resources you accessed dynamically in your shaders:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Picture1.png\"><img decoding=\"async\" class=\"size-full wp-image-5438 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Picture1.png\" alt=\"Screenshot of the CS stage in PIX\" width=\"288\" height=\"186\" \/><\/a><\/p>\n<p>PIX also supports other Shader Model 6.6 features, such as 64-bit integer and limited bitwise floating-point atomic operations &#8211; read more about the Shader Model 6.6 spec <a href=\"https:\/\/github.com\/microsoft\/DirectX-Specs\/blob\/master\/d3d\/HLSL_ShaderModel6_6.md\">here<\/a>.<\/p>\n<h2>Slim PDBs<\/h2>\n<p>This version of PIX on Windows also adds support for the new DXCompiler feature Slim PDBs. These optimized PDB files contain only the compiler version, shader sources, compile options, and defines, resulting in a 30% decrease in compile time vs -Zi and PDBs that are 89% smaller on average.<\/p>\n<p>To enable shader debugging and viewing HLSL inline with GPU instructions, PIX has a new \u201cGenerate full PDB\u201d option in the Shader \u201cCommands\u201d panel. This uses Edit-and-Continue to generate the lower level debug information needed from the source code and compilation flags stored in the slim PDB.\u00a0 While this does take some time depending on the shader, we suspect the 30% decrease in shader cook time and the drastic decrease in PDB size is well worth it.\u00a0PIX will report if the current compiler shipped with PIX does not match the one used to generate the shader and the matching compiler can be supplied if desired.<\/p>\n<h2>Occupancy Graphs<\/h2>\n<p style=\"text-align: left;\">We&#8217;ve added new occupancy graphs to PIX on Windows based on High Frequency Counter data. These are our long-term replacement for PIX\u2019s existing Occupancy graph, which is being deprecated for several technical reasons.<\/p>\n<p>The new graphs have two main features:<\/p>\n<ol>\n<li>A Wave Distribution graph, which helps understand how many waves (or what percentage of possible waves) are active at any given point in time. On some hardware, this graph is broken down into per-shader stage numbers.<\/li>\n<li>Additional graphs to help understand what\u2019s limiting your GPU\u2019s occupancy at any given point in time.<\/li>\n<\/ol>\n<p>Which counters are collected varies by GPU manufacturer. Right now, the new Occupancy Graphs are supported for NVIDIA and Intel, with support for more manufacturers coming in a future release. Many thanks to our IHV partners for making this possible!<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy.png\"><img decoding=\"async\" class=\"aligncenter wp-image-5431 size-large\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy-1024x581.png\" alt=\"Intel Occupancy Graph\" width=\"640\" height=\"363\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy-1024x581.png 1024w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy-300x170.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy-768x435.png 768w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy-1536x871.png 1536w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/Intel_NewOccupancy-2048x1161.png 2048w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><em>Capture taken on an Intel\u00ae UHD Graphics 620<\/em><\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/NVIDIA_NewOccupancyGraphs.png\"><img decoding=\"async\" class=\"aligncenter wp-image-5432 size-large\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/NVIDIA_NewOccupancyGraphs-1024x744.png\" alt=\"NVIDIA Occupancy Graph\" width=\"640\" height=\"465\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/NVIDIA_NewOccupancyGraphs-1024x744.png 1024w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/NVIDIA_NewOccupancyGraphs-300x218.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/NVIDIA_NewOccupancyGraphs-768x558.png 768w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/NVIDIA_NewOccupancyGraphs.png 1162w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><em>Capture taken on a NVIDIA RTX 3080<\/em><\/p>\n<h2>Attaching to Live Processes<\/h2>\n<p>Some users requested a way to launch their game through Visual Studio or another program, and then attach PIX to that live process to take a GPU capture. This is now possible &#8211; you can attach PIX on Windows to an existing live process and take a GPU capture if that process loaded the matching version of WinPixGpuCapturer.dll before creating its D3D12 device. Additional documentation can be found <a href=\"https:\/\/devblogs.microsoft.com\/pix\/taking-a-capture\/\">here<\/a>.<\/p>\n<h2>Buffer Viewer<\/h2>\n<ul>\n<li>We&#8217;ve added some new buffer viewer enhancements, including<\/li>\n<li>New &#8220;globals&#8221; buffer, allows you to define structures that are available to all buffers<\/li>\n<li>Import\/Export of buffer formats<\/li>\n<li>Better layout of formats list and buttons, and a splitter for size control<\/li>\n<li>Buffer format editor is now available in Settings tab<\/li>\n<li>Auto-generate buffer viewer formatting for structured buffers<\/li>\n<\/ul>\n<h2>CPU Sampling Profiler C++ Source Code View<\/h2>\n<div>\n<div class=\"halcyon-chm\">\n<p>The <a href=\"https:\/\/devblogs.microsoft.com\/pix\/analyzing-cpu-samples-in-timing-captures\/\">Sampling Profiler<\/a> that is built into Timing Captures now includes a C++ source view. The source view uses coloring to attribute the collected CPU samples with source lines.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/sampling_profiler_source_view.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5458\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/sampling_profiler_source_view.png\" alt=\"Image sampling profiler source view\" width=\"1430\" height=\"560\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/sampling_profiler_source_view.png 1430w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/sampling_profiler_source_view-300x117.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/sampling_profiler_source_view-1024x401.png 1024w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/sampling_profiler_source_view-768x301.png 768w\" sizes=\"(max-width: 1430px) 100vw, 1430px\" \/><\/a><\/p>\n<\/div>\n<\/div>\n<h2>Timing Capture Metrics View Improvements<\/h2>\n<p>The Metrics view in <a href=\"https:\/\/devblogs.microsoft.com\/pix\/timing-captures-new\/\">Timing Captures<\/a> now contains a panel that displays all currently active metrics. The table of graphed metrics includes a checkbox that can be used to toggle whether a given metric is currently graphed, along with dropdowns to customize various aspects of how individual Metrics are graphed. A metric\u2019s line style, color, and the aggregation mode (minimum, maximum, average) can all be customized. The ability to remove a metric from the active list is also provided.<\/p>\n<p>In addition, the minimum and maximum y-axis values can now be specified per metric. The ability to customize the y-axis makes several analysis scenarios easier, including those in which a few outlying points obscure the differences in the majority of graph points.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/metrics_view_active_metrics.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5460\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/metrics_view_active_metrics.png\" alt=\"Image metrics view active metrics\" width=\"1110\" height=\"517\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/metrics_view_active_metrics.png 1110w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/metrics_view_active_metrics-300x140.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/metrics_view_active_metrics-1024x477.png 1024w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/metrics_view_active_metrics-768x358.png 768w\" sizes=\"(max-width: 1110px) 100vw, 1110px\" \/><\/a><\/p>\n<h2>Timing Capture Migration Support<\/h2>\n<p>Previous versions of Timing Captures can now be migrated to the newest version.\u00a0 In some releases of PIX, the Timing Capture file format must be changed as new features are added. The 2104.20 release of PIX on Windows includes such a format change. PIX now includes support for migrating old captures forward to the current file format so they can be opened in the latest version of PIX.\u00a0 See the Convert menu on the Home tab:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/convert_timing_capture.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5462\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/convert_timing_capture.png\" alt=\"Image convert timing capture\" width=\"738\" height=\"378\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/convert_timing_capture.png 738w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/04\/convert_timing_capture-300x154.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/p>\n<h3>Other changes:<\/h3>\n<ul>\n<li>Add button to reload symbols to Timing Captures<\/li>\n<li>Fix UI hang when opening Timing Capture with very many PIX events<\/li>\n<li>Timing Captures: Add UI option to truncate module names in stack trees<\/li>\n<li>Timing Captures: Add option to clamp memory stack tree depth<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today we released PIX version 2104.20 &#8211; adding support for all new DirectX 12 Agility SDK features including Shader Model 6.6. This release adds support for DXCompiler Slim PDBs, adds new occupancy graphs for supported GPUs, and includes an experimental feature that allows you to attach to a running process for GPU capture. <\/p>\n","protected":false},"author":14687,"featured_media":5443,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[4],"class_list":["post-5430","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pix","tag-release"],"acf":[],"blog_post_summary":"<p>Today we released PIX version 2104.20 &#8211; adding support for all new DirectX 12 Agility SDK features including Shader Model 6.6. This release adds support for DXCompiler Slim PDBs, adds new occupancy graphs for supported GPUs, and includes an experimental feature that allows you to attach to a running process for GPU capture. <\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts\/5430","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\/14687"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/comments?post=5430"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts\/5430\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/media\/5443"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/media?parent=5430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/categories?post=5430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/tags?post=5430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}