{"id":2725,"date":"2017-03-20T03:00:01","date_gmt":"2017-03-20T03:00:01","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/pix\/?p=2725"},"modified":"2019-03-27T11:06:32","modified_gmt":"2019-03-27T18:06:32","slug":"pix-1703-20-002","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/pix\/pix-1703-20-002\/","title":{"rendered":"PIX 1703.20.002 \u2013 NVIDIA GPU counters, file IO traces, shader edit &amp; continue, and pixel cost visualizer"},"content":{"rendered":"<p>Today we released <a href=\"https:\/\/devblogs.microsoft.com\/pix\/download\/\">PIX 1703.20.002 beta<\/a>.\u00a0 New in this release:<\/p>\n<ul>\n<li>NVIDIA GPU counters<\/li>\n<li>File IO traces<\/li>\n<li>Shader edit &amp; continue<\/li>\n<li><em>Pixel Cost<\/em> visualizer<\/li>\n<li>Improved <em>Warnings<\/em> UI.\u00a0 Where possible, warning hyperlinks now point to the GPU rather than CPU event list.<\/li>\n<li>Added an option to disable <em>Capture GPU timings<\/em> when taking timing captures.\u00a0 Turning this off can reduce measurement overhead if you only care about CPU timing information.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>NVIDIA GPU Counters<\/h2>\n<p>As recently announced at GDC, we have partnered with NVIDIA to enable a rich set of hardware performance counters inside PIX.\u00a0 When running on an NVIDIA GPU with the latest driver (378.92) you will see ~300 newly available counters.\u00a0 These can provide much deeper insight into the rendering and performance characteristics of your workload than was previously possible.\u00a0 These counters are implemented by NVIDIA\u2019s C++ API called PerfWorks.\u00a0 To learn more about PerfWorks, click <a href=\"https:\/\/developer.nvidia.com\/perfworks\">here<\/a>.<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/nvidiacounters.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/nvidiacounters.png\" alt=\"nvidiacounters\" class=\"alignnone wp-image-2727\" width=\"254\" height=\"776\" \/><\/a><\/p>\n<p>Many thanks to our partners at NVIDIA for making this possible!<\/p>\n<p>Note that not all counter values are will be rolled up from individual draw calls to their parent marker regions.\u00a0 We will be improving this in future releases.<\/p>\n<p>If you encounter any compatibility issues with this new feature, it can be disabled via the <em>Enable GPU Plugins<\/em> option in PIX <em>Settings<\/em>\u00a0 (and of course, please <a href=\"https:\/\/blogs.msdn.microsoft.com\/pix\/support\/\">let us know<\/a> if you do encounter problems).<\/p>\n<p>Similar functionality from other vendors is coming soon.<\/p>\n<p>&nbsp;<\/p>\n<h2>File IO Traces<\/h2>\n<p>PIX\u2019s file IO profiler helps you identify inefficiencies in your title\u2019s disk IO patterns and package layout.\u00a0 File IO captures provide data on all file accesses made by your title as the capture ran.\u00a0 This data is laid out on a timeline that shows the set of outstanding file IO operations at any point in time along with a graph of IO throughput and disk utilization.\u00a0 PIX also provides a view that groups your accesses by file.\u00a0 Presenting the data in this way makes it easy for you to spot inefficiencies in your package layout.<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/file_io_timeline.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/file_io_timeline-1024x712.png\" alt=\"file_io_timeline\" class=\"alignnone wp-image-2355 \" width=\"836\" height=\"581\" \/><\/a><\/p>\n<p>More documentation on file IO traces is available <a href=\"https:\/\/devblogs.microsoft.com\/pix\/file-io-captures\/\">here<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2>Shader Edit &amp; Continue<\/h2>\n<p>It is now possible to edit HLSL shader code directly inside PIX, and immediately see the effect of your changes on rendering results or performance.\u00a0 This can be useful for prototyping and optimizing shaders, as it can greatly reduce the turnaround time when trying out different ideas.<\/p>\n<p>Edit &amp; continue is accessed from the <em>Pipeline<\/em> view.\u00a0 After selecting a shader you can edit its code however you like, then click <em>Commands<\/em> followed by <em>Apply Edits<\/em>:<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/enc_apply.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/enc_apply.png\" alt=\"enc_apply\" class=\"alignnone wp-image-2675\" width=\"735\" height=\"403\" \/><\/a><\/p>\n<p>Other views (such as OM RTV 0) will update to show the effect of your change.\u00a0 You may find it useful to <a href=\"https:\/\/devblogs.microsoft.com\/pix\/window-arrangement\/\">dock more than one instance<\/a> of the <em>Pipeline<\/em> view next to each other in order to view rendertarget results at the same time as editing shader code.<\/p>\n<p>If you lose track of exactly what you have changed, right-click on the shader code and choose <em>Diff with Original<\/em>:<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/enc_diff1.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/enc_diff1.png\" alt=\"enc_diff1\" class=\"alignnone wp-image-2685\" width=\"400\" height=\"105\" \/><\/a><\/p>\n<p>This will bring up an inline diff view, showing the original code in red with your changes in yellow:<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/enc_diff2.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/41\/2019\/03\/enc_diff2.png\" alt=\"enc_diff2\" class=\"alignnone wp-image-2695\" width=\"485\" height=\"129\" \/><\/a><\/p>\n<p>Note that PIX on Windows (unlike Xbox) does not yet support saving modified shaders back into the .pix3 file.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pixel Cost Visualizer<\/h2>\n<p>The new <em>Pixel Cost<\/em> visualizer colors the scene according to the approximate rendering cost of each pixel.\u00a0 The brightest areas of the resulting image indicate which parts were the most expensive to render.<\/p>\n<p>Pixel cost is estimated by dividing the <em>Execution Duration<\/em> of each draw call by the number of resulting pixel shader invocations, and accumulating that average each time a pixel is written.\u00a0 This includes the cost of other pipeline stages, but it is divided evenly across all pixel shader invocations in the draw without accounting for varying vertex density, etc.<\/p>\n<p>Like our <a href=\"https:\/\/blogs.msdn.microsoft.com\/pix\/2017\/02\/23\/pix-1702-23-002\/\">previous visualizers<\/a>, <em>Pixel Cost<\/em> is accessed in the <em>Pipeline<\/em> view while inspecting the contents of a rendertarget.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today we released PIX 1703.20.002 beta.\u00a0 New in this release: NVIDIA GPU counters File IO traces Shader edit &amp; continue Pixel Cost visualizer Improved Warnings UI.\u00a0 Where possible, warning hyperlinks now point to the GPU rather than CPU event list. Added an option to disable Capture GPU timings when taking timing captures.\u00a0 Turning this off [&hellip;]<\/p>\n","protected":false},"author":1719,"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-2725","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pix","tag-release"],"acf":[],"blog_post_summary":"<p>Today we released PIX 1703.20.002 beta.\u00a0 New in this release: NVIDIA GPU counters File IO traces Shader edit &amp; continue Pixel Cost visualizer Improved Warnings UI.\u00a0 Where possible, warning hyperlinks now point to the GPU rather than CPU event list. Added an option to disable Capture GPU timings when taking timing captures.\u00a0 Turning this off [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts\/2725","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\/1719"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/comments?post=2725"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/posts\/2725\/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=2725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/categories?post=2725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/tags?post=2725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}